Skip to content

Commit dd6dc2f

Browse files
Ansuelgregkh
authored andcommitted
PCI: qcom: Add support for tx term offset for rev 2.1.0
commit de3c4bf upstream. Add tx term offset support to pcie qcom driver need in some revision of the ipq806x SoC. Ipq8064 needs tx term offset set to 7. Link: https://lore.kernel.org/r/20200615210608.21469-9-ansuelsmth@gmail.com Fixes: 82a8238 ("PCI: qcom: Add Qualcomm PCIe controller driver") Signed-off-by: Sham Muthayyan <smuthayy@codeaurora.org> Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com> Acked-by: Stanimir Varbanov <svarbanov@mm-sol.com> Cc: stable@vger.kernel.org # v4.5+ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 56e2a44 commit dd6dc2f

1 file changed

Lines changed: 16 additions & 1 deletion

File tree

drivers/pci/controller/dwc/pcie-qcom.c

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,13 @@
4545
#define PCIE_CAP_CPL_TIMEOUT_DISABLE 0x10
4646

4747
#define PCIE20_PARF_PHY_CTRL 0x40
48+
#define PHY_CTRL_PHY_TX0_TERM_OFFSET_MASK GENMASK(20, 16)
49+
#define PHY_CTRL_PHY_TX0_TERM_OFFSET(x) ((x) << 16)
50+
4851
#define PCIE20_PARF_PHY_REFCLK 0x4C
52+
#define PHY_REFCLK_SSP_EN BIT(16)
53+
#define PHY_REFCLK_USE_PAD BIT(12)
54+
4955
#define PCIE20_PARF_DBI_BASE_ADDR 0x168
5056
#define PCIE20_PARF_SLV_ADDR_SPACE_SIZE 0x16C
5157
#define PCIE20_PARF_MHI_CLOCK_RESET_CTRL 0x174
@@ -343,9 +349,18 @@ static int qcom_pcie_init_2_1_0(struct qcom_pcie *pcie)
343349
writel(PHY_RX0_EQ(4), pcie->parf + PCIE20_PARF_CONFIG_BITS);
344350
}
345351

352+
if (of_device_is_compatible(node, "qcom,pcie-ipq8064")) {
353+
/* set TX termination offset */
354+
val = readl(pcie->parf + PCIE20_PARF_PHY_CTRL);
355+
val &= ~PHY_CTRL_PHY_TX0_TERM_OFFSET_MASK;
356+
val |= PHY_CTRL_PHY_TX0_TERM_OFFSET(7);
357+
writel(val, pcie->parf + PCIE20_PARF_PHY_CTRL);
358+
}
359+
346360
/* enable external reference clock */
347361
val = readl(pcie->parf + PCIE20_PARF_PHY_REFCLK);
348-
val |= BIT(16);
362+
val &= ~PHY_REFCLK_USE_PAD;
363+
val |= PHY_REFCLK_SSP_EN;
349364
writel(val, pcie->parf + PCIE20_PARF_PHY_REFCLK);
350365

351366
ret = reset_control_deassert(res->phy_reset);

0 commit comments

Comments
 (0)