aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/controller/dwc
diff options
context:
space:
mode:
authorVignesh R <vigneshr@ti.com>2018-09-25 04:30:24 -0400
committerLorenzo Pieralisi <lorenzo.pieralisi@arm.com>2018-09-25 05:53:10 -0400
commit726d75a6d243bf6730da3216f3592503f6f0f588 (patch)
tree33a45bd5014b7d700543d1797b1d420057fd3466 /drivers/pci/controller/dwc
parente3336a18ff853c26031c578d49a23488b48ebc22 (diff)
PCI: dwc: pci-dra7xx: Enable errata i870 for both EP and RC mode
Errata i870 is applicable in both EP and RC mode. Therefore rename function dra7xx_pcie_ep_unaligned_memaccess(), that implements errata workaround, to dra7xx_pcie_unaligned_memaccess() and call it for both RC and EP. Make sure driver probe does not fail in case the workaround is not applied for RC mode in order to maintain DT backward compatibility. Reported-by: Chris Welch <Chris.Welch@viavisolutions.com> Signed-off-by: Vignesh R <vigneshr@ti.com> [lorenzo.pieralisi@arm.com: reworded the log] Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Acked-by: Kishon Vijay Abraham I <kishon@ti.com>
Diffstat (limited to 'drivers/pci/controller/dwc')
-rw-r--r--drivers/pci/controller/dwc/pci-dra7xx.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/drivers/pci/controller/dwc/pci-dra7xx.c b/drivers/pci/controller/dwc/pci-dra7xx.c
index ce9224a36f62..a32d6dde7a57 100644
--- a/drivers/pci/controller/dwc/pci-dra7xx.c
+++ b/drivers/pci/controller/dwc/pci-dra7xx.c
@@ -542,7 +542,7 @@ static const struct of_device_id of_dra7xx_pcie_match[] = {
542}; 542};
543 543
544/* 544/*
545 * dra7xx_pcie_ep_unaligned_memaccess: workaround for AM572x/AM571x Errata i870 545 * dra7xx_pcie_unaligned_memaccess: workaround for AM572x/AM571x Errata i870
546 * @dra7xx: the dra7xx device where the workaround should be applied 546 * @dra7xx: the dra7xx device where the workaround should be applied
547 * 547 *
548 * Access to the PCIe slave port that are not 32-bit aligned will result 548 * Access to the PCIe slave port that are not 32-bit aligned will result
@@ -552,7 +552,7 @@ static const struct of_device_id of_dra7xx_pcie_match[] = {
552 * 552 *
553 * To avoid this issue set PCIE_SS1_AXI2OCP_LEGACY_MODE_ENABLE to 1. 553 * To avoid this issue set PCIE_SS1_AXI2OCP_LEGACY_MODE_ENABLE to 1.
554 */ 554 */
555static int dra7xx_pcie_ep_unaligned_memaccess(struct device *dev) 555static int dra7xx_pcie_unaligned_memaccess(struct device *dev)
556{ 556{
557 int ret; 557 int ret;
558 struct device_node *np = dev->of_node; 558 struct device_node *np = dev->of_node;
@@ -704,6 +704,11 @@ static int __init dra7xx_pcie_probe(struct platform_device *pdev)
704 704
705 dra7xx_pcie_writel(dra7xx, PCIECTRL_TI_CONF_DEVICE_TYPE, 705 dra7xx_pcie_writel(dra7xx, PCIECTRL_TI_CONF_DEVICE_TYPE,
706 DEVICE_TYPE_RC); 706 DEVICE_TYPE_RC);
707
708 ret = dra7xx_pcie_unaligned_memaccess(dev);
709 if (ret)
710 dev_err(dev, "WA for Errata i870 not applied\n");
711
707 ret = dra7xx_add_pcie_port(dra7xx, pdev); 712 ret = dra7xx_add_pcie_port(dra7xx, pdev);
708 if (ret < 0) 713 if (ret < 0)
709 goto err_gpio; 714 goto err_gpio;
@@ -717,7 +722,7 @@ static int __init dra7xx_pcie_probe(struct platform_device *pdev)
717 dra7xx_pcie_writel(dra7xx, PCIECTRL_TI_CONF_DEVICE_TYPE, 722 dra7xx_pcie_writel(dra7xx, PCIECTRL_TI_CONF_DEVICE_TYPE,
718 DEVICE_TYPE_EP); 723 DEVICE_TYPE_EP);
719 724
720 ret = dra7xx_pcie_ep_unaligned_memaccess(dev); 725 ret = dra7xx_pcie_unaligned_memaccess(dev);
721 if (ret) 726 if (ret)
722 goto err_gpio; 727 goto err_gpio;
723 728