Skip to content

Commit 3100929

Browse files
committed
Merge tag 'pci-v6.18-fixes-3' of git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci
Pull pci fixes from Bjorn Helgaas: - Add DWC custom pci_ops for the root bus instead of overwriting the DBI base address, which broke drivers that rely on the DBI address for iATU programming; fixes an FU740 probe regression (Krishna Chaitanya Chundru) - Revert qcom ECAM enablement, which is rendered unnecessary by the DWC custom pci_ops (Krishna Chaitanya Chundru) - Fix longstanding MIPS Malta resource registration issues to avoid exposing them when the next commit fixes the boot failure (Maciej W. Rozycki) - Use pcibios_align_resource() on MIPS Malta to fix boot failure caused by using the generic pci_enable_resources() (Ilpo Järvinen) - Enable only ASPM L0s and L1, not L1 PM Substates, for devicetree platforms because we lack information required to configure L1 Substates; fixes regressions on powerpc and rockchip. A qcom regression (L1 Substates no longer enabled) remains and will be addressed next (Bjorn Helgaas) * tag 'pci-v6.18-fixes-3' of git://git.kernel.org/pub/scm/linux/kernel/git/pci/pci: PCI/ASPM: Enable only L0s and L1 for devicetree platforms MIPS: Malta: Use pcibios_align_resource() to block io range MIPS: Malta: Fix PCI southbridge legacy resource reservations MIPS: Malta: Fix keyboard resource preventing i8042 driver from registering Revert "PCI: qcom: Prepare for the DWC ECAM enablement" PCI: dwc: Use custom pci_ops for root bus DBI vs ECAM config access
2 parents 7083bb6 + df5192d commit 3100929

File tree

5 files changed

+36
-101
lines changed

5 files changed

+36
-101
lines changed

