MLK-18515-2 PCI: imx: get reserved region for ep rc ddr test region
authorRichard Zhu <hongxing.zhu@nxp.com>
Mon, 14 Jan 2019 12:19:31 +0000 (17:49 +0530)
committerLeonard Crestez <leonard.crestez@nxp.com>
Wed, 17 Apr 2019 23:51:34 +0000 (02:51 +0300)
PCIe ep rc validation is one remote processors communications.
Remove the hard-coded ep rc ddr test region on imx8 platforms.
Get the reserved region for ep rc ddr test region.

Signed-off-by: Richard Zhu <hongxing.zhu@nxp.com>
rebase on v4.19
Signed-off-by: Vipul Kumar <vipul_kumar@mentor.com>
drivers/pci/controller/dwc/pci-imx6.c

index 194f568..6465c8c 100644 (file)
@@ -1628,7 +1628,8 @@ static void imx_pcie_regions_setup(struct device *dev)
                 * RPMSG reserved 4Mbytes, but only used up to 2Mbytes.
                 * The left 2Mbytes can be used here.
                 */
-               ddr_test_region = 0xb8200000;
+               if (ddr_test_region == 0)
+                       dev_err(dev, "invalid ddr test region.\n");
                break;
        case IMX6SX:
        case IMX7D:
@@ -1640,6 +1641,7 @@ static void imx_pcie_regions_setup(struct device *dev)
                ddr_test_region = 0x40000000;
                break;
        }
+       dev_info(dev, "ddr_test_region is 0x%08x.\n", ddr_test_region);
 
        dw_pcie_prog_outbound_atu(pci, 2, 0, pp->mem_base,
                                  ddr_test_region, test_region_size);
@@ -2158,7 +2160,7 @@ static int __init imx_pcie_probe(struct platform_device *pdev)
        struct dw_pcie *pci;
        struct imx_pcie *imx_pcie;
        struct resource *res;
-       struct device_node *node = dev->of_node;
+       struct device_node *reserved_node, *node = dev->of_node;
        int ret;
        u16 val;
 
@@ -2209,6 +2211,17 @@ static int __init imx_pcie_probe(struct platform_device *pdev)
        if (IS_ERR(pci->dbi_base))
                return PTR_ERR(pci->dbi_base);
 
+       reserved_node = of_parse_phandle(node, "reserved-region", 0);
+       if (!reserved_node) {
+               dev_info(dev, "no reserved region node.\n");
+       } else {
+               if (of_address_to_resource(reserved_node, 0, res)) {
+                       dev_err(dev, "failed to get reserved region address\n");
+                       return -EINVAL;
+               }
+               ddr_test_region = res->start + SZ_2M;
+       }
+
        /* Fetch GPIOs */
        imx_pcie->clkreq_gpio = of_get_named_gpio(node, "clkreq-gpio", 0);
        if (gpio_is_valid(imx_pcie->clkreq_gpio)) {