From: Greg Kroah-Hartman Date: Wed, 6 Apr 2022 12:20:42 +0000 (+0200) Subject: 5.10-stable patches X-Git-Tag: v5.17.2~12 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e6796324532462983de8d009ab8bbf42cb6ea8ca;p=thirdparty%2Fkernel%2Fstable-queue.git 5.10-stable patches added patches: pci-xgene-revert-pci-xgene-use-inbound-resources-for-setup.patch --- diff --git a/queue-5.10/pci-xgene-revert-pci-xgene-use-inbound-resources-for-setup.patch b/queue-5.10/pci-xgene-revert-pci-xgene-use-inbound-resources-for-setup.patch new file mode 100644 index 00000000000..23d8fee5c6b --- /dev/null +++ b/queue-5.10/pci-xgene-revert-pci-xgene-use-inbound-resources-for-setup.patch @@ -0,0 +1,110 @@ +From 1874b6d7ab1bdc900e8398026350313ac29caddb Mon Sep 17 00:00:00 2001 +From: Marc Zyngier +Date: Mon, 21 Mar 2022 10:48:42 +0000 +Subject: PCI: xgene: Revert "PCI: xgene: Use inbound resources for setup" +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +From: Marc Zyngier + +commit 1874b6d7ab1bdc900e8398026350313ac29caddb upstream. + +Commit 6dce5aa59e0b ("PCI: xgene: Use inbound resources for setup") +killed PCIe on my XGene-1 box (a Mustang board). The machine itself +is still alive, but half of its storage (over NVMe) is gone, and the +NVMe driver just times out. + +Note that this machine boots with a device tree provided by the +UEFI firmware (2016 vintage), which could well be non conformant +with the spec, hence the breakage. + +With the patch reverted, the box boots 5.17-rc8 with flying colors. + +Link: https://lore.kernel.org/all/Yf2wTLjmcRj+AbDv@xps13.dannf +Link: https://lore.kernel.org/r/20220321104843.949645-2-maz@kernel.org +Fixes: 6dce5aa59e0b ("PCI: xgene: Use inbound resources for setup") +Signed-off-by: Marc Zyngier +Signed-off-by: Lorenzo Pieralisi +Cc: stable@vger.kernel.org +Cc: Rob Herring +Cc: Toan Le +Cc: Lorenzo Pieralisi +Cc: Krzysztof Wilczyński +Cc: Bjorn Helgaas +Cc: Stéphane Graber +Cc: dann frazier +[dannf: minor context adjustment] +Signed-off-by: dann frazier +Signed-off-by: Greg Kroah-Hartman +--- + drivers/pci/controller/pci-xgene.c | 33 ++++++++++++++++++++++----------- + 1 file changed, 22 insertions(+), 11 deletions(-) + +--- a/drivers/pci/controller/pci-xgene.c ++++ b/drivers/pci/controller/pci-xgene.c +@@ -481,28 +481,27 @@ static int xgene_pcie_select_ib_reg(u8 * + } + + static void xgene_pcie_setup_ib_reg(struct xgene_pcie_port *port, +- struct resource_entry *entry, +- u8 *ib_reg_mask) ++ struct of_pci_range *range, u8 *ib_reg_mask) + { + void __iomem *cfg_base = port->cfg_base; + struct device *dev = port->dev; + void *bar_addr; + u32 pim_reg; +- u64 cpu_addr = entry->res->start; +- u64 pci_addr = cpu_addr - entry->offset; +- u64 size = resource_size(entry->res); ++ u64 cpu_addr = range->cpu_addr; ++ u64 pci_addr = range->pci_addr; ++ u64 size = range->size; + u64 mask = ~(size - 1) | EN_REG; + u32 flags = PCI_BASE_ADDRESS_MEM_TYPE_64; + u32 bar_low; + int region; + +- region = xgene_pcie_select_ib_reg(ib_reg_mask, size); ++ region = xgene_pcie_select_ib_reg(ib_reg_mask, range->size); + if (region < 0) { + dev_warn(dev, "invalid pcie dma-range config\n"); + return; + } + +- if (entry->res->flags & IORESOURCE_PREFETCH) ++ if (range->flags & IORESOURCE_PREFETCH) + flags |= PCI_BASE_ADDRESS_MEM_PREFETCH; + + bar_low = pcie_bar_low_val((u32)cpu_addr, flags); +@@ -533,13 +532,25 @@ static void xgene_pcie_setup_ib_reg(stru + + static int xgene_pcie_parse_map_dma_ranges(struct xgene_pcie_port *port) + { +- struct pci_host_bridge *bridge = pci_host_bridge_from_priv(port); +- struct resource_entry *entry; ++ struct device_node *np = port->node; ++ struct of_pci_range range; ++ struct of_pci_range_parser parser; ++ struct device *dev = port->dev; + u8 ib_reg_mask = 0; + +- resource_list_for_each_entry(entry, &bridge->dma_ranges) +- xgene_pcie_setup_ib_reg(port, entry, &ib_reg_mask); ++ if (of_pci_dma_range_parser_init(&parser, np)) { ++ dev_err(dev, "missing dma-ranges property\n"); ++ return -EINVAL; ++ } + ++ /* Get the dma-ranges from DT */ ++ for_each_of_pci_range(&parser, &range) { ++ u64 end = range.cpu_addr + range.size - 1; ++ ++ dev_dbg(dev, "0x%08x 0x%016llx..0x%016llx -> 0x%016llx\n", ++ range.flags, range.cpu_addr, end, range.pci_addr); ++ xgene_pcie_setup_ib_reg(port, &range, &ib_reg_mask); ++ } + return 0; + } + diff --git a/queue-5.10/series b/queue-5.10/series index 6ab30a52c50..aac63b6988d 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -595,3 +595,4 @@ coredump-remove-the-warn_on-in-dump_vma_snapshot.patch coredump-elf-pass-coredump_params-into-fill_note_info.patch coredump-use-the-vma-snapshot-in-fill_files_note.patch arm64-do-not-defer-reserve_crashkernel-for-platforms-with-no-dma-memory-zones.patch +pci-xgene-revert-pci-xgene-use-inbound-resources-for-setup.patch