diff --git a/target/linux/ath79/dts/ar9344_meraki_z1.dts b/target/linux/ath79/dts/ar9344_meraki_z1.dts new file mode 100644 index 0000000000..ca91a487c5 --- /dev/null +++ b/target/linux/ath79/dts/ar9344_meraki_z1.dts @@ -0,0 +1,198 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include "ar9344.dtsi" + +#include +#include +#include + +/ { + compatible = "meraki,z1", "qca,ar9344"; + model = "Cisco Meraki Z1"; + + aliases { + led-boot = &led_power_orange; + led-failsafe = &led_power_orange; + led-upgrade = &led_power_orange; + label-mac-device = ð0; + }; + + chosen { + bootargs = "console=ttyS0,115200n8"; + }; + + keys { + compatible = "gpio-keys"; + + reset { + label = "Reset button"; + linux,code = ; + gpios = <&gpio 12 GPIO_ACTIVE_LOW>; + debounce-interval = <60>; + }; + }; + + leds { + compatible = "gpio-leds"; + + led_power_orange: led-0 { + function = LED_FUNCTION_POWER; + color = ; + gpios = <&gpio 17 GPIO_ACTIVE_LOW>; + default-state = "on"; + panic-indicator; + }; + }; +}; + +&ref { + clock-frequency = <40000000>; +}; + +&gpio { + pinctrl-names = "default"; + pinctrl-0 = <&jtag_disable_pins>; + + gpio_ext_lna0 { + gpio-hog; + gpios = <18 GPIO_ACTIVE_HIGH>; + output-low; + line-name = "z1:ext:lna0"; + }; + + gpio_ext_lna1 { + gpio-hog; + gpios = <19 GPIO_ACTIVE_HIGH>; + output-low; + line-name = "z1:ext:lna1"; + }; +}; + +&usb { + status = "okay"; +}; + +&usb_phy { + status = "okay"; +}; + +&pcie { + status = "okay"; + + ath9k: wifi@0,0 { + compatible = "pci168c,002a"; + reg = <0x0000 0 0 0 0>; + qca,no-eeprom; + nvmem-cells = <&macaddr_board_66 3>; + nvmem-cell-names = "mac-address"; + }; +}; + +&wmac { + status = "okay"; + qca,no-eeprom; + + nvmem-cells = <&macaddr_board_66 2>; + nvmem-cell-names = "mac-address"; +}; + +&nand { + status = "okay"; + + nand-ecc-mode = "soft"; + nand-ecc-algo = "bch"; + nand-ecc-strength = <4>; + nand-ecc-step-size = <512>; + nand-is-boot-medium; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "loader1"; + reg = <0x0 0x20000>; + read-only; + }; + + partition@20000 { + label = "kernel"; + reg = <0x20000 0x7e0000>; + }; + + partition@800000 { + label = "loader2"; + reg = <0x800000 0x20000>; + read-only; + }; + + partition@820000 { + label = "recovery"; + reg = <0x820000 0x7e0000>; + }; + + partition@1000000 { + label = "ubi"; + reg = <0x1000000 0x6fe0000>; + + volumes { + ubi-volume-board-config { + volname = "board-config"; + + nvmem-layout { + compatible = "fixed-layout"; + #address-cells = <1>; + #size-cells = <1>; + + macaddr_board_66: macaddr@66 { + compatible = "mac-base"; + reg = <0x66 0x6>; + #nvmem-cell-cells = <1>; + }; + }; + }; + }; + }; + + partition@7fe0000 { + label = "origcaldata"; + reg = <0x7fe0000 0x20000>; + read-only; + }; + }; +}; + +&mdio0 { + status = "okay"; + + phy0: ethernet-phy@0 { + reg = <0>; + phy-mode = "rgmii"; + + qca,ar8327-initvals = < + 0x04 0x07600000 /* PORT0 PAD MODE CTRL */ + 0x7c 0x0000007e /* PORT0_STATUS */ + >; + }; +}; + +ð0 { + status = "okay"; + + pll-data = <0x06000000 0x00000101 0x00001313>; + phy-mode = "rgmii-id"; + nvmem-cells = <&macaddr_board_66 0>; + nvmem-cell-names = "mac-address"; + + fixed-link { + speed = <1000>; + full-duplex; + }; + + gmac-config { + device = <&gmac>; + rgmii-gmac0 = <1>; + switch-only-mode = <1>; + }; +}; diff --git a/target/linux/ath79/image/nand.mk b/target/linux/ath79/image/nand.mk index 0408d6ad82..ae7c728409 100644 --- a/target/linux/ath79/image/nand.mk +++ b/target/linux/ath79/image/nand.mk @@ -19,6 +19,14 @@ define Build/meraki-header @mv $@.new $@ endef +define Build/meraki-old-nand + -$(STAGING_DIR_HOST)/bin/mkmerakifw-old \ + -B $(1) -s \ + -i $@ \ + -o $@.new + @mv $@.new $@ +endef + # attention: only zlib compression is allowed for the boot fs define Build/zyxel-buildkerneljffs mkdir -p $@.tmp/boot @@ -321,6 +329,25 @@ define Device/meraki_mr18 endef TARGET_DEVICES += meraki_mr18 +define Device/meraki_z1 + SOC = ar9344 + DEVICE_VENDOR := Meraki + DEVICE_MODEL := Z1 + DEVICE_PACKAGES := kmod-usb2 kmod-usb-ledtrig-usbport kmod-owl-loader \ + kmod-leds-uleds kmod-spi-gpio nu801 -uboot-envtools + KERNEL_SIZE := 8064k + BLOCKSIZE := 128k + PAGESIZE := 2048 + LOADER_TYPE := bin + LZMA_TEXT_START := 0x82800000 + KERNEL := kernel-bin | append-dtb | lzma | loader-kernel | \ + pad-to $$(BLOCKSIZE) | meraki-old-nand z1 + KERNEL_INITRAMFS := $$(KERNEL) + IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata + SUPPORTED_DEVICES += z1 +endef +TARGET_DEVICES += meraki_z1 + # fake rootfs is mandatory, pad-offset 129 equals (2 * uimage_header + '\0') define Device/netgear_ath79_nand DEVICE_VENDOR := NETGEAR diff --git a/target/linux/ath79/nand/base-files/etc/board.d/01_leds b/target/linux/ath79/nand/base-files/etc/board.d/01_leds index ce22d0e3ce..a7b1fc932d 100644 --- a/target/linux/ath79/nand/base-files/etc/board.d/01_leds +++ b/target/linux/ath79/nand/base-files/etc/board.d/01_leds @@ -30,6 +30,9 @@ netgear,pgzng1) netgear,r6100) ucidef_set_led_netdev "wan-green" "WAN (green)" "green:wan" "eth1" ;; +meraki,z1) + ucidef_set_led_default "diag" "DIAG" "green:tricolor" "1" + ;; netgear,wndr3700-v4|\ netgear,wndr4300|\ netgear,wndr4300sw|\ diff --git a/target/linux/ath79/nand/base-files/etc/board.d/02_network b/target/linux/ath79/nand/base-files/etc/board.d/02_network index 2f0b74e5ff..7e7d8ed725 100644 --- a/target/linux/ath79/nand/base-files/etc/board.d/02_network +++ b/target/linux/ath79/nand/base-files/etc/board.d/02_network @@ -44,6 +44,10 @@ ath79_setup_interfaces() ucidef_add_switch "switch0" \ "6u@eth1" "1:lan" "2:lan" "3:lan" "4:lan" "5:wan" "0u@eth0" ;; + meraki,z1) + ucidef_add_switch "switch0" \ + "0@eth0" "1:lan" "2:lan" "3:lan" "4:lan" "5:wan" + ;; netgear,pgzng1) ucidef_set_interfaces_lan_wan "eth1" "eth0" ;; @@ -104,6 +108,10 @@ ath79_setup_macs() wan_mac=$(mtd_get_mac_binary art 0x0) lan_mac=$(macaddr_add "$wan_mac" 1) ;; + meraki,z1) + base_mac=$(mtd_get_mac_binary_ubi board-config 102) + wan_mac=$(macaddr_add "$base_mac" 1) + ;; netgear,wndr3700-v4|\ netgear,wndr4300|\ netgear,wndr4300sw|\ diff --git a/target/linux/ath79/nand/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ath79/nand/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom index d88bcb552f..da2e32da8a 100644 --- a/target/linux/ath79/nand/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom +++ b/target/linux/ath79/nand/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom @@ -18,6 +18,16 @@ case "$FIRMWARE" in caldata_extract "odm-caldata" 0x1000 0x440 fi ;; + meraki,z1) + . /lib/upgrade/nand.sh + + if [ -n "$(nand_find_volume ubi0 caldata)" ]; then + caldata_extract_ubi "caldata" 0x1000 0x800 + else + caldata_extract "origcaldata" 0x1000 0x800 + ath9k_patch_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) 2) + fi + ;; *) caldata_die "board $board is not supported yet" ;; @@ -34,6 +44,16 @@ case "$FIRMWARE" in caldata_extract "odm-caldata" 0x5000 0x440 fi ;; + meraki,z1) + . /lib/upgrade/nand.sh + + if [ -n "$(nand_find_volume ubi0 caldata)" ]; then + caldata_extract_ubi "caldata" 0x15000 0x1000 + else + caldata_extract "origcaldata" 0x15000 0x1000 + ath9k_patch_mac $(macaddr_add $(mtd_get_mac_binary_ubi board-config 102) 3) + fi + ;; *) caldata_die "board $board is not supported yet" ;; diff --git a/target/linux/ath79/nand/base-files/etc/uci-defaults/04_led_migration b/target/linux/ath79/nand/base-files/etc/uci-defaults/04_led_migration index 281d6ac0bc..dcebe5dd8b 100644 --- a/target/linux/ath79/nand/base-files/etc/uci-defaults/04_led_migration +++ b/target/linux/ath79/nand/base-files/etc/uci-defaults/04_led_migration @@ -4,6 +4,9 @@ board=$(board_name) case "$board" in +meraki,z1) + migrate_leds ":tricolor0=:tricolor" + ;; esac remove_devicename_leds