diff mbox series

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

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

Commit Message

Christian Lamparter Aug. 17, 2018, 12:06 p.m. UTC
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

Comments

Mathias Kresin Aug. 17, 2018, 9:07 p.m. UTC | #1
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>;
> +	};
> +};
> +
> +&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
>
Christian Lamparter Aug. 17, 2018, 11:05 p.m. UTC | #2
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>;
> > +	};
> > +};
> > +
> > +&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)
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 mbox series

Patch

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>;
+	};
+};
+
+&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
+
+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