From 745dee11ac787e9ffb4c15799961fa02d6462c8b Mon Sep 17 00:00:00 2001 From: Christian Lamparter Date: Tue, 4 Sep 2018 23:27:02 +0200 Subject: [PATCH] ath79: add support for WD My Net Wi-Fi Range Extender This patch ports over support for the device from ar71xx. SOC: AR7370 (Wasp - AR9344 rev2 0001974c) RAM: Winbond W9725G6KB-25 32MiB FLASH: Winbond 25Q64FVSIG 8MiB WLAN: AR9380 Dual-Band 802.11abgn 3x3:3 INPUT: WPS, RESET button (hardware on/off toggle button) LED: Power, LAN, WiFi, 3 RSSI-Leds (low, medium, high) Serial: Header Next to the winbond flash chip (labeld JP1) Pinout is GND - NC - RX - TX - 3V3 (JP1) The Serial setting is 115200-8-N-1. - Installation via uboot's upgrade command 0. attach serial cable 1. interrupt uboot and enter "upgrade code.bin" into the u-boot prompt ar7240> upgrade code.bin 2. rename openwrt...sysupgrade.bin to code.bin on PC 3. run a tftp-client on the PC (shell)$ tftp 192.168.1.230 binary put code.bin 4. wait for the device to finish [...] Copy buff to Flash from 0x9f040000 length 0x79f000 Copy to Flash... write addr: 9f040000 done 5. enter "go" in the u-boot prompt ar7240> go - TFTP ramdisk image boot from the uboot prompt (tftp server defaults to serverip 192.168.1.254) => tftpboot 81000000 initramfs.bin => bootm Tested and working: - LEDs - Buttons - Ethernet - Wi-Fi - OpenWRT sysupgrade For flashing and debricking information see: Users coming from ar71xx can use sysupgrade too. But I highly advise to no save the old configuration and start from a clean state. Signed-off-by: Christian Lamparter --- .../ath79/base-files/etc/board.d/01_leds | 8 + .../ath79/base-files/etc/board.d/02_network | 6 +- .../etc/hotplug.d/firmware/10-ath9k-eeprom | 4 + .../ar9344_wd_mynet-wifi-rangeextender.dts | 174 ++++++++++++++++++ target/linux/ath79/image/generic.mk | 30 +++ 5 files changed, 221 insertions(+), 1 deletion(-) create mode 100644 target/linux/ath79/dts/ar9344_wd_mynet-wifi-rangeextender.dts diff --git a/target/linux/ath79/base-files/etc/board.d/01_leds b/target/linux/ath79/base-files/etc/board.d/01_leds index db0d12cce0..c6a2a6dcc1 100755 --- a/target/linux/ath79/base-files/etc/board.d/01_leds +++ b/target/linux/ath79/base-files/etc/board.d/01_leds @@ -99,6 +99,14 @@ ubnt,rocket-m) ucidef_set_led_rssi "rssimediumlow" "RSSIMEDIUMLOW" "ubnt:orange:link2" "wlan0" "26" "100" ucidef_set_led_rssi "rssimediumhigh" "RSSIMEDIUMHIGH" "ubnt:green:link3" "wlan0" "51" "100" ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "ubnt:green:link4" "wlan0" "76" "100" + ;; +wd,mynet-wifi-rangeextender) + ucidef_set_led_netdev "lan" "LAN" "$boardname:green:lan" "eth0" + ucidef_set_rssimon "wlan0" "200000" "1" + ucidef_set_led_rssi "rssilow" "RSSILOW" "$boardname:rssi-low" "wlan0" "1" "100" + ucidef_set_led_rssi "rssimedium" "RSSIMED" "$boardname:blue:rssi-med" "wlan0" "33" "100" + ucidef_set_led_rssi "rssihigh" "RSSIMAX" "$boardname:blue:rssi-max" "wlan0" "66" "100" + ;; esac board_config_flush diff --git a/target/linux/ath79/base-files/etc/board.d/02_network b/target/linux/ath79/base-files/etc/board.d/02_network index 14f6c59822..3a3c5974bd 100755 --- a/target/linux/ath79/base-files/etc/board.d/02_network +++ b/target/linux/ath79/base-files/etc/board.d/02_network @@ -23,7 +23,8 @@ ath79_setup_interfaces() ubnt,rocket-m|\ ubnt,unifiac-lite|\ ubnt,unifiac-mesh|\ - ubnt,unifi) + ubnt,unifi|\ + wd,mynet-wifi-rangeextender) ucidef_set_interface_lan "eth0" ;; buffalo,wzr-hp-g450h) @@ -207,6 +208,9 @@ ath79_setup_macs() wan_mac=$(fconfig -s -r -d $(find_mtd_part "RedBoot config") -n ar7100_esa) lan_mac=$(macaddr_add "$wan_mac" 1) ;; + wd,mynet-wifi-rangeextender) + lan_mac=$(nvram get et0macaddr) + ;; esac [ -n "$lan_mac" ] && ucidef_set_interface_macaddr "lan" $lan_mac diff --git a/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom index 1af6f96be0..8c10cb8979 100644 --- a/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom +++ b/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom @@ -145,6 +145,10 @@ case "$FIRMWARE" in ubnt,unifi) ath9k_eeprom_extract "art" 4096 2048 ;; + wd,mynet-wifi-rangeextender) + ath9k_eeprom_extract "art" 4096 4096 + ath9k_patch_fw_mac_crc $(nvram get wl0_hwaddr) "$mac" 2 + ;; *) ath9k_eeprom_die "board $board is not supported yet" ;; diff --git a/target/linux/ath79/dts/ar9344_wd_mynet-wifi-rangeextender.dts b/target/linux/ath79/dts/ar9344_wd_mynet-wifi-rangeextender.dts new file mode 100644 index 0000000000..1877cea3d9 --- /dev/null +++ b/target/linux/ath79/dts/ar9344_wd_mynet-wifi-rangeextender.dts @@ -0,0 +1,174 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include +#include + +#include "ar9344.dtsi" + +/ { + model = "Western Digital My Net Wi-Fi Range Extender"; + compatible = "wd,mynet-wifi-rangeextender", "qca,ar9344"; + + chosen { + bootargs = "console=ttyS0,115200n8"; + }; + + aliases { + led-boot = &power; + led-failsafe = &power; + led-running = &power; + led-upgrade = &power; + }; + + leds { + compatible = "gpio-leds"; + + power: power { + label = "mynet-wifi-rangeextender:blue:power"; + gpios = <&gpio 11 GPIO_ACTIVE_HIGH>; + /* LED has no off state. It's either on or it blinks */ + }; + + lan { + label = "mynet-wifi-rangeextender:green:lan"; + gpios = <&gpio 12 GPIO_ACTIVE_LOW>; + }; + + wifi { + label = "mynet-wifi-rangeextender:blue:wifi"; + gpios = <&gpio 19 GPIO_ACTIVE_LOW>; + linux,default-trigger = "phy0tpt"; + }; + + wifi-rssi-low { + label = "mynet-wifi-rangeextender:blue:rssi-low"; + gpios = <&gpio 20 GPIO_ACTIVE_LOW>; + }; + + wifi-rssi-med { + label = "mynet-wifi-rangeextender:blue:rssi-med"; + gpios = <&gpio 21 GPIO_ACTIVE_LOW>; + }; + + wifi-rssi-max { + label = "mynet-wifi-rangeextender:blue:rssi-max"; + gpios = <&gpio 22 GPIO_ACTIVE_LOW>; + }; + }; + + keys { + compatible = "gpio-keys-polled"; + poll-interval = <50>; + + reset { + linux,code = ; + gpios = <&gpio 13 GPIO_ACTIVE_LOW>; + debounce-interval = <60>; + }; + + band-switch { + linux,code = ; + gpios = <&gpio 14 GPIO_ACTIVE_HIGH>; + linux,input-type = ; + debounce-interval = <60>; + }; + + wps { + linux,code = ; + gpios = <&gpio 15 GPIO_ACTIVE_LOW>; + debounce-interval = <60>; + }; + }; +}; + +&ref { + clock-frequency = <25000000>; +}; + +&uart { + status = "okay"; +}; + +&spi { + num-cs = <1>; + + status = "okay"; + + flash@0 { + compatible = /* "s25fl064k", */ "jedec,spi-nor"; + reg = <0>; + spi-max-frequency = <25000000>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + uboot: partition@0 { + label = "u-boot"; + reg = <0x0 0x040000>; + read-only; + }; + + partition@40000 { + label = "firmware"; + reg = <0x40000 0x7a0000>; + compatible = "cybertan,trx"; + }; + + nvram: partition@7e0000 { + label = "nvram"; + reg = <0x7e0000 0x10000>; + }; + + art: partition@7f0000 { + label = "art"; + reg = <0x7f0000 0x10000>; + read-only; + }; + }; + }; +}; + +&pcie { + status = "okay"; + + ath9k: wifi@0,0 { + compatible = "pci168c,0030"; + reg = <0x0000 0 0 0 0>; + qca,no-eeprom; + /* wifi MAC is stored in nvram */ + }; +}; + +&mdio0 { + status = "okay"; + + phy-mask = <0x10>; + + phy4: ethernet-phy@4 { + reg = <4>; + }; +}; + +ð0 { + status = "okay"; + + pll-data = <0x0e000000 0x3c000101 0x3c001313>; + + /* ethernet MAC is stored in nvram */ + phy-mode = "rgmii"; + phy-handle = <&phy4>; + + gmac-config { + device = <&gmac>; + rgmii-gmac0 = <1>; + rxd-delay = <3>; + rxdv-delay = <3>; + }; +}; + +&mdio1 { + status = "disabled"; +}; diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk index e35a3568a8..60dc512f06 100644 --- a/target/linux/ath79/image/generic.mk +++ b/target/linux/ath79/image/generic.mk @@ -1,5 +1,22 @@ include ./common-netgear.mk +DEVICE_VARS += ADDPATTERN_ID ADDPATTERN_VERSION + +define Build/cybertan-trx + @echo -n '' > $@-empty.bin + -$(STAGING_DIR_HOST)/bin/trx -o $@.new \ + -f $(IMAGE_KERNEL) -F $@-empty.bin \ + -x 32 -a 0x10000 -x -32 -f $@ + -mv "$@.new" "$@" + -rm $@-empty.bin +endef + +define Build/addpattern + -$(STAGING_DIR_HOST)/bin/addpattern -B $(ADDPATTERN_ID) \ + -v v$(ADDPATTERN_VERSION) -i $@ -o $@.new + -mv "$@.new" "$@" +endef + define Device/avm_fritz300e ATH_SOC := ar7242 DEVICE_TITLE := AVM FRITZ!WLAN Repeater 300E @@ -232,3 +249,16 @@ define Device/phicomm_k2t DEVICE_PACKAGES := kmod-leds-reset kmod-ath10k ath10k-firmware-qca9888 endef TARGET_DEVICES += phicomm_k2t + +define Device/wd_mynet-wifi-rangeextender + ATH_SOC := ar9344 + DEVICE_TITLE := Western Digital My Net Wi-Fi Range Extender + DEVICE_PACKAGES := rssileds nvram -swconfig + IMAGE_SIZE := 7808k + ADDPATTERN_ID := mynet-rext + ADDPATTERN_VERSION := 1.00.01 + IMAGE/sysupgrade.bin := append-rootfs | pad-rootfs | cybertan-trx | \ + addpattern | append-metadata + SUPPORTED_DEVICES += mynet-rext +endef +TARGET_DEVICES += wd_mynet-wifi-rangeextender -- 2.25.1