lede/target/linux/ipq60xx/patches-5.10/160-PCI-qcom-Make-sure-PCI-is-reset-and-clocks-are-enabl.patch

40 lines
1.4 KiB
Diff

From 26becdb00a29d53a23fd06e67e9750d167fe982d Mon Sep 17 00:00:00 2001
From: Robert Marko <robimarko@gmail.com>
Date: Sat, 26 Jun 2021 00:51:32 +0200
Subject: [PATCH] PCI: qcom: Make sure PCI is reset and clocks are enabled
before init for IP 2.3.3
IPQ8074 which uses IP 2.3.3 requires that the PHY is
powered on, resets are asserted as bootloader can
leave them in a weird state and clocks are enabled
before accessing the register space.
Otherwise the system would simply hang on a DBI read.
Signed-off-by: Robert Marko <robimarko@gmail.com>
---
drivers/pci/controller/dwc/pcie-qcom.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
--- a/drivers/pci/controller/dwc/pcie-qcom.c
+++ b/drivers/pci/controller/dwc/pcie-qcom.c
@@ -1035,7 +1035,7 @@ static int qcom_pcie_init_2_3_3(struct q
struct qcom_pcie_resources_2_3_3 *res = &pcie->res.v2_3_3;
struct dw_pcie *pci = pcie->pci;
struct device *dev = pci->dev;
- u16 offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
+ u16 offset;
int i, ret;
u32 val;
@@ -1111,6 +1111,9 @@ static int qcom_pcie_init_2_3_3(struct q
writel(PCI_COMMAND_MASTER, pci->dbi_base + PCI_COMMAND);
writel(DBI_RO_WR_EN, pci->dbi_base + PCIE20_MISC_CONTROL_1_REG);
+
+ offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
+
writel(PCIE_CAP_LINK1_VAL, pci->dbi_base + offset + PCI_EXP_SLTCAP);
val = readl(pci->dbi_base + offset + PCI_EXP_LNKCAP);