diff --git a/target/linux/ipq40xx/base-files/etc/board.d/01_leds b/target/linux/ipq40xx/base-files/etc/board.d/01_leds index 187bafccb95..0ee7df0b1aa 100644 --- a/target/linux/ipq40xx/base-files/etc/board.d/01_leds +++ b/target/linux/ipq40xx/base-files/etc/board.d/01_leds @@ -96,6 +96,30 @@ mobipromo,cm520-79f) ucidef_set_led_netdev "lan1" "LAN1" "blue:lan1" "lan1" ucidef_set_led_netdev "lan2" "LAN2" "blue:lan2" "lan2" ;; +meraki,gx20 |\ +meraki,z3 |\ +meraki,z3c) + ucidef_set_led_netdev "wan_link" "WAN (link)" "green:wan-0" "wan" "link" + ucidef_set_led_netdev "wan_act" "WAN (txrx)" "green:wan-1" "wan" "tx rx" + ucidef_set_led_netdev "lan1_link" "LAN1 (link)" "green:lan-10" "lan1" "link" + ucidef_set_led_netdev "lan1_act" "LAN1 (txrx)" "green:lan-11" "lan1" "tx rx" + ucidef_set_led_netdev "lan2_link" "LAN2 (link)" "green:lan-20" "lan2" "link" + ucidef_set_led_netdev "lan2_act" "LAN2 (txrx)" "green:lan-21" "lan2" "tx rx" + ucidef_set_led_netdev "lan3_link" "LAN3 (link)" "green:lan-30" "lan3" "link" + ucidef_set_led_netdev "lan3_act" "LAN3 (txrx)" "green:lan-31" "lan3" "tx rx" + ucidef_set_led_netdev "lan4_link" "LAN4 (link)" "green:lan-40" "lan4" "link" + ucidef_set_led_netdev "lan4_act" "LAN4 (txrx)" "green:lan-41" "lan4" "tx rx" + ;; +meraki,mr30h) + ucidef_set_led_netdev "lan1_act" "LAN1 (txrx)" "amber:lan-0" "lan1" "tx rx" + ucidef_set_led_netdev "lan1_link" "LAN1 (link)" "green:lan-1" "lan1" "link" + ucidef_set_led_netdev "lan2_act" "LAN2 (txrx)" "amber:lan-10" "lan2" "tx rx" + ucidef_set_led_netdev "lan2_link" "LAN2 (link)" "green:lan-11" "lan2" "link" + ucidef_set_led_netdev "lan3_act" "LAN3 (txrx)" "amber:lan-20" "lan3" "tx rx" + ucidef_set_led_netdev "lan3_link" "LAN3 (link)" "green:lan-21" "lan3" "link" + ucidef_set_led_netdev "lan4_act" "LAN4 (txrx)" "amber:lan-30" "lan4" "tx rx" + ucidef_set_led_netdev "lan4_link" "LAN4 (link)" "green:lan-31" "lan4" "link" + ;; netgear,ex6100v2 |\ netgear,ex6150v2) ucidef_set_led_wlan "wlan2g" "WLAN2G" "green:router" "phy0tpt" diff --git a/target/linux/ipq40xx/base-files/etc/board.d/02_network b/target/linux/ipq40xx/base-files/etc/board.d/02_network index e3a6e242284..7224d39a0a3 100644 --- a/target/linux/ipq40xx/base-files/etc/board.d/02_network +++ b/target/linux/ipq40xx/base-files/etc/board.d/02_network @@ -26,6 +26,9 @@ ipq40xx_setup_interfaces() pakedge,wr-1|\ teltonika,rutx50|\ yyets,le1|\ + meraki,gx20|\ + meraki,z3|\ + meraki,z3c|\ zyxel,nbg6617) ucidef_set_interfaces_lan_wan "lan1 lan2 lan3 lan4" "wan" ;; @@ -133,6 +136,9 @@ ipq40xx_setup_interfaces() ucidef_set_interface_lan "lan1 lan2" ucidef_set_interface "wan" device "/dev/cdc-wdm0" protocol "qmi" ;; + meraki,mr30h) + ucidef_set_interface_lan "lan1 lan2 lan3 lan4 lan5" + ;; *) echo "Unsupported hardware. Network interfaces not initialized" ;; diff --git a/target/linux/ipq40xx/base-files/etc/board.d/03_gpio_switches b/target/linux/ipq40xx/base-files/etc/board.d/03_gpio_switches index 43ed32fc2b7..7a2d5bc035c 100644 --- a/target/linux/ipq40xx/base-files/etc/board.d/03_gpio_switches +++ b/target/linux/ipq40xx/base-files/etc/board.d/03_gpio_switches @@ -21,6 +21,10 @@ cilab,meshpoint-one) compex,wpj428) ucidef_add_gpio_switch "sim_card_select" "SIM card select" "3" "0" ;; +meraki,z3|\ +meraki,z3c) + ucidef_add_gpio_switch "lan4_poe_disable" "LAN4 PoE disable" "440" "0" + ;; mikrotik,cap-ac) ucidef_add_gpio_switch "poe_passtrough" "POE passtrough enable" "514" "0" ;; diff --git a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata index 4a1a0ff3111..69642b10df3 100644 --- a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata +++ b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata @@ -9,8 +9,11 @@ board=$(board_name) case "$FIRMWARE" in "ath10k/cal-pci-0000:01:00.0.bin") case "$board" in + meraki,mr30h |\ meraki,mr33 |\ - meraki,mr74) + meraki,mr74 |\ + meraki,z3 |\ + meraki,z3c) caldata_extract_ubi "ART" 0x9000 0x844 caldata_valid "4408" || caldata_extract "ART" 0x9000 0x844 ;; @@ -111,8 +114,11 @@ case "$FIRMWARE" in caldata_extract_mmc "0:ART" 0x1000 0x2f20 ath10k_patch_mac $(macaddr_add "$(cat /sys/class/net/eth0/address)" 1) ;; + meraki,mr30h |\ meraki,mr33 |\ - meraki,mr74) + meraki,mr74 |\ + meraki,z3 |\ + meraki,z3c) caldata_extract_ubi "ART" 0x1000 0x2f20 caldata_valid "202f" || caldata_extract "ART" 0x1000 0x2f20 ;; @@ -210,8 +216,11 @@ case "$FIRMWARE" in caldata_extract_mmc "0:ART" 0x5000 0x2f20 ath10k_patch_mac $(macaddr_add "$(cat /sys/class/net/eth0/address)" 2) ;; + meraki,mr30h |\ meraki,mr33 |\ - meraki,mr74) + meraki,mr74 |\ + meraki,z3 |\ + meraki,z3c) caldata_extract_ubi "ART" 0x5000 0x2f20 caldata_valid "202f" || caldata_extract "ART" 0x5000 0x2f20 ;; diff --git a/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh b/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh index 53a95611487..3fb7efa3b47 100644 --- a/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh @@ -178,11 +178,21 @@ platform_do_upgrade() { linksys,whw03) platform_do_upgrade_linksys_emmc "$1" ;; + meraki,mr30h |\ meraki,mr33 |\ meraki,mr74) CI_KERNPART="part.safe" nand_do_upgrade "$1" ;; + meraki,gx20 |\ + meraki,z3 |\ + meraki,z3c) + # DO NOT set CI_KERNPART to part.safe, + # that is used for chain-loading an unlocked u-boot + # if part.safe is overwritten, then u-boot is lost! + CI_KERNPART="part.old" + nand_do_upgrade "$1" + ;; mikrotik,cap-ac|\ mikrotik,hap-ac2|\ mikrotik,hap-ac3-lte6-kit|\ diff --git a/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-gx20.dts b/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-gx20.dts new file mode 100644 index 00000000000..ecb84b5005c --- /dev/null +++ b/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-gx20.dts @@ -0,0 +1,18 @@ +// SPDX-License-Identifier: GPL-2.0-only +// Device Tree Source for Meraki MR33 (Stinkbug) + +#include "qcom-ipq4029-wired-qca-common.dtsi" + +/ { + model = "Meraki Go GX20 Router"; + compatible = "meraki,gx20"; +}; + +/* GX20 does not have WiFi radios */ +&wifi0 { + status = "disabled"; +}; + +&wifi1 { + status = "disabled"; +}; diff --git a/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-mr30h.dts b/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-mr30h.dts new file mode 100644 index 00000000000..b23ed7911e7 --- /dev/null +++ b/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-mr30h.dts @@ -0,0 +1,501 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Device Tree Source for Meraki "Insect" series + * + * Copyright (C) 2017 Chris Blake + * Copyright (C) 2017 Christian Lamparter + * Copyright (C) 2024 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-ipq4019.dtsi" +#include +#include +#include +#include + +/ { + model = "Meraki MR30H"; + compatible = "meraki,mr30h"; + + aliases { + 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 { + rng@22000 { + status = "okay"; + }; + + mdio@90000 { + status = "okay"; + pinctrl-0 = <&mdio_pins>; + pinctrl-names = "default"; + }; + + /* It is a 56-bit counter that supplies the count to the ARM arch + timers and without upstream driver */ + counter@4a1000 { + compatible = "qcom,qca-gcnt"; + reg = <0x4a1000 0x4>; + }; + + ess_tcsr@1953000 { + compatible = "qcom,tcsr"; + reg = <0x1953000 0x1000>; + qcom,ess-interface-select = ; + }; + + tcsr@1949000 { + compatible = "qcom,tcsr"; + reg = <0x1949000 0x100>; + qcom,wifi_glb_cfg = ; + }; + + tcsr@1957000 { + compatible = "qcom,tcsr"; + reg = <0x1957000 0x100>; + qcom,wifi_noc_memtype_m0_m2 = ; + }; + + serial@78b0000 { + pinctrl-0 = <&serial_1_pins>; + pinctrl-names = "default"; + status = "okay"; + + bluetooth { + compatible = "ti,cc2650"; + enable-gpios = <&tlmm 12 GPIO_ACTIVE_LOW>; + }; + }; + + crypto@8e3a000 { + status = "okay"; + }; + + watchdog@b017000 { + status = "okay"; + }; + }; + + usb2@60f8800 { + status = "disabled"; + }; + + usb3@8af8800 { + status = "disabled"; + }; + + keys { + compatible = "gpio-keys"; + + reset { + label = "reset"; + gpios = <&tlmm 18 GPIO_ACTIVE_LOW>; + linux,code = ; + }; + }; + + leds { + compatible = "gpio-leds"; + + power_orange: power { + color = ; + function = LED_FUNCTION_POWER; + label = "orange:power"; + gpios = <&tlmm 49 GPIO_ACTIVE_LOW>; + panic-indicator; + }; + + led-1 { + color = ; + function = LED_FUNCTION_LAN; + function-enumerator = <1>; + gpios = <&tlmm 22 GPIO_ACTIVE_LOW>; + //linux,default-trigger = "90000.mdio-1:03:link"; + }; + + led-2 { + /* LAN 4 act */ + color = ; + function = LED_FUNCTION_LAN; + function-enumerator = <0>; + gpios = <&tlmm 23 GPIO_ACTIVE_LOW>; + }; + + led-3 { + color = ; + function = LED_FUNCTION_LAN; + function-enumerator = <11>; + gpios = <&tlmm 24 GPIO_ACTIVE_LOW>; + //linux,default-trigger = "90000.mdio-1:02:link"; + }; + + led-4 { + /* LAN 3 act */ + color = ; + function = LED_FUNCTION_LAN; + function-enumerator = <10>; + gpios = <&tlmm 25 GPIO_ACTIVE_LOW>; + }; + + led-5 { + color = ; + function = LED_FUNCTION_LAN; + function-enumerator = <21>; + gpios = <&tlmm 26 GPIO_ACTIVE_LOW>; + //linux,default-trigger = "90000.mdio-1:01:link"; + }; + + led-6 { + /* LAN 2 act */ + color = ; + function = LED_FUNCTION_LAN; + function-enumerator = <20>; + gpios = <&tlmm 27 GPIO_ACTIVE_HIGH>; + }; + + led-7 { + color = ; + function = LED_FUNCTION_LAN; + function-enumerator = <31>; + gpios = <&tlmm 32 GPIO_ACTIVE_LOW>; + //linux,default-trigger = "90000.mdio-1:00:link"; + }; + + led-8 { + /* LAN 1 act */ + color = ; + function = LED_FUNCTION_LAN; + function-enumerator = <30>; + gpios = <&tlmm 33 GPIO_ACTIVE_LOW>; + }; + + }; +}; + +&blsp_dma { + status = "okay"; +}; + +&blsp1_uart1 { + pinctrl-0 = <&serial_0_pins>; + pinctrl-names = "default"; + status = "okay"; +}; + +&cryptobam { + status = "okay"; +}; + +&blsp1_i2c3 { + 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>; + enable-gpio = <&tlmm 48 GPIO_ACTIVE_HIGH>; + #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 { + pinctrl-0 = <&nand_pins>; + pinctrl-names = "default"; + status = "okay"; + + nand@0 { + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "sbl1"; + reg = <0x00000000 0x00100000>; + read-only; + }; + partition@100000 { + label = "mibib"; + reg = <0x00100000 0x00100000>; + read-only; + }; + partition@200000 { + label = "bootconfig"; + reg = <0x00200000 0x00100000>; + read-only; + }; + partition@300000 { + label = "qsee"; + reg = <0x00300000 0x00100000>; + read-only; + }; + partition@400000 { + label = "qsee_alt"; + reg = <0x00400000 0x00100000>; + read-only; + }; + partition@500000 { + label = "cdt"; + reg = <0x00500000 0x00080000>; + read-only; + }; + partition@580000 { + label = "cdt_alt"; + reg = <0x00580000 0x00080000>; + read-only; + }; + partition@600000 { + label = "ddrparams"; + reg = <0x00600000 0x00080000>; + read-only; + }; + partition@700000 { + label = "u-boot"; + reg = <0x00700000 0x00200000>; + read-only; + }; + partition@900000 { + label = "u-boot-backup"; + reg = <0x00900000 0x00200000>; + read-only; + }; + partition@b00000 { + label = "ART"; + reg = <0x00b00000 0x00080000>; + read-only; + }; + partition@c00000 { + label = "ubi"; + reg = <0x00c00000 0x07000000>; + /* + * Do not try to allocate the remaining + * 4 MiB to this ubi partition. It will + * confuse the u-boot and it might not + * find the kernel partition anymore. + */ + }; + }; + }; +}; + +&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"; + function = "mdio"; + bias-pull-up; + }; + mux_2 { + pins = "gpio7"; + function = "mdc"; + bias-pull-up; + }; + }; + + serial_0_pins: serial_pinmux { + mux { + pins = "gpio16", "gpio17"; + function = "blsp_uart0"; + bias-disable; + }; + }; + + serial_1_pins: serial1_pinmux { + mux { + /* We use the i2c-0 pins for serial_1 */ + pins = "gpio8", "gpio9"; + function = "blsp_uart1"; + bias-disable; + }; + }; + + i2c_0_pins: i2c_0_pinmux { + pinmux { + function = "blsp_i2c0"; + pins = "gpio20", "gpio21"; + }; + pinconf { + 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; + }; + }; + + nand_pins: nand_pins { + /* + * There are 18 pins. 15 pins are common between LCD and NAND. + * The QPIC controller arbitrates between LCD and NAND. Of the + * remaining 4, 2 are for NAND and 2 are for LCD exclusively. + * + * The meraki source hints that the bluetooth module claims + * pin 52 as well. But sadly, there's no data whenever this + * is a NAND or LCD exclusive pin or not. + */ + + pullups { + pins = "gpio52", "gpio53", "gpio58", + "gpio59"; + function = "qpic"; + bias-pull-up; + }; + + pulldowns { + pins = "gpio54", "gpio55", "gpio56", + "gpio57", "gpio60", "gpio61", + "gpio62", "gpio63", "gpio64", + "gpio65", "gpio66", "gpio67", + "gpio68", "gpio69"; + function = "qpic"; + bias-pull-down; + }; + }; +}; + +&wifi0 { + status = "okay"; + qcom,ath10k-calibration-variant = "Meraki-MR30H"; + nvmem-cells = <&mac_address 2>; + nvmem-cell-names = "mac-address"; +}; + +&wifi1 { + status = "okay"; + qcom,ath10k-calibration-variant = "Meraki-MR30H"; + nvmem-cells = <&mac_address 3>; + nvmem-cell-names = "mac-address"; +}; + +&gmac { + status = "okay"; + nvmem-cells = <&mac_address 0>; + nvmem-cell-names = "mac-address"; +}; + +&switch { + status = "okay"; +}; + +&swport1 { + label = "lan4"; + status = "okay"; +}; + +&swport2 { + label = "lan3"; + status = "okay"; +}; + +&swport3 { + label = "lan2"; + status = "okay"; +}; + +&swport4 { + label = "lan1"; + status = "okay"; +}; + +&swport5 { + label = "lan5"; + status = "okay"; +}; diff --git a/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-wired-qca-common.dtsi b/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-wired-qca-common.dtsi new file mode 100644 index 00000000000..2f63bc20b94 --- /dev/null +++ b/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-wired-qca-common.dtsi @@ -0,0 +1,541 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Device Tree Source for Meraki "wired-arm-qca" series + * + * Copyright (C) 2017 Chris Blake + * Copyright (C) 2017 Christian Lamparter + * Copyright (C) 2024 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-ipq4019.dtsi" +#include +#include +#include +#include + +/ { + model = "Meraki wired-arm-qca"; + compatible = "meraki,wired-arm-qca"; + + aliases { + 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 0x20000000>; + }; + + soc { + rng@22000 { + status = "okay"; + }; + + mdio@90000 { + status = "okay"; + pinctrl-0 = <&mdio_pins>; + pinctrl-names = "default"; + }; + + /* It is a 56-bit counter that supplies the count to the ARM arch + timers and without upstream driver */ + counter@4a1000 { + compatible = "qcom,qca-gcnt"; + reg = <0x4a1000 0x4>; + }; + + ess_tcsr@1953000 { + compatible = "qcom,tcsr"; + reg = <0x1953000 0x1000>; + qcom,ess-interface-select = ; + }; + + tcsr@1949000 { + compatible = "qcom,tcsr"; + reg = <0x1949000 0x100>; + qcom,wifi_glb_cfg = ; + }; + + tcsr@194b000 { + /* select hostmode */ + compatible = "qcom,tcsr"; + reg = <0x194b000 0x100>; + qcom,usb-hsphy-mode-select = ; + status = "okay"; + }; + + tcsr@1957000 { + compatible = "qcom,tcsr"; + reg = <0x1957000 0x100>; + qcom,wifi_noc_memtype_m0_m2 = ; + }; + + serial@78b0000 { + pinctrl-0 = <&serial_1_pins>; + pinctrl-names = "default"; + status = "okay"; + + bluetooth { + compatible = "ti,cc2650"; + enable-gpios = <&tlmm 12 GPIO_ACTIVE_LOW>; + }; + }; + + crypto@8e3a000 { + status = "okay"; + }; + + watchdog@b017000 { + status = "okay"; + }; + }; + + keys { + compatible = "gpio-keys"; + + reset { + label = "reset"; + gpios = <&tlmm 18 GPIO_ACTIVE_LOW>; + linux,code = ; + }; + }; + + leds { + compatible = "gpio-leds"; + + power_orange: power { + color = ; + function = LED_FUNCTION_POWER; + label = "orange:power"; + gpios = <&tlmm 49 GPIO_ACTIVE_LOW>; + panic-indicator; + }; + + led-1 { + /* WAN left */ + color = ; + function = LED_FUNCTION_WAN; + function-enumerator = <0>; + gpios = <&tlmm 46 GPIO_ACTIVE_LOW>; + //linux,default-trigger = "90000.mdio-1:00:link"; + }; + + led-2 { + /* WAN right */ + color = ; + function = LED_FUNCTION_WAN; + function-enumerator = <1>; + gpios = <&tlmm 30 GPIO_ACTIVE_LOW>; + }; + + led-3 { + /* port 1 left */ + color = ; + function = LED_FUNCTION_LAN; + function-enumerator = <10>; + gpios = <&tlmm 23 GPIO_ACTIVE_LOW>; + //linux,default-trigger = "90000.mdio-1:01:link"; + }; + + led-4 { + /* port 1 right */ + color = ; + function = LED_FUNCTION_LAN; + function-enumerator = <11>; + gpios = <&tlmm 22 GPIO_ACTIVE_LOW>; + }; + + led-5 { + /* port 2 left */ + color = ; + function = LED_FUNCTION_LAN; + function-enumerator = <20>; + gpios = <&tlmm 25 GPIO_ACTIVE_LOW>; + //linux,default-trigger = "90000.mdio-1:02:link"; + }; + + led-6 { + /* port 2 right */ + color = ; + function = LED_FUNCTION_LAN; + function-enumerator = <21>; + gpios = <&tlmm 24 GPIO_ACTIVE_LOW>; + }; + + led-7 { + /* port 3 left */ + color = ; + function = LED_FUNCTION_LAN; + function-enumerator = <30>; + gpios = <&tlmm 29 GPIO_ACTIVE_LOW>; + //linux,default-trigger = "90000.mdio-1:03:link"; + }; + + led-8 { + /* port 3 right */ + color = ; + function = LED_FUNCTION_LAN; + function-enumerator = <31>; + gpios = <&tlmm 26 GPIO_ACTIVE_LOW>; + }; + + led-9 { + /* port 4 left */ + color = ; + function = LED_FUNCTION_LAN; + function-enumerator = <40>; + gpios = <&tlmm 33 GPIO_ACTIVE_LOW>; + //linux,default-trigger = "90000.mdio-1:04:link"; + }; + + led-10 { + /* port 4 right */ + color = ; + function = LED_FUNCTION_LAN; + function-enumerator = <41>; + gpios = <&tlmm 32 GPIO_ACTIVE_LOW>; + }; + }; +}; + +&blsp_dma { + status = "okay"; +}; + +&blsp1_uart1 { + pinctrl-0 = <&serial_0_pins>; + pinctrl-names = "default"; + status = "okay"; +}; + +&cryptobam { + status = "okay"; +}; + +&blsp1_i2c3 { + 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>; + enable-gpio = <&tlmm 48 GPIO_ACTIVE_HIGH>; + #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 { + pinctrl-0 = <&nand_pins>; + pinctrl-names = "default"; + status = "okay"; + + nand@0 { + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "sbl1"; + reg = <0x00000000 0x00100000>; + read-only; + }; + partition@100000 { + label = "mibib"; + reg = <0x00100000 0x00100000>; + read-only; + }; + partition@200000 { + label = "bootconfig"; + reg = <0x00200000 0x00100000>; + read-only; + }; + partition@300000 { + label = "qsee"; + reg = <0x00300000 0x00100000>; + read-only; + }; + partition@400000 { + label = "qsee_alt"; + reg = <0x00400000 0x00100000>; + read-only; + }; + partition@500000 { + label = "cdt"; + reg = <0x00500000 0x00080000>; + read-only; + }; + partition@580000 { + label = "cdt_alt"; + reg = <0x00580000 0x00080000>; + read-only; + }; + partition@600000 { + label = "ddrparams"; + reg = <0x00600000 0x00080000>; + read-only; + }; + partition@700000 { + label = "u-boot"; + reg = <0x00700000 0x00200000>; + read-only; + }; + partition@900000 { + label = "u-boot-backup"; + reg = <0x00900000 0x00200000>; + read-only; + }; + partition@b00000 { + label = "ART"; + reg = <0x00b00000 0x00080000>; + read-only; + }; + partition@c00000 { + label = "ubi"; + reg = <0x00c00000 0x07000000>; + /* + * Do not try to allocate the remaining + * 4 MiB to this ubi partition. It will + * confuse the u-boot and it might not + * find the kernel partition anymore. + */ + }; + }; + }; +}; + +&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"; + function = "mdio"; + bias-pull-up; + }; + mux_2 { + pins = "gpio7"; + function = "mdc"; + bias-pull-up; + }; + }; + + serial_0_pins: serial_pinmux { + mux { + pins = "gpio16", "gpio17"; + function = "blsp_uart0"; + bias-disable; + }; + }; + + serial_1_pins: serial1_pinmux { + mux { + /* We use the i2c-0 pins for serial_1 */ + pins = "gpio8", "gpio9"; + function = "blsp_uart1"; + bias-disable; + }; + }; + + i2c_0_pins: i2c_0_pinmux { + pinmux { + function = "blsp_i2c0"; + pins = "gpio20", "gpio21"; + }; + pinconf { + 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; + }; + }; + + nand_pins: nand_pins { + /* + * There are 18 pins. 15 pins are common between LCD and NAND. + * The QPIC controller arbitrates between LCD and NAND. Of the + * remaining 4, 2 are for NAND and 2 are for LCD exclusively. + * + * The meraki source hints that the bluetooth module claims + * pin 52 as well. But sadly, there's no data whenever this + * is a NAND or LCD exclusive pin or not. + */ + + pullups { + pins = "gpio52", "gpio53", "gpio58", + "gpio59"; + function = "qpic"; + bias-pull-up; + }; + + pulldowns { + pins = "gpio54", "gpio55", "gpio56", + "gpio57", "gpio60", "gpio61", + "gpio62", "gpio63", "gpio64", + "gpio65", "gpio66", "gpio67", + "gpio68", "gpio69"; + function = "qpic"; + bias-pull-down; + }; + }; +}; + +&usb2_hs_phy { + status = "okay"; +}; + +&usb2 { + status = "okay"; +}; + +&usb3_hs_phy { + status = "okay"; +}; + +&usb3_ss_phy { + status = "okay"; +}; + +&usb3 { + status = "okay"; +}; + +&wifi0 { + status = "okay"; + qcom,ath10k-calibration-variant = "Meraki-Z3"; + nvmem-cells = <&mac_address 2>; + nvmem-cell-names = "mac-address"; +}; + +&wifi1 { + status = "okay"; + qcom,ath10k-calibration-variant = "Meraki-Z3"; + nvmem-cells = <&mac_address 3>; + nvmem-cell-names = "mac-address"; +}; + +&gmac { + status = "okay"; + nvmem-cells = <&mac_address 0>; + nvmem-cell-names = "mac-address"; +}; + +&switch { + status = "okay"; +}; + +&swport1 { + label = "wan"; + status = "okay"; +}; + +&swport2 { + label = "lan1"; + status = "okay"; +}; + +&swport3 { + label = "lan2"; + status = "okay"; +}; + +&swport4 { + label = "lan3"; + status = "okay"; +}; + +&swport5 { + label = "lan4"; + status = "okay"; +}; diff --git a/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-z3.dts b/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-z3.dts new file mode 100644 index 00000000000..fb817ebf71b --- /dev/null +++ b/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-z3.dts @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0-only +// Device Tree Source for Meraki MR33 (Stinkbug) + +#include "qcom-ipq4029-wired-qca-common.dtsi" + +/ { + model = "Meraki Z3 Router"; + compatible = "meraki,z3"; +}; diff --git a/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-z3c.dts b/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-z3c.dts new file mode 100644 index 00000000000..4cc8948e064 --- /dev/null +++ b/target/linux/ipq40xx/files-6.6/arch/arm/boot/dts/qcom/qcom-ipq4029-z3c.dts @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: GPL-2.0-only +// Device Tree Source for Meraki MR33 (Stinkbug) + +#include "qcom-ipq4029-wired-qca-common.dtsi" + +/ { + model = "Meraki Z3C LTE Router"; + compatible = "meraki,z3c"; +}; diff --git a/target/linux/ipq40xx/image/generic.mk b/target/linux/ipq40xx/image/generic.mk index d92d0824f9a..d6a9d9c1f75 100644 --- a/target/linux/ipq40xx/image/generic.mk +++ b/target/linux/ipq40xx/image/generic.mk @@ -816,6 +816,40 @@ define Device/meraki_mr74 endef TARGET_DEVICES += meraki_mr74 +define Device/meraki_mr30h + $(call Device/meraki_common) + DEVICE_MODEL := MR30H + DEVICE_DTS_CONFIG := config@2 +endef +TARGET_DEVICES += meraki_mr30h + +define Device/meraki_z3 + $(call Device/meraki_common) + DEVICE_MODEL := Z3 + DEVICE_DTS_CONFIG := config@1 +endef +TARGET_DEVICES += meraki_z3 + +define Device/meraki_z3c + $(call Device/meraki_common) + DEVICE_MODEL := Z3C + DEVICE_DTS_CONFIG := config@3 + DEVICE_PACKAGES := kmod-usb-acm +endef +TARGET_DEVICES += meraki_z3c + +define Device/meraki_gx20 + $(call Device/FitImage) + DEVICE_VENDOR := Cisco Meraki + DEVICE_MODEL := Go GX20 + SOC := qcom-ipq4029 + BLOCKSIZE := 128k + PAGESIZE := 2048 + DEVICE_DTS_LOADADDR := 0x89000000 + DEVICE_DTS_CONFIG := config@2 +endef +TARGET_DEVICES += meraki_gx20 + define Device/mobipromo_cm520-79f $(call Device/FitzImage) $(call Device/UbiFit)