From: Hal Martin Date: Mon, 22 Dec 2025 09:48:46 +0000 (+0100) Subject: ipq40xx/meraki: refactor common device tree X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=593e399568a9834576f03e9414c1a232d82078b6;p=thirdparty%2Fopenwrt.git ipq40xx/meraki: refactor common device tree qcom-ipq4029-insect-common.dtsi was common to the MR33 and MR74, but was no longer common with the other supported Meraki devices. I have refactored insect-common and wired-qca-common into qcom-ipq4029-meraki-common.dtsi which contains the actual common components (e.g. NAND partitions, ART nvmem). Individual devices reference qcom-ipq4029-meraki-insect.dtsi plus their own individual configuration. Signed-off-by: Hal Martin Link: https://github.com/openwrt/openwrt/pull/20646 Signed-off-by: Robert Marko --- diff --git a/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-gx20.dts b/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-gx20.dts index 0c951e56dab..d3dd6edd8e0 100644 --- a/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-gx20.dts +++ b/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-gx20.dts @@ -1,12 +1,26 @@ // SPDX-License-Identifier: GPL-2.0-only // Device Tree Source for Meraki Go GX20 (Fairyfly) -#include "qcom-ipq4029-wired-qca-common.dtsi" +#include "qcom-ipq4029-meraki-insect.dtsi" / { model = "Meraki Go GX20 Router"; compatible = "meraki,gx20"; + soc { + ess_tcsr@1953000 { + qcom,ess-interface-select = ; + }; + + tcsr@194b000 { + /* select hostmode */ + compatible = "qcom,tcsr"; + reg = <0x194b000 0x100>; + qcom,usb-hsphy-mode-select = ; + status = "okay"; + }; + }; + leds { compatible = "gpio-leds"; @@ -99,11 +113,51 @@ }; }; -/* GX20 does not have WiFi radios */ -&wifi0 { - status = "disabled"; +&tricolor { + enable-gpio = <&tlmm 48 GPIO_ACTIVE_HIGH>; +}; + +&usb2_hs_phy { + status = "okay"; +}; + +&usb2 { + status = "okay"; +}; + +&usb3_hs_phy { + status = "okay"; +}; + +&usb3_ss_phy { + status = "okay"; +}; + +&usb3 { + status = "okay"; +}; + +&swport1 { + label = "wan"; + status = "okay"; +}; + +&swport2 { + label = "lan2"; + status = "okay"; +}; + +&swport3 { + label = "lan3"; + status = "okay"; +}; + +&swport4 { + label = "lan4"; + status = "okay"; }; -&wifi1 { - status = "disabled"; +&swport5 { + label = "lan5"; + status = "okay"; }; diff --git a/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-insect-common.dtsi b/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-meraki-common.dtsi similarity index 61% rename from target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-insect-common.dtsi rename to target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-meraki-common.dtsi index 46cc68435f6..2e5d961eaec 100644 --- a/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-insect-common.dtsi +++ b/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-meraki-common.dtsi @@ -1,9 +1,10 @@ // SPDX-License-Identifier: GPL-2.0-only /* - * Device Tree Source for Meraki "Insect" series + * Device Tree Source for Meraki devices * * Copyright (C) 2017 Chris Blake * Copyright (C) 2017 Christian Lamparter + * Copyright (C) 2025 Hal Martin * * Based on Cisco Meraki DTS from GPL release r25-linux-3.14-20170427 * @@ -19,21 +20,6 @@ #include / { - aliases { - // TODO: Verify if the ethernet0 alias is needed - ethernet0 = &gmac; - led-boot = &status_green; - led-failsafe = &status_red; - led-running = &status_green; - led-upgrade = &power_orange; - }; - - /* Do we really need this defined? */ - memory { - device_type = "memory"; - reg = <0x80000000 0x10000000>; - }; - soc { /* It is a 56-bit counter that supplies the count to the ARM arch timers and without upstream driver */ @@ -45,7 +31,6 @@ ess_tcsr@1953000 { compatible = "qcom,tcsr"; reg = <0x1953000 0x1000>; - qcom,ess-interface-select = ; }; tcsr@1949000 { @@ -70,17 +55,6 @@ linux,code = ; }; }; - - leds { - compatible = "gpio-leds"; - - power_orange: power { - function = LED_FUNCTION_POWER; - color = ; - gpios = <&tlmm 49 GPIO_ACTIVE_LOW>; - panic-indicator; - }; - }; }; &watchdog { @@ -105,17 +79,6 @@ status = "okay"; }; -&blsp1_uart2 { - pinctrl-0 = <&serial_1_pins>; - pinctrl-names = "default"; - status = "okay"; - - bluetooth { - compatible = "ti,cc2650"; - enable-gpios = <&tlmm 12 GPIO_ACTIVE_LOW>; - }; -}; - &cryptobam { status = "okay"; }; @@ -124,72 +87,6 @@ pinctrl-0 = <&i2c_0_pins>; pinctrl-names = "default"; status = "okay"; - - eeprom@50 { - compatible = "atmel,24c64"; - pagesize = <32>; - reg = <0x50>; - read-only; /* This holds our MAC & Meraki board-data */ - - nvmem-layout { - compatible = "fixed-layout"; - #address-cells = <1>; - #size-cells = <1>; - - mac_address: mac-address@66 { - compatible = "mac-base"; - reg = <0x66 0x6>; - #nvmem-cell-cells = <1>; - }; - }; - }; -}; - -&blsp1_i2c4 { - pinctrl-0 = <&i2c_1_pins>; - pinctrl-names = "default"; - status = "okay"; - - tricolor: led-controller@30 { - compatible = "ti,lp5562"; - reg = <0x30>; - clock-mode = /bits/8 <2>; - #address-cells = <1>; - #size-cells = <0>; - - /* RGB led */ - status_red: chan@0 { - chan-name = "red:status"; - led-cur = /bits/ 8 <0x20>; - max-cur = /bits/ 8 <0x60>; - reg = <0>; - color = ; - }; - - status_green: chan@1 { - chan-name = "green:status"; - led-cur = /bits/ 8 <0x20>; - max-cur = /bits/ 8 <0x60>; - reg = <1>; - color = ; - }; - - chan@2 { - chan-name = "blue:status"; - led-cur = /bits/ 8 <0x20>; - max-cur = /bits/ 8 <0x60>; - reg = <2>; - color = ; - }; - - chan@3 { - chan-name = "white:status"; - led-cur = /bits/ 8 <0x20>; - max-cur = /bits/ 8 <0x60>; - reg = <3>; - color = ; - }; - }; }; &nand { @@ -277,6 +174,12 @@ }; }; +&pcie0 { + status = "disabled"; + perst-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>; + wake-gpios = <&tlmm 50 GPIO_ACTIVE_LOW>; +}; + &ubi_art { nvmem-layout { compatible = "fixed-layout"; @@ -297,33 +200,11 @@ }; }; -&pcie0 { - status = "okay"; - perst-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>; - wake-gpios = <&tlmm 50 GPIO_ACTIVE_LOW>; -}; - -&pcie_bridge0 { - wifi@0,0 { - compatible = "qcom,ath10k"; - reg = <0x00010000 0 0 0 0>; - nvmem-cells = <&mac_address 1>, <&cal_factory_9000>; - nvmem-cell-names = "mac-address", "calibration"; - }; -}; - &qpic_bam { status = "okay"; }; &tlmm { - /* - * GPIO43 should be 0/1 whenever the unit is - * powered through PoE or AC-Adapter. - * That said, playing with this seems to - * reset the AP. - */ - mdio_pins: mdio_pinmux { mux_1 { pins = "gpio6"; @@ -355,27 +236,17 @@ }; i2c_0_pins: i2c_0_pinmux { - pinmux { - function = "blsp_i2c0"; - pins = "gpio20", "gpio21"; - }; - pinconf { - pins = "gpio20", "gpio21"; - drive-strength = <16>; - bias-disable; - }; + function = "blsp_i2c0"; + pins = "gpio20", "gpio21"; + drive-strength = <16>; + bias-disable; }; i2c_1_pins: i2c_1_pinmux { - pinmux { - function = "blsp_i2c1"; - pins = "gpio34", "gpio35"; - }; - pinconf { - pins = "gpio34", "gpio35"; - drive-strength = <16>; - bias-disable; - }; + function = "blsp_i2c1"; + pins = "gpio34", "gpio35"; + drive-strength = <16>; + bias-disable; }; nand_pins: nand_pins { @@ -390,90 +261,46 @@ */ pullups { - pins = "gpio52", "gpio53", "gpio58", - "gpio59"; + pins = "gpio53", "gpio58", "gpio59"; function = "qpic"; bias-pull-up; }; pulldowns { - pins = "gpio54", "gpio55", "gpio56", - "gpio57", "gpio60", "gpio61", - "gpio62", "gpio63", "gpio64", - "gpio65", "gpio66", "gpio67", - "gpio68", "gpio69"; + pins = "gpio55", "gpio56", "gpio57", + "gpio60", "gpio62", "gpio63", + "gpio64", "gpio65", "gpio66", + "gpio67", "gpio68", "gpio69"; function = "qpic"; bias-pull-down; }; }; }; -&wifi0 { - status = "okay"; - nvmem-cells = <&mac_address 2>, <&precal_factory_1000>; - nvmem-cell-names = "mac-address", "pre-calibration"; -}; - -&wifi1 { - status = "okay"; - nvmem-cells = <&mac_address 3>, <&precal_factory_5000>; - nvmem-cell-names = "mac-address", "pre-calibration"; -}; - &mdio { status = "okay"; pinctrl-0 = <&mdio_pins>; pinctrl-names = "default"; - - ar8035: ethernet-phy@1 { - reg = <1>; - }; - - ethernet-phy-package@0 { - status = "disabled"; - }; -}; - -&gmac { - status = "okay"; - nvmem-cells = <&mac_address 0>; - nvmem-cell-names = "mac-address"; }; &switch { status = "okay"; - - /delete-property/ psgmii-ethphy; }; -&swport5 { +&gmac { status = "okay"; - - label = "lan"; - phy-handle = <&ar8035>; - phy-mode = "rgmii-rxid"; -}; - -ðphy0 { - status = "disabled"; -}; - -ðphy1 { - status = "disabled"; -}; - -ðphy2 { - status = "disabled"; -}; - -ðphy3 { - status = "disabled"; + nvmem-cells = <&mac_address 0>; + nvmem-cell-names = "mac-address"; }; -ðphy4 { +&wifi0 { status = "disabled"; + nvmem-cells = <&mac_address 2>, <&precal_factory_1000>; + nvmem-cell-names = "mac-address", "pre-calibration"; }; -&psgmiiphy { +&wifi1 { status = "disabled"; + nvmem-cells = <&mac_address 3>, <&precal_factory_5000>; + nvmem-cell-names = "mac-address", "pre-calibration"; }; diff --git a/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-meraki-insect.dtsi b/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-meraki-insect.dtsi new file mode 100644 index 00000000000..9c9f307219b --- /dev/null +++ b/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-meraki-insect.dtsi @@ -0,0 +1,122 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Device Tree Source for Meraki devices + * + * Copyright (C) 2017 Chris Blake + * Copyright (C) 2017 Christian Lamparter + * Copyright (C) 2025 Hal Martin + * + * Based on Cisco Meraki DTS from GPL release r25-linux-3.14-20170427 + * + * This file is licensed under the terms of the GNU General Public + * License version 2. This program is licensed "as is" without + * any warranty of any kind, whether express or implied. + */ + +#include "qcom-ipq4029-meraki-common.dtsi" + +/ { + aliases { + led-boot = &status_green; + led-failsafe = &status_red; + led-running = &status_green; + led-upgrade = &power_orange; + }; + + leds { + compatible = "gpio-leds"; + + power_orange: power { + function = LED_FUNCTION_POWER; + color = ; + gpios = <&tlmm 49 GPIO_ACTIVE_LOW>; + panic-indicator; + }; + }; +}; + +&blsp1_i2c3 { + eeprom@50 { + compatible = "atmel,24c64"; + pagesize = <32>; + reg = <0x50>; + read-only; /* This holds our MAC & Meraki board-data */ + + nvmem-layout { + compatible = "fixed-layout"; + #address-cells = <1>; + #size-cells = <1>; + + mac_address: mac-address@66 { + compatible = "mac-base"; + reg = <0x66 0x6>; + #nvmem-cell-cells = <1>; + }; + }; + }; +}; + +&blsp1_i2c4 { + pinctrl-0 = <&i2c_1_pins>; + pinctrl-names = "default"; + status = "okay"; + + tricolor: led-controller@30 { + compatible = "ti,lp5562"; + reg = <0x30>; + clock-mode = /bits/8 <2>; + #address-cells = <1>; + #size-cells = <0>; + + /* RGB led */ + status_red: chan@0 { + chan-name = "red:status"; + led-cur = /bits/ 8 <0x20>; + max-cur = /bits/ 8 <0x60>; + reg = <0>; + color = ; + }; + + status_green: chan@1 { + chan-name = "green:status"; + led-cur = /bits/ 8 <0x20>; + max-cur = /bits/ 8 <0x60>; + reg = <1>; + color = ; + }; + + chan@2 { + chan-name = "blue:status"; + led-cur = /bits/ 8 <0x20>; + max-cur = /bits/ 8 <0x60>; + reg = <2>; + color = ; + }; + + chan@3 { + chan-name = "white:status"; + led-cur = /bits/ 8 <0x20>; + max-cur = /bits/ 8 <0x60>; + reg = <3>; + color = ; + }; + }; +}; + +&gmac { + status = "okay"; + nvmem-cells = <&mac_address 0>; + nvmem-cell-names = "mac-address"; +}; + +&wifi0 { + status = "disabled"; + nvmem-cells = <&mac_address 2>, <&precal_factory_1000>; + nvmem-cell-names = "mac-address", "pre-calibration"; +}; + +&wifi1 { + status = "disabled"; + nvmem-cells = <&mac_address 3>, <&precal_factory_5000>; + nvmem-cell-names = "mac-address", "pre-calibration"; +}; diff --git a/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-mr30h.dts b/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-mr30h.dts index 4edc1bf1200..8b21736d00c 100644 --- a/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-mr30h.dts +++ b/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-mr30h.dts @@ -1,19 +1,12 @@ // SPDX-License-Identifier: GPL-2.0-only // Device Tree Source for Meraki MR30H (Noisy Cricket) -#include "qcom-ipq4029-wired-qca-common.dtsi" +#include "qcom-ipq4029-meraki-insect.dtsi" / { model = "Meraki MR30H"; compatible = "meraki,mr30h"; - soc { - /* for USB PHY, device has no USB port */ - tcsr@194b000 { - status = "disabled"; - }; - }; - leds { compatible = "gpio-leds"; @@ -80,26 +73,16 @@ gpios = <&tlmm 22 GPIO_ACTIVE_LOW>; }; }; -}; - -&usb2_hs_phy { - status = "disabled"; -}; -&usb2 { - status = "disabled"; -}; - -&usb3_hs_phy { - status = "disabled"; -}; - -&usb3_ss_phy { - status = "disabled"; + soc { + ess_tcsr@1953000 { + qcom,ess-interface-select = ; + }; + }; }; -&usb3 { - status = "disabled"; +&tricolor { + enable-gpio = <&tlmm 48 GPIO_ACTIVE_HIGH>; }; &pcie0 { @@ -109,7 +92,7 @@ }; &pcie_bridge0 { - wifi2: wifi@1,0 { + wifi2: wifi@0,0 { compatible = "qcom,ath10k"; reg = <0x00010000 0 0 0 0>; nvmem-cells = <&cal_factory_9000>; @@ -127,7 +110,6 @@ qcom,ath10k-calibration-variant = "Meraki-MR30H"; }; - &swport1 { label = "lan4"; status = "okay"; diff --git a/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-mr33.dts b/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-mr33.dts index a1fad08559e..62a793cedb1 100644 --- a/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-mr33.dts +++ b/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-mr33.dts @@ -1,21 +1,88 @@ // SPDX-License-Identifier: GPL-2.0-only // Device Tree Source for Meraki MR33 (Stinkbug) -#include "qcom-ipq4029-insect-common.dtsi" +#include "qcom-ipq4029-meraki-insect.dtsi" / { model = "Meraki MR33 Access Point"; compatible = "meraki,mr33"; + + soc { + ess_tcsr@1953000 { + qcom,ess-interface-select = ; + }; + }; }; &tricolor { enable-gpios = <&tlmm 48 GPIO_ACTIVE_HIGH>; }; +&pcie0 { + status = "okay"; +}; + +&pcie_bridge0 { + wifi@0,0 { + compatible = "qcom,ath10k"; + reg = <0x00010000 0 0 0 0>; + nvmem-cells = <&mac_address 1>, <&cal_factory_9000>; + nvmem-cell-names = "mac-address", "calibration"; + }; +}; + &wifi0 { + status = "okay"; qcom,ath10k-calibration-variant = "Meraki-MR33"; }; &wifi1 { + status = "okay"; qcom,ath10k-calibration-variant = "Meraki-MR33"; }; + +&mdio { + ar8035: ethernet-phy@1 { + reg = <1>; + }; + + ethernet-phy-package@0 { + status = "disabled"; + }; +}; + +&switch { + /delete-property/ psgmii-ethphy; +}; + +&swport5 { + status = "okay"; + + label = "lan"; + phy-handle = <&ar8035>; + phy-mode = "rgmii-rxid"; +}; + +ðphy0 { + status = "disabled"; +}; + +ðphy1 { + status = "disabled"; +}; + +ðphy2 { + status = "disabled"; +}; + +ðphy3 { + status = "disabled"; +}; + +ðphy4 { + status = "disabled"; +}; + +&psgmiiphy { + status = "disabled"; +}; diff --git a/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-mr74.dts b/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-mr74.dts index 2df9e912a25..09e71a65a87 100644 --- a/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-mr74.dts +++ b/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-mr74.dts @@ -1,21 +1,88 @@ // SPDX-License-Identifier: GPL-2.0-only // Device Tree Source for Meraki MR74 (Ladybug) -#include "qcom-ipq4029-insect-common.dtsi" +#include "qcom-ipq4029-meraki-insect.dtsi" / { model = "Meraki MR74 Access Point"; compatible = "meraki,mr74"; + + soc { + ess_tcsr@1953000 { + qcom,ess-interface-select = ; + }; + }; }; &tricolor { enable-gpios = <&tlmm 14 GPIO_ACTIVE_LOW>; }; +&pcie0 { + status = "okay"; +}; + +&pcie_bridge0 { + wifi@0,0 { + compatible = "qcom,ath10k"; + reg = <0x00010000 0 0 0 0>; + nvmem-cells = <&mac_address 1>, <&cal_factory_9000>; + nvmem-cell-names = "mac-address", "calibration"; + }; +}; + &wifi0 { + status = "okay"; qcom,ath10k-calibration-variant = "Meraki-MR33"; }; &wifi1 { + status = "okay"; qcom,ath10k-calibration-variant = "Meraki-MR33"; }; + +&mdio { + ar8035: ethernet-phy@1 { + reg = <1>; + }; + + ethernet-phy-package@0 { + status = "disabled"; + }; +}; + +&switch { + /delete-property/ psgmii-ethphy; +}; + +&swport5 { + status = "okay"; + + label = "lan"; + phy-handle = <&ar8035>; + phy-mode = "rgmii-rxid"; +}; + +ðphy0 { + status = "disabled"; +}; + +ðphy1 { + status = "disabled"; +}; + +ðphy2 { + status = "disabled"; +}; + +ðphy3 { + status = "disabled"; +}; + +ðphy4 { + status = "disabled"; +}; + +&psgmiiphy { + status = "disabled"; +}; diff --git a/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-z3.dts b/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-z3.dts index 6ed70dc0a28..ea3b3ee7592 100644 --- a/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-z3.dts +++ b/target/linux/ipq40xx/files-6.12/arch/arm/boot/dts/qcom/qcom-ipq4029-z3.dts @@ -1,12 +1,26 @@ // SPDX-License-Identifier: GPL-2.0-only // Device Tree Source for Meraki Z3 (Fuzzy Cricket) -#include "qcom-ipq4029-wired-qca-common.dtsi" +#include "qcom-ipq4029-meraki-insect.dtsi" / { model = "Meraki Z3 Router"; compatible = "meraki,z3"; + soc { + ess_tcsr@1953000 { + qcom,ess-interface-select = ; + }; + + tcsr@194b000 { + /* select hostmode */ + compatible = "qcom,tcsr"; + reg = <0x194b000 0x100>; + qcom,usb-hsphy-mode-select = ; + status = "okay"; + }; + }; + leds { compatible = "gpio-leds"; @@ -99,6 +113,55 @@ }; }; +&tricolor { + enable-gpio = <&tlmm 48 GPIO_ACTIVE_HIGH>; +}; + +&usb2_hs_phy { + status = "okay"; +}; + +&usb2 { + status = "okay"; +}; + +&usb3_hs_phy { + status = "okay"; +}; + +&usb3_ss_phy { + status = "okay"; +}; + +&usb3 { + status = "okay"; +}; + +&swport1 { + label = "wan"; + status = "okay"; +}; + +&swport2 { + label = "lan2"; + status = "okay"; +}; + +&swport3 { + label = "lan3"; + status = "okay"; +}; + +&swport4 { + label = "lan4"; + status = "okay"; +}; + +&swport5 { + label = "lan5"; + status = "okay"; +}; + &wifi0 { status = "okay"; qcom,ath10k-calibration-variant = "Meraki-Z3";