diff options
author | Richard Zhu <hongxing.zhu@nxp.com> | 2018-05-29 13:48:54 +0800 |
---|---|---|
committer | Leonard Crestez <leonard.crestez@nxp.com> | 2018-08-24 12:41:33 +0300 |
commit | f61bf01e9e883b7b46ab39dc9b5a7e6d3add3495 (patch) | |
tree | 0fb8fb1fdc501e305408ce23112699f524fb6125 /drivers/pci/host/pci-imx6.c | |
parent | a370071a5167f1d6e8d640f9e0cc7ec84972cd41 (diff) |
MLK-18515-2 PCI: imx: get reserved region for ep rc ddr test region
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>
Diffstat (limited to 'drivers/pci/host/pci-imx6.c')
-rw-r--r-- | drivers/pci/host/pci-imx6.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/drivers/pci/host/pci-imx6.c b/drivers/pci/host/pci-imx6.c index c0856d74bd40..01a7309b1f02 100644 --- a/drivers/pci/host/pci-imx6.c +++ b/drivers/pci/host/pci-imx6.c @@ -1618,7 +1618,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(pp->dev, "invalid ddr test region.\n"); break; case IMX6SX: case IMX7D: @@ -1630,6 +1631,7 @@ static void imx_pcie_regions_setup(struct device *dev) ddr_test_region = 0x40000000; break; } + dev_info(pp->dev, "ddr_test_region is 0x%08x.\n", ddr_test_region); dw_pcie_prog_outbound_atu(pp, 2, 0, pp->mem_base, ddr_test_region, test_region_size); @@ -2143,7 +2145,7 @@ static int imx_pcie_probe(struct platform_device *pdev) struct imx_pcie *imx_pcie; struct pcie_port *pp; struct resource *res; - struct device_node *node = dev->of_node; + struct device_node *reserved_node, *node = dev->of_node; int ret; imx_pcie = devm_kzalloc(dev, sizeof(*imx_pcie), GFP_KERNEL); @@ -2181,6 +2183,17 @@ static int imx_pcie_probe(struct platform_device *pdev) if (IS_ERR(pp->dbi_base)) return PTR_ERR(pp->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)) { |