Răsfoiți Sursa

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:
<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 <[email protected]>
Christian Lamparter 7 ani în urmă
părinte
comite
745dee11ac

+ 8 - 0
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

+ 5 - 1
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

+ 4 - 0
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"
 		;;

+ 174 - 0
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 <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,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";
+};

+ 30 - 0
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 '' > [email protected]
+	-$(STAGING_DIR_HOST)/bin/trx -o [email protected] \
+		-f $(IMAGE_KERNEL) -F [email protected] \
+		-x 32 -a 0x10000 -x -32 -f $@
+	-mv "[email protected]" "$@"
+	-rm [email protected]
+endef
+
+define Build/addpattern
+	-$(STAGING_DIR_HOST)/bin/addpattern -B $(ADDPATTERN_ID) \
+		-v v$(ADDPATTERN_VERSION) -i $@ -o [email protected]
+	-mv "[email protected]" "$@"
+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