summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPali Rohár <pali@kernel.org>2023-05-02 19:53:57 +0200
committerTom Rini <trini@konsulko.com>2023-05-03 18:30:46 -0400
commit0d734df4a459f01fdf1e62512fb28b28022cb6a9 (patch)
tree91aabfe75c3f94edc285f9a3922917bf1042901e
parent43bdb3b39a0984c8c6ffcbb847bf648e941c0d26 (diff)
pci: fsl: Do not access PCI BAR0 register of PCIe Root Port
Freescale PCIe Root Port has PEXCSRBAR register at position of PCI BAR0. PCIe Root Port does not have any PCIe memory, so returns zero when trying to read from PCIe Root Port BAR0 and ignore any writes. Signed-off-by: Pali Rohár <pali@kernel.org>
-rw-r--r--drivers/pci/pcie_fsl.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/pci/pcie_fsl.c b/drivers/pci/pcie_fsl.c
index 4600652f2b1..8d89a1e5919 100644
--- a/drivers/pci/pcie_fsl.c
+++ b/drivers/pci/pcie_fsl.c
@@ -58,6 +58,14 @@ static int fsl_pcie_read_config(const struct udevice *bus, pci_dev_t bdf,
return 0;
}
+ /* Skip Freescale PCIe controller's PEXCSRBAR register */
+ if (PCI_BUS(bdf) - dev_seq(bus) == 0 &&
+ PCI_DEV(bdf) == 0 && PCI_FUNC(bdf) == 0 &&
+ (offset & ~3) == PCI_BASE_ADDRESS_0) {
+ *valuep = 0;
+ return 0;
+ }
+
val = PCI_CONF1_EXT_ADDRESS(PCI_BUS(bdf) - dev_seq(bus),
PCI_DEV(bdf), PCI_FUNC(bdf),
offset);
@@ -95,6 +103,12 @@ static int fsl_pcie_write_config(struct udevice *bus, pci_dev_t bdf,
if (fsl_pcie_addr_valid(pcie, bdf))
return 0;
+ /* Skip Freescale PCIe controller's PEXCSRBAR register */
+ if (PCI_BUS(bdf) - dev_seq(bus) == 0 &&
+ PCI_DEV(bdf) == 0 && PCI_FUNC(bdf) == 0 &&
+ (offset & ~3) == PCI_BASE_ADDRESS_0)
+ return 0;
+
val = PCI_CONF1_EXT_ADDRESS(PCI_BUS(bdf) - dev_seq(bus),
PCI_DEV(bdf), PCI_FUNC(bdf),
offset);