arch/mips/mti-malta/malta-setup.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ static struct resource standard_io_resources[] = {
4747
.name = "keyboard",
4848
.start = 0x60,
4949
.end = 0x6f,
50-
.flags = IORESOURCE_IO | IORESOURCE_BUSY
50+
.flags = IORESOURCE_IO
5151
},
5252
{
5353
.name = "dma page reg",
@@ -213,7 +213,7 @@ void __init plat_mem_setup(void)
213213

214214
/* Request I/O space for devices used on the Malta board. */
215215
for (i = 0; i < ARRAY_SIZE(standard_io_resources); i++)
216-
request_resource(&ioport_resource, standard_io_resources+i);
216+
insert_resource(&ioport_resource, standard_io_resources + i);
217217

218218
/*
219219
* Enable DMA channel 4 (cascade channel) in the PIIX4 south bridge.

arch/mips/pci/pci-malta.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -230,8 +230,7 @@ void __init mips_pcibios_init(void)
230230
}
231231

232232
/* PIIX4 ACPI starts at 0x1000 */
233-
if (controller->io_resource->start < 0x00001000UL)
234-
controller->io_resource->start = 0x00001000UL;
233+
PCIBIOS_MIN_IO = 0x1000;
235234

236235
iomem_resource.end &= 0xfffffffffULL; /* 64 GB */
237236
ioport_resource.end = controller->io_resource->end;

drivers/pci/controller/dwc/pcie-designware-host.c

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
#include "pcie-designware.h"
2424

2525
static struct pci_ops dw_pcie_ops;
26+
static struct pci_ops dw_pcie_ecam_ops;
2627
static struct pci_ops dw_child_pcie_ops;
2728

2829
#define DW_PCIE_MSI_FLAGS_REQUIRED (MSI_FLAG_USE_DEF_DOM_OPS | \
@@ -471,9 +472,6 @@ static int dw_pcie_create_ecam_window(struct dw_pcie_rp *pp, struct resource *re
471472
if (IS_ERR(pp->cfg))
472473
return PTR_ERR(pp->cfg);
473474

474-
pci->dbi_base = pp->cfg->win;
475-
pci->dbi_phys_addr = res->start;
476-
477475
return 0;
478476
}
479477

@@ -529,7 +527,7 @@ static int dw_pcie_host_get_resources(struct dw_pcie_rp *pp)
529527
if (ret)
530528
return ret;
531529

532-
pp->bridge->ops = (struct pci_ops *)&pci_generic_ecam_ops.pci_ops;
530+
pp->bridge->ops = &dw_pcie_ecam_ops;
533531
pp->bridge->sysdata = pp->cfg;
534532
pp->cfg->priv = pp;
535533
} else {
@@ -842,12 +840,34 @@ void __iomem *dw_pcie_own_conf_map_bus(struct pci_bus *bus, unsigned int devfn,
842840
}
843841
EXPORT_SYMBOL_GPL(dw_pcie_own_conf_map_bus);
844842

843+
static void __iomem *dw_pcie_ecam_conf_map_bus(struct pci_bus *bus, unsigned int devfn, int where)
844+
{
845+
struct pci_config_window *cfg = bus->sysdata;
846+
struct dw_pcie_rp *pp = cfg->priv;
847+
struct dw_pcie *pci = to_dw_pcie_from_pp(pp);
848+
unsigned int busn = bus->number;
849+
850+
if (busn > 0)
851+
return pci_ecam_map_bus(bus, devfn, where);
852+
853+
if (PCI_SLOT(devfn) > 0)
854+
return NULL;
855+
856+
return pci->dbi_base + where;
857+
}
858+
845859
static struct pci_ops dw_pcie_ops = {
846860
.map_bus = dw_pcie_own_conf_map_bus,
847861
.read = pci_generic_config_read,
848862
.write = pci_generic_config_write,
849863
};
850864

865+
static struct pci_ops dw_pcie_ecam_ops = {
866+
.map_bus = dw_pcie_ecam_conf_map_bus,
867+
.read = pci_generic_config_read,
868+
.write = pci_generic_config_write,
869+
};
870+
851871
static int dw_pcie_iatu_setup(struct dw_pcie_rp *pp)
852872
{
853873
struct dw_pcie *pci = to_dw_pcie_from_pp(pp);

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;

drivers/pci/pcie/aspm.c

Lines changed: 9 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -243,8 +243,7 @@ struct pcie_link_state {
243243
/* Clock PM state */
244244
u32 clkpm_capable:1; /* Clock PM capable? */
245245
u32 clkpm_enabled:1; /* Current Clock PM state */
246-
u32 clkpm_default:1; /* Default Clock PM state by BIOS or
247-
override */
246+
u32 clkpm_default:1; /* Default Clock PM state by BIOS */
248247
u32 clkpm_disable:1; /* Clock PM disabled */
249248
};
250249

@@ -376,18 +375,6 @@ static void pcie_set_clkpm(struct pcie_link_state *link, int enable)
376375
pcie_set_clkpm_nocheck(link, enable);
377376
}
378377

379-
static void pcie_clkpm_override_default_link_state(struct pcie_link_state *link,
380-
int enabled)
381-
{
382-
struct pci_dev *pdev = link->downstream;
383-
384-
/* For devicetree platforms, enable ClockPM by default */
385-
if (of_have_populated_dt() && !enabled) {
386-
link->clkpm_default = 1;
387-
pci_info(pdev, "ASPM: DT platform, enabling ClockPM\n");
388-
}
389-
}
390-
391378
static void pcie_clkpm_cap_init(struct pcie_link_state *link, int blacklist)
392379
{
393380
int capable = 1, enabled = 1;
@@ -410,7 +397,6 @@ static void pcie_clkpm_cap_init(struct pcie_link_state *link, int blacklist)
410397
}
411398
link->clkpm_enabled = enabled;
412399
link->clkpm_default = enabled;
413-
pcie_clkpm_override_default_link_state(link, enabled);
414400
link->clkpm_capable = capable;
415401
link->clkpm_disable = blacklist ? 1 : 0;
416402
}
@@ -811,19 +797,17 @@ static void pcie_aspm_override_default_link_state(struct pcie_link_state *link)
811797
struct pci_dev *pdev = link->downstream;
812798
u32 override;
813799

814-
/* For devicetree platforms, enable all ASPM states by default */
800+
/* For devicetree platforms, enable L0s and L1 by default */
815801
if (of_have_populated_dt()) {
816-
link->aspm_default = PCIE_LINK_STATE_ASPM_ALL;
802+
if (link->aspm_support & PCIE_LINK_STATE_L0S)
803+
link->aspm_default |= PCIE_LINK_STATE_L0S;
804+
if (link->aspm_support & PCIE_LINK_STATE_L1)
805+
link->aspm_default |= PCIE_LINK_STATE_L1;
817806
override = link->aspm_default & ~link->aspm_enabled;
818807
if (override)
819-
pci_info(pdev, "ASPM: DT platform, enabling%s%s%s%s%s%s%s\n",
820-
FLAG(override, L0S_UP, " L0s-up"),
821-
FLAG(override, L0S_DW, " L0s-dw"),
822-
FLAG(override, L1, " L1"),
823-
FLAG(override, L1_1, " ASPM-L1.1"),
824-
FLAG(override, L1_2, " ASPM-L1.2"),
825-
FLAG(override, L1_1_PCIPM, " PCI-PM-L1.1"),
826-
FLAG(override, L1_2_PCIPM, " PCI-PM-L1.2"));
808+
pci_info(pdev, "ASPM: default states%s%s\n",
809+
FLAG(override, L0S, " L0s"),
810+
FLAG(override, L1, " L1"));
827811
}
828812
}
829813

0 commit comments

Comments
 (0)