PCI: tegra: Advertise PCIe Advanced Error Reporting (AER) capability [Linux 5.3]

This Linux kernel change "PCI: tegra: Advertise PCIe Advanced Error Reporting (AER) capability" is included in the Linux 5.3 release. This change is authored by Manikanta Maddireddy <mmaddireddy [at] nvidia.com> on Tue Jun 18 23:31:46 2019 +0530. The commit for this change in Linux stable tree is c635a81 (patch).

PCI: tegra: Advertise PCIe Advanced Error Reporting (AER) capability

Default root port setting hides AER capability. This patch enables the
advertisement of AER capability by root port.

Signed-off-by: Manikanta Maddireddy <mmaddireddy@nvidia.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Thierry Reding <treding@nvidia.com>

There are 15 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 drivers/pci/controller/pci-tegra.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/pci/controller/pci-tegra.c b/drivers/pci/controller/pci-tegra.c
index dfb13ae..c9687b5 100644
--- a/drivers/pci/controller/pci-tegra.c
+++ b/drivers/pci/controller/pci-tegra.c
@@ -180,6 +180,9 @@
 #define RP_VEND_XP 0x00000f00
 #define  RP_VEND_XP_DL_UP  (1 << 30)

+#define RP_VEND_CTL1   0x00000f48
+#define  RP_VEND_CTL1_ERPT (1 << 13)
+
 #define RP_VEND_CTL2 0x00000fa8
 #define  RP_VEND_CTL2_PCA_ENABLE (1 << 7)

@@ -479,6 +482,16 @@ static void tegra_pcie_port_reset(struct tegra_pcie_port *port)
    afi_writel(port->pcie, value, ctrl);
 }

+static void tegra_pcie_enable_rp_features(struct tegra_pcie_port *port)
+{
+   u32 value;
+
+   /* Enable AER capability */
+   value = readl(port->base + RP_VEND_CTL1);
+   value |= RP_VEND_CTL1_ERPT;
+   writel(value, port->base + RP_VEND_CTL1);
+}
+
 static void tegra_pcie_port_enable(struct tegra_pcie_port *port)
 {
    unsigned long ctrl = tegra_pcie_port_get_pex_ctrl(port);
@@ -503,6 +516,8 @@ static void tegra_pcie_port_enable(struct tegra_pcie_port *port)
        value |= RP_VEND_CTL2_PCA_ENABLE;
        writel(value, port->base + RP_VEND_CTL2);
    }
+
+   tegra_pcie_enable_rp_features(port);
 }

 static void tegra_pcie_port_disable(struct tegra_pcie_port *port)

Leave a Reply

Your email address will not be published. Required fields are marked *