From 24ce1491cc37d7899c6f833400828028bb3c5a8d Mon Sep 17 00:00:00 2001 From: Rosen Penev Date: Sun, 1 Mar 2026 16:14:38 -0800 Subject: [PATCH] bcm53xx: backport pcie patches Needed for various fixes. Signed-off-by: Rosen Penev Link: https://github.com/openwrt/openwrt/pull/22307 Signed-off-by: Robert Marko --- ...301X-Describe-PCIe-controllers-fully.patch | 90 ++++++ ...M-dts-BCM5301X-add-root-pcie-bridges.patch | 272 ++++++++++++++++++ 2 files changed, 362 insertions(+) create mode 100644 target/linux/bcm53xx/patches-6.12/349-ARM-dts-BCM5301X-Describe-PCIe-controllers-fully.patch create mode 100644 target/linux/bcm53xx/patches-6.12/350-ARM-dts-BCM5301X-add-root-pcie-bridges.patch diff --git a/target/linux/bcm53xx/patches-6.12/349-ARM-dts-BCM5301X-Describe-PCIe-controllers-fully.patch b/target/linux/bcm53xx/patches-6.12/349-ARM-dts-BCM5301X-Describe-PCIe-controllers-fully.patch new file mode 100644 index 0000000000..bf2c38b4ed --- /dev/null +++ b/target/linux/bcm53xx/patches-6.12/349-ARM-dts-BCM5301X-Describe-PCIe-controllers-fully.patch @@ -0,0 +1,90 @@ +From 9f60f2d9e1920245acbb9b0493d0c073905c3976 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= +Date: Thu, 8 Jan 2026 23:40:26 +0100 +Subject: [PATCH] ARM: dts: BCM5301X: Describe PCIe controllers fully +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Tested successfully on BCM47094 SoC using Linux's pcie-iproc-platform +driver. + +This fixes: +arch/arm/boot/dts/broadcom/bcm4708-asus-rt-ac56u.dtb: pcie@12000: 'device_type' is a required property + from schema $id: http://devicetree.org/schemas/pci/pci-bus.yaml# +arch/arm/boot/dts/broadcom/bcm4708-asus-rt-ac56u.dtb: pcie@12000: 'ranges' is a required property + from schema $id: http://devicetree.org/schemas/pci/pci-bus.yaml# +arch/arm/boot/dts/broadcom/bcm4708-asus-rt-ac56u.dtb: pcie@13000: 'device_type' is a required property + from schema $id: http://devicetree.org/schemas/pci/pci-bus.yaml# +arch/arm/boot/dts/broadcom/bcm4708-asus-rt-ac56u.dtb: pcie@13000: 'ranges' is a required property + from schema $id: http://devicetree.org/schemas/pci/pci-bus.yaml# +arch/arm/boot/dts/broadcom/bcm4708-asus-rt-ac56u.dtb: pcie@14000: 'device_type' is a required property + from schema $id: http://devicetree.org/schemas/pci/pci-bus.yaml# +arch/arm/boot/dts/broadcom/bcm4708-asus-rt-ac56u.dtb: pcie@14000: 'ranges' is a required property + from schema $id: http://devicetree.org/schemas/pci/pci-bus.yaml# + +Signed-off-by: Rafał Miłecki +Link: https://lore.kernel.org/r/20260108224026.3550-1-zajec5@gmail.com +Signed-off-by: Florian Fainelli +--- + arch/arm/boot/dts/broadcom/bcm-ns.dtsi | 26 +++++++++++++++++++++++++- + 1 file changed, 25 insertions(+), 1 deletion(-) + +--- a/arch/arm/boot/dts/broadcom/bcm-ns.dtsi ++++ b/arch/arm/boot/dts/broadcom/bcm-ns.dtsi +@@ -95,7 +95,10 @@ + axi@18000000 { + compatible = "brcm,bus-axi"; + reg = <0x18000000 0x1000>; +- ranges = <0x00000000 0x18000000 0x00100000>; ++ ranges = <0x00000000 0x18000000 0x00100000>, ++ <0x08000000 0x08000000 0x08000000>, ++ <0x20000000 0x20000000 0x08000000>, ++ <0x28000000 0x28000000 0x08000000>; + #address-cells = <1>; + #size-cells = <1>; + +@@ -182,22 +185,43 @@ + }; + + pcie0: pcie@12000 { ++ compatible = "brcm,iproc-pcie"; + reg = <0x00012000 0x1000>; ++ ranges = <0x82000000 0 0x08000000 0x08000000 0 0x08000000>; ++ interrupt-map-mask = <0 0 0 0>; ++ interrupt-map = <0 0 0 0 &gic GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>; ++ bus-range = <0x00 0xff>; ++ device_type = "pci"; + ++ #interrupt-cells = <1>; + #address-cells = <3>; + #size-cells = <2>; + }; + + pcie1: pcie@13000 { ++ compatible = "brcm,iproc-pcie"; + reg = <0x00013000 0x1000>; ++ ranges = <0x82000000 0 0x20000000 0x20000000 0 0x08000000>; ++ interrupt-map-mask = <0 0 0 0>; ++ interrupt-map = <0 0 0 0 &gic GIC_SPI 132 IRQ_TYPE_LEVEL_HIGH>; ++ bus-range = <0x00 0xff>; ++ device_type = "pci"; + ++ #interrupt-cells = <1>; + #address-cells = <3>; + #size-cells = <2>; + }; + + pcie2: pcie@14000 { ++ compatible = "brcm,iproc-pcie"; + reg = <0x00014000 0x1000>; ++ ranges = <0x82000000 0 0x28000000 0x28000000 0 0x08000000>; ++ interrupt-map-mask = <0 0 0 0>; ++ interrupt-map = <0 0 0 0 &gic GIC_SPI 138 IRQ_TYPE_LEVEL_HIGH>; ++ bus-range = <0x00 0xff>; ++ device_type = "pci"; + ++ #interrupt-cells = <1>; + #address-cells = <3>; + #size-cells = <2>; + }; diff --git a/target/linux/bcm53xx/patches-6.12/350-ARM-dts-BCM5301X-add-root-pcie-bridges.patch b/target/linux/bcm53xx/patches-6.12/350-ARM-dts-BCM5301X-add-root-pcie-bridges.patch new file mode 100644 index 0000000000..75b3457de9 --- /dev/null +++ b/target/linux/bcm53xx/patches-6.12/350-ARM-dts-BCM5301X-add-root-pcie-bridges.patch @@ -0,0 +1,272 @@ +From 14022b103616ec01417e6c707095d57d61162450 Mon Sep 17 00:00:00 2001 +From: Rosen Penev +Date: Sun, 1 Mar 2026 16:01:04 -0800 +Subject: [PATCH] ARM: dts: BCM5301X: add root pcie bridges + +They are always required and instead of duplicating a definition in each +dts file, place it in dtsi with labels and work based on that. + +Also changed each bridge@ to pcie@ to get extra dtc static analysis. + +Fixed bridge numbers as a result. + +Signed-off-by: Rosen Penev +--- + arch/arm/boot/dts/broadcom/bcm-ns.dtsi | 30 ++++++++ + .../dts/broadcom/bcm4709-netgear-r8000.dts | 73 ++++++++----------- + .../dts/broadcom/bcm47094-luxul-xap-1610.dts | 36 ++------- + .../broadcom/bcm47094-luxul-xwr-3150-v1.dts | 36 ++------- + 4 files changed, 76 insertions(+), 99 deletions(-) + +--- a/arch/arm/boot/dts/broadcom/bcm-ns.dtsi ++++ b/arch/arm/boot/dts/broadcom/bcm-ns.dtsi +@@ -196,6 +196,16 @@ + #interrupt-cells = <1>; + #address-cells = <3>; + #size-cells = <2>; ++ ++ pcie_bridge0: pcie@0 { ++ device_type = "pci"; ++ reg = <0x0000 0 0 0 0>; ++ bus-range = <0x00 0xff>; ++ ++ #address-cells = <3>; ++ #size-cells = <2>; ++ ranges; ++ }; + }; + + pcie1: pcie@13000 { +@@ -210,6 +220,16 @@ + #interrupt-cells = <1>; + #address-cells = <3>; + #size-cells = <2>; ++ ++ pcie_bridge1: pcie@0 { ++ device_type = "pci"; ++ reg = <0x0000 0 0 0 0>; ++ bus-range = <0x00 0xff>; ++ ++ #address-cells = <3>; ++ #size-cells = <2>; ++ ranges; ++ }; + }; + + pcie2: pcie@14000 { +@@ -224,6 +244,16 @@ + #interrupt-cells = <1>; + #address-cells = <3>; + #size-cells = <2>; ++ ++ pcie_bridge2: pcie@0 { ++ device_type = "pci"; ++ reg = <0x0000 0 0 0 0>; ++ bus-range = <0x00 0xff>; ++ ++ #address-cells = <3>; ++ #size-cells = <2>; ++ ranges; ++ }; + }; + + usb2: usb2@21000 { +--- a/arch/arm/boot/dts/broadcom/bcm4709-netgear-r8000.dts ++++ b/arch/arm/boot/dts/broadcom/bcm4709-netgear-r8000.dts +@@ -126,66 +126,53 @@ + }; + }; + +-&pcie0 { +- #address-cells = <3>; +- #size-cells = <2>; +- +- bridge@0,0,0 { ++&pcie_bridge0 { ++ wifi@0,0 { ++ compatible = "brcm,bcm4366-fmac", "brcm,bcm4329-fmac"; + reg = <0x0000 0 0 0 0>; +- +- #address-cells = <3>; +- #size-cells = <2>; +- +- wifi@0,1,0 { +- compatible = "brcm,bcm4366-fmac", "brcm,bcm4329-fmac"; +- reg = <0x0000 0 0 0 0>; +- ieee80211-freq-limit = <5735000 5835000>; +- brcm,ccode-map = "JP-JP-78", "US-Q2-86"; +- }; ++ ieee80211-freq-limit = <5735000 5835000>; ++ brcm,ccode-map = "JP-JP-78", "US-Q2-86"; + }; + }; + +-&pcie1 { +- #address-cells = <3>; +- #size-cells = <2>; +- +- bridge@1,0,0 { ++&pcie_bridge1 { ++ pcie@0,0 { ++ device_type = "pci"; + reg = <0x0000 0 0 0 0>; ++ bus-range = <0x01 0xff>; + + #address-cells = <3>; + #size-cells = <2>; ++ ranges; + +- bridge@1,1,0 { +- reg = <0x0000 0 0 0 0>; ++ pcie@1,0 { ++ device_type = "pci"; ++ reg = <0x800 0 0 0 0>; + + #address-cells = <3>; + #size-cells = <2>; ++ ranges; + +- bridge@1,0 { +- reg = <0x800 0 0 0 0>; +- +- #address-cells = <3>; +- #size-cells = <2>; +- +- wifi@0,0 { +- compatible = "brcm,bcm4366-fmac", "brcm,bcm4329-fmac"; +- reg = <0x0000 0 0 0 0>; +- brcm,ccode-map = "JP-JP-78", "US-Q2-86"; +- }; ++ wifi@0,0 { ++ compatible = "brcm,bcm4366-fmac", "brcm,bcm4329-fmac"; ++ reg = <0x0000 0 0 0 0>; ++ brcm,ccode-map = "JP-JP-78", "US-Q2-86"; + }; ++ }; + +- bridge@1,2,2 { +- reg = <0x1000 0 0 0 0>; ++ pcie@2,0 { ++ device_type = "pci"; ++ reg = <0x1000 0 0 0 0>; + +- #address-cells = <3>; +- #size-cells = <2>; ++ #address-cells = <3>; ++ #size-cells = <2>; ++ ranges; + +- wifi@1,4,0 { +- compatible = "brcm,bcm4366-fmac", "brcm,bcm4329-fmac"; +- reg = <0x0000 0 0 0 0>; +- ieee80211-freq-limit = <5170000 5730000>; +- brcm,ccode-map = "JP-JP-78", "US-Q2-86"; +- }; ++ wifi@0,0 { ++ compatible = "brcm,bcm4366-fmac", "brcm,bcm4329-fmac"; ++ reg = <0x0000 0 0 0 0>; ++ ieee80211-freq-limit = <5170000 5730000>; ++ brcm,ccode-map = "JP-JP-78", "US-Q2-86"; + }; + }; + }; +--- a/arch/arm/boot/dts/broadcom/bcm47094-luxul-xap-1610.dts ++++ b/arch/arm/boot/dts/broadcom/bcm47094-luxul-xap-1610.dts +@@ -65,39 +65,19 @@ + }; + + +-&pcie0 { +- #address-cells = <3>; +- #size-cells = <2>; +- +- bridge@0,0 { ++&pcie_bridge0 { ++ wifi@0,0 { ++ compatible = "brcm,bcm4366-fmac", "brcm,bcm4329-fmac"; + reg = <0x0000 0 0 0 0>; +- +- #address-cells = <3>; +- #size-cells = <2>; +- +- wifi@0,0 { +- compatible = "brcm,bcm4366-fmac", "brcm,bcm4329-fmac"; +- reg = <0x0000 0 0 0 0>; +- brcm,ccode-map = "AU-AU-920", "CA-CA-892", "GB-DE-964", "NZ-AU-920", "US-US-825"; +- }; ++ brcm,ccode-map = "AU-AU-920", "CA-CA-892", "GB-DE-964", "NZ-AU-920", "US-US-825"; + }; + }; + +-&pcie1 { +- #address-cells = <3>; +- #size-cells = <2>; +- +- bridge@0,0 { ++&pcie_bridge1 { ++ wifi@0,0 { ++ compatible = "brcm,bcm4366-fmac", "brcm,bcm4329-fmac"; + reg = <0x0000 0 0 0 0>; +- +- #address-cells = <3>; +- #size-cells = <2>; +- +- wifi@0,0 { +- compatible = "brcm,bcm4366-fmac", "brcm,bcm4329-fmac"; +- reg = <0x0000 0 0 0 0>; +- brcm,ccode-map = "AU-AU-920", "CA-CA-892", "GB-DE-964", "NZ-AU-920", "US-US-825"; +- }; ++ brcm,ccode-map = "AU-AU-920", "CA-CA-892", "GB-DE-964", "NZ-AU-920", "US-US-825"; + }; + }; + +--- a/arch/arm/boot/dts/broadcom/bcm47094-luxul-xwr-3150-v1.dts ++++ b/arch/arm/boot/dts/broadcom/bcm47094-luxul-xwr-3150-v1.dts +@@ -81,39 +81,19 @@ + nvmem-cell-names = "mac-address"; + }; + +-&pcie0 { +- #address-cells = <3>; +- #size-cells = <2>; +- +- bridge@0,0 { ++&pcie_bridge0 { ++ wifi@0,0 { ++ compatible = "brcm,bcm4366-fmac", "brcm,bcm4329-fmac"; + reg = <0x0000 0 0 0 0>; +- +- #address-cells = <3>; +- #size-cells = <2>; +- +- wifi@0,0 { +- compatible = "brcm,bcm4366-fmac", "brcm,bcm4329-fmac"; +- reg = <0x0000 0 0 0 0>; +- brcm,ccode-map = "AU-AU-953", "CA-CA-946", "GB-E0-846", "NZ-AU-953", "US-Q2-930"; +- }; ++ brcm,ccode-map = "AU-AU-953", "CA-CA-946", "GB-E0-846", "NZ-AU-953", "US-Q2-930"; + }; + }; + +-&pcie1 { +- #address-cells = <3>; +- #size-cells = <2>; +- +- bridge@0,0 { ++&pcie_bridge1 { ++ wifi@0,0 { ++ compatible = "brcm,bcm4366-fmac", "brcm,bcm4329-fmac"; + reg = <0x0000 0 0 0 0>; +- +- #address-cells = <3>; +- #size-cells = <2>; +- +- wifi@0,0 { +- compatible = "brcm,bcm4366-fmac", "brcm,bcm4329-fmac"; +- reg = <0x0000 0 0 0 0>; +- brcm,ccode-map = "AU-AU-953", "CA-CA-946", "GB-E0-846", "NZ-AU-953", "US-Q2-930"; +- }; ++ brcm,ccode-map = "AU-AU-953", "CA-CA-946", "GB-E0-846", "NZ-AU-953", "US-Q2-930"; + }; + }; +