Message ID | ef798c615bbd89267723accd30b4e0cf1f353ce6.1534507308.git.chunkeey@gmail.com |
---|---|
State | Changes Requested |
Headers | show |
Series | [OpenWrt-Devel,v2,1/2] ath79: port cybertan_part from ar71xx | expand |
Hey Christian, I found something to nitpick about. Find my comments inline. Mathias 17.08.2018 14:06, Christian Lamparter: > 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 adaptor cable for TTL/CMOS-logic > 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: > <https://openwrt.org/toh/wd/rext> > > 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 <chunkeey@gmail.com> > --- > .../ath79/base-files/etc/board.d/01_leds | 7 + > .../ath79/base-files/etc/board.d/02_network | 6 +- > .../etc/hotplug.d/firmware/10-ath9k-eeprom | 5 + > .../ar7370_wd_mynet-wifi-rangeextender.dts | 174 ++++++++++++++++++ > target/linux/ath79/image/generic.mk | 28 +++ > 5 files changed, 219 insertions(+), 1 deletion(-) > create mode 100644 target/linux/ath79/dts/ar7370_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 73f350cae2..065f2b90bf 100755 > --- a/target/linux/ath79/base-files/etc/board.d/01_leds > +++ b/target/linux/ath79/base-files/etc/board.d/01_leds > @@ -88,6 +88,13 @@ tplink,tl-wr841-v11) > ucidef_set_led_switch "lan3" "LAN3" "tp-link:green:lan3" "switch0" "0x04" > ucidef_set_led_switch "lan4" "LAN4" "tp-link:green:lan4" "switch0" "0x02" > ;; > +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" "40" "0" "6" > + ucidef_set_led_rssi "rssimedium" "RSSIMED" "$boardname:blue:rssi-med" "wlan0" "30" "80" "-29" "5" > + ucidef_set_led_rssi "rssihigh" "RSSIMAX" "$boardname:blue:rssi-max" "wlan0" "70" "100" "-69" "8" I'm quite sure the last two parameters are not really used on your boards. These are used to change the brightness of pwm leds. According to your dts it looks like the rssi leds are "normal" ones. I'm not sure about the first two parameters either. They define the range for which the led should be bright. Where the min is 1% and the max is 100%. I would expect to see some kind of stacking used: low: 1 to 100% med: 33 to 100% max: 66 to 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 603251954b..9e31be40f9 100755 > --- a/target/linux/ath79/base-files/etc/board.d/02_network > +++ b/target/linux/ath79/base-files/etc/board.d/02_network > @@ -21,7 +21,8 @@ ath79_setup_interfaces() > tplink,tl-wr703n|\ > ubnt,unifiac-lite|\ > ubnt,unifiac-mesh|\ > - ubnt,unifi) > + ubnt,unifi|\ > + wd,mynet-rangeextender) > ucidef_set_interface_lan "eth0" > ;; > buffalo,wzr-hp-g450h) > @@ -181,6 +182,9 @@ ath79_setup_macs() > base_mac=$(mtd_get_mac_binary u-boot 130048) > wan_mac=$(macaddr_add "$base_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 f668a82fa2..d158496418 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 > @@ -137,6 +137,11 @@ case "$FIRMWARE" in > ubnt,unifi) > ath9k_eeprom_extract "art" 4096 2048 > ;; > + wd,mynet-wifi-rangeextender) > + ath9k_eeprom_extract "art" 4096 4096 > + mac=$(nvram get wl0_hwaddr) > + [ -n "$mac" ] && ath9k_patch_fw_mac_crc "$mac" 2 Any reason why we can't assume that we got a mac address? Without having much though about it, I would prefer to see the sanity check in ath9k_patch_fw_mac_crc instead (param length, all params set or something like that). > + ;; > *) > ath9k_eeprom_die "board $board is not supported yet" > ;; > diff --git a/target/linux/ath79/dts/ar7370_wd_mynet-wifi-rangeextender.dts b/target/linux/ath79/dts/ar7370_wd_mynet-wifi-rangeextender.dts > new file mode 100644 > index 0000000000..8c2a4b07cb > --- /dev/null > +++ b/target/linux/ath79/dts/ar7370_wd_mynet-wifi-rangeextender.dts > @@ -0,0 +1,174 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT > +/dts-v1/; > + > +#include <dt-bindings/gpio/gpio.h> > +#include <dt-bindings/input/input.h> > + > +#include "ar9344.dtsi" > + > +/ { > + model = "Western Digital My Net Wi-Fi Range Extender"; > + compatible = "wd,mynet-wifi-rangeextender", "qca,ar7370", "qca,ar9344"; Does it really make sense to introduce an ar7370 compatible here. According to my google foo, the AR7370 is a AR9344 without wifi. I would expect they are identical beside the wifi block. > + > + 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 = <KEY_RESTART>; > + gpios = <&gpio 13 GPIO_ACTIVE_LOW>; > + debounce-interval = <60>; > + }; > + > + band-switch { > + linux,code = <BTN_1>; > + gpios = <&gpio 14 GPIO_ACTIVE_HIGH>; > + linux,input-type = <EV_SW>; > + debounce-interval = <60>; > + }; > + > + wps { > + linux,code = <KEY_WPS_BUTTON>; > + 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 5c4079f23b..11102fbc78 100644 > --- a/target/linux/ath79/image/generic.mk > +++ b/target/linux/ath79/image/generic.mk > @@ -1,5 +1,7 @@ > include ./common-netgear.mk > > +DEVICE_VARS += ADDPATTERN_ID ADDPATTERN_VERSION > + > define Device/avm_fritz300e > ATH_SOC := ar7242 > DEVICE_TITLE := AVM FRITZ!WLAN Repeater 300E > @@ -213,3 +215,29 @@ define Device/phicomm_k2t > DEVICE_PACKAGES := kmod-leds-reset kmod-ath10k ath10k-firmware-qca9888 > endef > TARGET_DEVICES += phicomm_k2t > + > +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 AFAIK the common pattern is add build commands prior to board defines. Please do it here as well (rather looks like some rebase foo anyway) > + > +define Device/wd_mynet-wifi-rangeextender > + ATH_SOC := ar7370 > + 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 >
On Friday, August 17, 2018 11:07:23 PM CEST Mathias Kresin wrote: > Hey Christian, > > I found something to nitpick about. Find my comments inline. Thank you for the review, I'll wait a until early next week, maybe Jonas has a comment on the cybertan-trx too. > [...] > > 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 73f350cae2..065f2b90bf 100755 > > --- a/target/linux/ath79/base-files/etc/board.d/01_leds > > +++ b/target/linux/ath79/base-files/etc/board.d/01_leds > > @@ -88,6 +88,13 @@ tplink,tl-wr841-v11) > > ucidef_set_led_switch "lan3" "LAN3" "tp-link:green:lan3" "switch0" "0x04" > > ucidef_set_led_switch "lan4" "LAN4" "tp-link:green:lan4" "switch0" "0x02" > > ;; > > +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" "40" "0" "6" > > + ucidef_set_led_rssi "rssimedium" "RSSIMED" "$boardname:blue:rssi-med" "wlan0" "30" "80" "-29" "5" > > + ucidef_set_led_rssi "rssihigh" "RSSIMAX" "$boardname:blue:rssi-max" "wlan0" "70" "100" "-69" "8" > > I'm quite sure the last two parameters are not really used on your > boards. These are used to change the brightness of pwm leds. According > to your dts it looks like the rssi leds are "normal" ones. > > I'm not sure about the first two parameters either. They define the > range for which the led should be bright. Where the min is 1% and the > max is 100%. I would expect to see some kind of stacking used: > > low: 1 to 100% > med: 33 to 100% > max: 66 to 100% this make sense, I'll make adjustments to the rules I copied & pasted from the ar71xx. > @@ -21,7 +21,8 @@ ath79_setup_interfaces() > > tplink,tl-wr703n|\ > > ubnt,unifiac-lite|\ > > ubnt,unifiac-mesh|\ > > - ubnt,unifi) > > + ubnt,unifi|\ > > + wd,mynet-rangeextender) > > ucidef_set_interface_lan "eth0" Oops. wd,mynet-rangeextender, should have been wd,mynet-wifi-rangeextender > > 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 f668a82fa2..d158496418 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 > > @@ -137,6 +137,11 @@ case "$FIRMWARE" in > > ubnt,unifi) > > ath9k_eeprom_extract "art" 4096 2048 > > ;; > > + wd,mynet-wifi-rangeextender) > > + ath9k_eeprom_extract "art" 4096 4096 > > + mac=$(nvram get wl0_hwaddr) > > + [ -n "$mac" ] && ath9k_patch_fw_mac_crc "$mac" 2 > > Any reason why we can't assume that we got a mac address? Without having > much though about it, I would prefer to see the sanity check in > ath9k_patch_fw_mac_crc instead (param length, all params set or > something like that). Turns out ath9k_patch_fw_mac_crc() already checks the mac. So yes, this extra check can go away. > > diff --git a/target/linux/ath79/dts/ar7370_wd_mynet-wifi-rangeextender.dts b/target/linux/ath79/dts/ar7370_wd_mynet-wifi-rangeextender.dts > > new file mode 100644 > > index 0000000000..8c2a4b07cb > > --- /dev/null > > +++ b/target/linux/ath79/dts/ar7370_wd_mynet-wifi-rangeextender.dts > > @@ -0,0 +1,174 @@ > > +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT > > +/dts-v1/; > > + > > +#include <dt-bindings/gpio/gpio.h> > > +#include <dt-bindings/input/input.h> > > + > > +#include "ar9344.dtsi" > > + > > +/ { > > + model = "Western Digital My Net Wi-Fi Range Extender"; > > + compatible = "wd,mynet-wifi-rangeextender", "qca,ar7370", "qca,ar9344"; > > Does it really make sense to introduce an ar7370 compatible here. > According to my google foo, the AR7370 is a AR9344 without wifi. > I would expect they are identical beside the wifi block. True, while the chip under the shield says AR7370 [0], the kernel identifies in /proc/cpuinfo as |system type : Atheros AR9344 rev 2 no problem, I change it back. About the integrated wifi: I do remember that the integrated wifi core in this device can be enabled. However without any matching caldata or FEM and antenna the only signals it will pick up are those from close by. It could be that the AR7370 really is a lower binned AR9344. But let's leave it at that. > > + > > + chosen { > > + bootargs = "console=ttyS0,115200n8"; > > + }; > > + > > + aliases { > > + led-boot = &power; > > + led-failsafe = &power; > > + led-running = &power; > > + led-upgrade = &power; > > + }; > > + > > + [...] > > +&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 5c4079f23b..11102fbc78 100644 > > --- a/target/linux/ath79/image/generic.mk > > +++ b/target/linux/ath79/image/generic.mk > > @@ -1,5 +1,7 @@ > > include ./common-netgear.mk > > > > +DEVICE_VARS += ADDPATTERN_ID ADDPATTERN_VERSION > > + > > define Device/avm_fritz300e > > ATH_SOC := ar7242 > > DEVICE_TITLE := AVM FRITZ!WLAN Repeater 300E > > @@ -213,3 +215,29 @@ define Device/phicomm_k2t > > DEVICE_PACKAGES := kmod-leds-reset kmod-ath10k ath10k-firmware-qca9888 > > endef > > TARGET_DEVICES += phicomm_k2t > > + > > +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 > > AFAIK the common pattern is add build commands prior to board defines. > Please do it here as well (rather looks like some rebase foo anyway) Alright, done. Regards, Christian [0] <https://wiki.openwrt.org/_detail/media/wd/wd_mynet_wifi_range_extender_soc-and-ram.jpg?id=toh%3Awd%3Arext>
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 73f350cae2..065f2b90bf 100755 --- a/target/linux/ath79/base-files/etc/board.d/01_leds +++ b/target/linux/ath79/base-files/etc/board.d/01_leds @@ -88,6 +88,13 @@ tplink,tl-wr841-v11) ucidef_set_led_switch "lan3" "LAN3" "tp-link:green:lan3" "switch0" "0x04" ucidef_set_led_switch "lan4" "LAN4" "tp-link:green:lan4" "switch0" "0x02" ;; +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" "40" "0" "6" + ucidef_set_led_rssi "rssimedium" "RSSIMED" "$boardname:blue:rssi-med" "wlan0" "30" "80" "-29" "5" + ucidef_set_led_rssi "rssihigh" "RSSIMAX" "$boardname:blue:rssi-max" "wlan0" "70" "100" "-69" "8" + ;; 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 603251954b..9e31be40f9 100755 --- a/target/linux/ath79/base-files/etc/board.d/02_network +++ b/target/linux/ath79/base-files/etc/board.d/02_network @@ -21,7 +21,8 @@ ath79_setup_interfaces() tplink,tl-wr703n|\ ubnt,unifiac-lite|\ ubnt,unifiac-mesh|\ - ubnt,unifi) + ubnt,unifi|\ + wd,mynet-rangeextender) ucidef_set_interface_lan "eth0" ;; buffalo,wzr-hp-g450h) @@ -181,6 +182,9 @@ ath79_setup_macs() base_mac=$(mtd_get_mac_binary u-boot 130048) wan_mac=$(macaddr_add "$base_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 f668a82fa2..d158496418 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 @@ -137,6 +137,11 @@ case "$FIRMWARE" in ubnt,unifi) ath9k_eeprom_extract "art" 4096 2048 ;; + wd,mynet-wifi-rangeextender) + ath9k_eeprom_extract "art" 4096 4096 + mac=$(nvram get wl0_hwaddr) + [ -n "$mac" ] && ath9k_patch_fw_mac_crc "$mac" 2 + ;; *) ath9k_eeprom_die "board $board is not supported yet" ;; diff --git a/target/linux/ath79/dts/ar7370_wd_mynet-wifi-rangeextender.dts b/target/linux/ath79/dts/ar7370_wd_mynet-wifi-rangeextender.dts new file mode 100644 index 0000000000..8c2a4b07cb --- /dev/null +++ b/target/linux/ath79/dts/ar7370_wd_mynet-wifi-rangeextender.dts @@ -0,0 +1,174 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include <dt-bindings/gpio/gpio.h> +#include <dt-bindings/input/input.h> + +#include "ar9344.dtsi" + +/ { + model = "Western Digital My Net Wi-Fi Range Extender"; + compatible = "wd,mynet-wifi-rangeextender", "qca,ar7370", "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 = <KEY_RESTART>; + gpios = <&gpio 13 GPIO_ACTIVE_LOW>; + debounce-interval = <60>; + }; + + band-switch { + linux,code = <BTN_1>; + gpios = <&gpio 14 GPIO_ACTIVE_HIGH>; + linux,input-type = <EV_SW>; + debounce-interval = <60>; + }; + + wps { + linux,code = <KEY_WPS_BUTTON>; + 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 5c4079f23b..11102fbc78 100644 --- a/target/linux/ath79/image/generic.mk +++ b/target/linux/ath79/image/generic.mk @@ -1,5 +1,7 @@ include ./common-netgear.mk +DEVICE_VARS += ADDPATTERN_ID ADDPATTERN_VERSION + define Device/avm_fritz300e ATH_SOC := ar7242 DEVICE_TITLE := AVM FRITZ!WLAN Repeater 300E @@ -213,3 +215,29 @@ define Device/phicomm_k2t DEVICE_PACKAGES := kmod-leds-reset kmod-ath10k ath10k-firmware-qca9888 endef TARGET_DEVICES += phicomm_k2t + +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/wd_mynet-wifi-rangeextender + ATH_SOC := ar7370 + 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
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 adaptor cable for TTL/CMOS-logic 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: <https://openwrt.org/toh/wd/rext> 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 <chunkeey@gmail.com> --- .../ath79/base-files/etc/board.d/01_leds | 7 + .../ath79/base-files/etc/board.d/02_network | 6 +- .../etc/hotplug.d/firmware/10-ath9k-eeprom | 5 + .../ar7370_wd_mynet-wifi-rangeextender.dts | 174 ++++++++++++++++++ target/linux/ath79/image/generic.mk | 28 +++ 5 files changed, 219 insertions(+), 1 deletion(-) create mode 100644 target/linux/ath79/dts/ar7370_wd_mynet-wifi-rangeextender.dts