Skip to content

Commit fc2bc26

Browse files
Revert "PCI: qcom: Prepare for the DWC ECAM enablement"
This reverts commit 4660e50. Commit f6fd357 ("PCI: dwc: Prepare the driver for enabling ECAM mechanism using iATU 'CFG Shift Feature'") enabled ECAM access by using the config space start as DBI address. However, this approach breaks vendor drivers that rely on the DBI address for internal accesses, especially when the vendor config space is 256MB aligned. To resolve this, avoid using the DBI as the start of config space and instead introduce a custom ECAM PCI ops implementation. Revert the qcom specific ECAM preparation logic in 4660e50 ("PCI: qcom: Prepare for the DWC ECAM enablement") since it's no longer necessary. Signed-off-by: Krishna Chaitanya Chundru <[email protected]> [bhelgaas: commit log] Signed-off-by: Bjorn Helgaas <[email protected]> Link: https://patch.msgid.link/[email protected]
1 parent a1978b6 commit fc2bc26

File tree

1 file changed

+0
-68
lines changed

1 file changed

+0
-68
lines changed

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

Lines changed: 0 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@
5555
#define PARF_AXI_MSTR_WR_ADDR_HALT_V2 0x1a8
5656
#define PARF_Q2A_FLUSH 0x1ac
5757
#define PARF_LTSSM 0x1b0
58-
#define PARF_SLV_DBI_ELBI 0x1b4
5958
#define PARF_INT_ALL_STATUS 0x224
6059
#define PARF_INT_ALL_CLEAR 0x228
6160
#define PARF_INT_ALL_MASK 0x22c
@@ -65,16 +64,6 @@
6564
#define PARF_DBI_BASE_ADDR_V2_HI 0x354
6665
#define PARF_SLV_ADDR_SPACE_SIZE_V2 0x358
6766
#define PARF_SLV_ADDR_SPACE_SIZE_V2_HI 0x35c
68-
#define PARF_BLOCK_SLV_AXI_WR_BASE 0x360
69-
#define PARF_BLOCK_SLV_AXI_WR_BASE_HI 0x364
70-
#define PARF_BLOCK_SLV_AXI_WR_LIMIT 0x368
71-
#define PARF_BLOCK_SLV_AXI_WR_LIMIT_HI 0x36c
72-
#define PARF_BLOCK_SLV_AXI_RD_BASE 0x370
73-
#define PARF_BLOCK_SLV_AXI_RD_BASE_HI 0x374
74-
#define PARF_BLOCK_SLV_AXI_RD_LIMIT 0x378
75-
#define PARF_BLOCK_SLV_AXI_RD_LIMIT_HI 0x37c
76-
#define PARF_ECAM_BASE 0x380
77-
#define PARF_ECAM_BASE_HI 0x384
7867
#define PARF_NO_SNOOP_OVERRIDE 0x3d4
7968
#define PARF_ATU_BASE_ADDR 0x634
8069
#define PARF_ATU_BASE_ADDR_HI 0x638
@@ -98,7 +87,6 @@
9887

9988
/* PARF_SYS_CTRL register fields */
10089
#define MAC_PHY_POWERDOWN_IN_P2_D_MUX_EN BIT(29)
101-
#define PCIE_ECAM_BLOCKER_EN BIT(26)
10290
#define MST_WAKEUP_EN BIT(13)
10391
#define SLV_WAKEUP_EN BIT(12)
10492
#define MSTR_ACLK_CGC_DIS BIT(10)
@@ -146,9 +134,6 @@
146134
/* PARF_LTSSM register fields */
147135
#define LTSSM_EN BIT(8)
148136

149-
/* PARF_SLV_DBI_ELBI */
150-
#define SLV_DBI_ELBI_ADDR_BASE GENMASK(11, 0)
151-
152137
/* PARF_INT_ALL_{STATUS/CLEAR/MASK} register fields */
153138
#define PARF_INT_ALL_LINK_UP BIT(13)
154139
#define PARF_INT_MSI_DEV_0_7 GENMASK(30, 23)
@@ -326,47 +311,6 @@ static void qcom_ep_reset_deassert(struct qcom_pcie *pcie)
326311
qcom_perst_assert(pcie, false);
327312
}
328313

