[OpenWrt-Devel] [PATCH v2 2/2] ath79: add support for WD My Net Wi-Fi Range Extender

Mathias Kresin dev at kresin.me
Fri Aug 17 17:07:23 EDT 2018


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 at 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 at 0 {
> +		compatible = /* "s25fl064k", */ "jedec,spi-nor";
> +		reg = <0>;
> +		spi-max-frequency = <25000000>;
> +
> +		partitions {
> +			compatible = "fixed-partitions";
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +
> +			uboot: partition at 0 {
> +				label = "u-boot";
> +				reg = <0x0 0x040000>;
> +				read-only;
> +			};
> +
> +			partition at 40000 {
> +				label = "firmware";
> +				reg = <0x40000 0x7a0000>;
> +				compatible = "cybertan,trx";
> +			};
> +
> +			nvram: partition at 7e0000 {
> +				label = "nvram";
> +				reg = <0x7e0000 0x10000>;
> +			};
> +
> +			art: partition at 7f0000 {
> +				label = "art";
> +				reg = <0x7f0000 0x10000>;
> +				read-only;
> +			};
> +		};
> +	};
> +};
> +
> +&pcie {
> +	status = "okay";
> +
> +	ath9k: wifi at 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 at 4 {
> +		reg = <4>;
> +	};
> +};
> +
> +&eth0 {
> +	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
> 


_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list