summaryrefslogtreecommitdiff
path: root/drivers/pci/host/pci-imx6.c
diff options
context:
space:
mode:
authorRichard Zhu <hongxing.zhu@nxp.com>2018-05-29 13:48:54 +0800
committerLeonard Crestez <leonard.crestez@nxp.com>2018-08-24 12:41:33 +0300
commitf61bf01e9e883b7b46ab39dc9b5a7e6d3add3495 (patch)
tree0fb8fb1fdc501e305408ce23112699f524fb6125 /drivers/pci/host/pci-imx6.c
parenta370071a5167f1d6e8d640f9e0cc7ec84972cd41 (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.c17
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)) {