Changelog: https://cdn.kernel.org/pub/linux/kernel/v6.x/ChangeLog-6.12.77 Removed upstream: generic/backport-6.12/204-v6.13-resource-Add-resource-set-range-and-size-helpers.patch[1] microchipsw/patches-6.12/0098-v7.0-net-sparx5-lan969x-fix-DWRR-cost-max-to-match-hardwa.patch Manually rebased: bcm27xx/patches-6.12/950-0955-hwmon-aht10-Fix-AHT20-initialization.patch All other patches automatically rebased. 1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.77&id=889b5cb678c1ae5a4e1ff3b2c46f06ef4292aa86 2. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v6.12.77&id=6c28aa8dfdf24f554d4c5d4ff7d723a95360d94a Build system: x86/64 Build-tested: flogic/glinet_gl-mt6000 Run-tested: flogic/glinet_gl-mt6000 Co-authored-by: Shiji Yang <yangshiji66@outlook.com> Signed-off-by: John Audia <therealgraysky@proton.me> Link: https://github.com/openwrt/openwrt/pull/22276 Signed-off-by: Robert Marko <robimarko@gmail.com>
39 lines
1.4 KiB
Diff
39 lines
1.4 KiB
Diff
Subject: [PATCH] PCI: Skip bridge window reads when window is not supported
|
|
|
|
pci_read_bridge_io() and pci_read_bridge_mmio_pref() read bridge window
|
|
registers unconditionally. If the registers are hardwired to zero
|
|
(not implemented), both base and limit will be 0. Since (0 <= 0) is
|
|
true, a bogus window [mem 0x00000000-0x000fffff] or [io 0x0000-0x0fff]
|
|
gets created.
|
|
|
|
pci_read_bridge_windows() already detects unsupported windows by
|
|
testing register writability and sets io_window/pref_window flags
|
|
accordingly. Check these flags at the start of pci_read_bridge_io()
|
|
and pci_read_bridge_mmio_pref() to skip reading registers when the
|
|
window is not supported.
|
|
|
|
Suggested-by: Bjorn Helgaas <helgaas@kernel.org>
|
|
Signed-off-by: Ahmed Naseef <naseefkm@gmail.com>
|
|
--- a/drivers/pci/probe.c
|
|
+++ b/drivers/pci/probe.c
|
|
@@ -349,6 +349,9 @@ static void pci_read_bridge_io(struct pc
|
|
unsigned long io_mask, io_granularity, base, limit;
|
|
struct pci_bus_region region;
|
|
|
|
+ if (!dev->io_window)
|
|
+ return;
|
|
+
|
|
io_mask = PCI_IO_RANGE_MASK;
|
|
io_granularity = 0x1000;
|
|
if (dev->io_window_1k) {
|
|
@@ -410,6 +413,9 @@ static void pci_read_bridge_mmio_pref(st
|
|
pci_bus_addr_t base, limit;
|
|
struct pci_bus_region region;
|
|
|
|
+ if (!dev->pref_window)
|
|
+ return;
|
|
+
|
|
pci_read_config_word(dev, PCI_PREF_MEMORY_BASE, &mem_base_lo);
|
|
pci_read_config_word(dev, PCI_PREF_MEMORY_LIMIT, &mem_limit_lo);
|
|
base64 = (mem_base_lo & PCI_PREF_RANGE_MASK) << 16;
|