PCI: tegra: Enable opportunistic UpdateFC and ACK
authorManikanta Maddireddy <mmaddireddy@nvidia.com>
Tue, 18 Jun 2019 18:01:48 +0000 (23:31 +0530)
committerLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Thu, 20 Jun 2019 16:20:40 +0000 (17:20 +0100)
Enable opportunistic UpdateFC and ACK to allow data link layer send
pending ACKs and UpdateFC packets when link is idle instead of waiting
for timers to expire. This improves the PCIe performance due to better
utilization of PCIe bandwidth.

Signed-off-by: Manikanta Maddireddy <mmaddireddy@nvidia.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Thierry Reding <treding@nvidia.com>
drivers/pci/controller/pci-tegra.c

index 2d0a23b2c7bbcfb6813b93a46e4e9d350c97a768..cd69c43c9a0c0469ab648273e8112427babc9048 100644 (file)
 #define  RP_ECTL_6_R2_RX_EQ_CTRL_H_1C_MASK     0xffffffff
 
 #define RP_VEND_XP     0x00000f00
-#define  RP_VEND_XP_DL_UP      (1 << 30)
+#define  RP_VEND_XP_DL_UP                      (1 << 30)
+#define  RP_VEND_XP_OPPORTUNISTIC_ACK          (1 << 27)
+#define  RP_VEND_XP_OPPORTUNISTIC_UPDATEFC     (1 << 28)
 
 #define RP_VEND_CTL1   0x00000f48
 #define  RP_VEND_CTL1_ERPT     (1 << 13)
@@ -529,6 +531,12 @@ static void tegra_pcie_enable_rp_features(struct tegra_pcie_port *port)
        value = readl(port->base + RP_VEND_CTL1);
        value |= RP_VEND_CTL1_ERPT;
        writel(value, port->base + RP_VEND_CTL1);
+
+       /* Optimal settings to enhance bandwidth */
+       value = readl(port->base + RP_VEND_XP);
+       value |= RP_VEND_XP_OPPORTUNISTIC_ACK;
+       value |= RP_VEND_XP_OPPORTUNISTIC_UPDATEFC;
+       writel(value, port->base + RP_VEND_XP);
 }
 
 static void tegra_pcie_program_ectl_settings(struct tegra_pcie_port *port)