329-
static void qcom_pci_config_ecam(struct dw_pcie_rp *pp)
330-
{
331-
struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
332-
struct qcom_pcie *pcie = to_qcom_pcie(pci);
333-
u64 addr, addr_end;
334-
u32 val;
335-
336-
writel_relaxed(lower_32_bits(pci->dbi_phys_addr), pcie->parf + PARF_ECAM_BASE);
337-
writel_relaxed(upper_32_bits(pci->dbi_phys_addr), pcie->parf + PARF_ECAM_BASE_HI);
338-
339-
/*
340-
* The only device on the root bus is a single Root Port. If we try to
341-
* access any devices other than Device/Function 00.0 on Bus 0, the TLP
342-
* will go outside of the controller to the PCI bus. But with CFG Shift
343-
* Feature (ECAM) enabled in iATU, there is no guarantee that the
344-
* response is going to be all F's. Hence, to make sure that the
345-
* requester gets all F's response for accesses other than the Root
346-
* Port, configure iATU to block the transactions starting from
347-
* function 1 of the root bus to the end of the root bus (i.e., from
348-
* dbi_base + 4KB to dbi_base + 1MB).
349-
*/
350-
addr = pci->dbi_phys_addr + SZ_4K;
351-
writel_relaxed(lower_32_bits(addr), pcie->parf + PARF_BLOCK_SLV_AXI_WR_BASE);
352-
writel_relaxed(upper_32_bits(addr), pcie->parf + PARF_BLOCK_SLV_AXI_WR_BASE_HI);
353-
354-
writel_relaxed(lower_32_bits(addr), pcie->parf + PARF_BLOCK_SLV_AXI_RD_BASE);
355-
writel_relaxed(upper_32_bits(addr), pcie->parf + PARF_BLOCK_SLV_AXI_RD_BASE_HI);
356-
357-
addr_end = pci->dbi_phys_addr + SZ_1M - 1;
358-
359-
writel_relaxed(lower_32_bits(addr_end), pcie->parf + PARF_BLOCK_SLV_AXI_WR_LIMIT);
360-
writel_relaxed(upper_32_bits(addr_end), pcie->parf + PARF_BLOCK_SLV_AXI_WR_LIMIT_HI);
361-
362-
writel_relaxed(lower_32_bits(addr_end), pcie->parf + PARF_BLOCK_SLV_AXI_RD_LIMIT);
363-
writel_relaxed(upper_32_bits(addr_end), pcie->parf + PARF_BLOCK_SLV_AXI_RD_LIMIT_HI);
364-
365-
val = readl_relaxed(pcie->parf + PARF_SYS_CTRL);
366-
val |= PCIE_ECAM_BLOCKER_EN;
367-
writel_relaxed(val, pcie->parf + PARF_SYS_CTRL);
368-
}
369-
370314
static int qcom_pcie_start_link(struct dw_pcie *pci)
371315
{
372316
struct qcom_pcie *pcie = to_qcom_pcie(pci);
@@ -1320,7 +1264,6 @@ static int qcom_pcie_host_init(struct dw_pcie_rp *pp)
13201264
{
13211265
struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
13221266
struct qcom_pcie *pcie = to_qcom_pcie(pci);
1323-
u16 offset;
13241267
int ret;
13251268

13261269
qcom_ep_reset_assert(pcie);
@@ -1329,17 +1272,6 @@ static int qcom_pcie_host_init(struct dw_pcie_rp *pp)
13291272
if (ret)
13301273
return ret;
13311274

1332-
if (pp->ecam_enabled) {
1333-
/*
1334-
* Override ELBI when ECAM is enabled, as when ECAM is enabled,
1335-
* ELBI moves under the 'config' space.
1336-
*/
1337-
offset = FIELD_GET(SLV_DBI_ELBI_ADDR_BASE, readl(pcie->parf + PARF_SLV_DBI_ELBI));
1338-
pci->elbi_base = pci->dbi_base + offset;
1339-
1340-
qcom_pci_config_ecam(pp);
1341-
}
1342-
13431275
ret = qcom_pcie_phy_power_on(pcie);
13441276
if (ret)
13451277
goto err_deinit;

0 commit comments

Comments
 (0)