Hi Jeremy,
sorry for the late reply, I've been on vacation.
On Thu, 2021-08-26 at 02:15 -0500, Jeremy Linton wrote:
[...]
+static void __iomem *brcm_pcie_map_conf2(struct pci_bus *bus,
+ unsigned int devfn, int where)
+{
+ struct pci_config_window *cfg = bus->sysdata;
+ void __iomem *base = cfg->win;
+ int idx;
+ u32 up;
+
+ /* Accesses to the RC go right to the RC registers if slot==0 */
+ if (pci_is_root_bus(bus))
+ return PCI_SLOT(devfn) ? NULL : base + where;
+
+ /*
+ * Assure the link is up before sending requests downstream. This is done
+ * to avoid sending transactions to EPs that don't exist. Link flap
+ * conditions/etc make this race more probable. The resulting unrecoverable
+ * SERRORs will result in the machine crashing.
+ */
+ up = readl(base + PCIE_MISC_PCIE_STATUS);
+ if (!(up & PCIE_MISC_PCIE_STATUS_PCIE_DL_ACTIVE_MASK))
+ return NULL;
+
+ if (!(up & PCIE_MISC_PCIE_STATUS_PCIE_PHYLINKUP_MASK))
+ return NULL;
Couldn't this be integrated in the original brcm_pcie_map_conf()? IIUC there is
nothing ACPI specific about it. It'd also make for less code duplication.