[OpenWrt-Devel] [PATCH v1 7/8] apm821xx: add support for the Netgear WNDAP620 and WNDAP660

Christian Lamparter chunkeey at gmail.com
Wed Oct 17 16:37:38 EDT 2018


This patch adds support for the Netgear WNDAP620 and WNDAP660,
they are similar devices, but due to the LAN LED configuration,
the switch setup and WIFI configuration each gets a different
device target.

Hardware Highlights WNDAP620:
CPU: AMCC PowerPC APM82181 at 1000 MHz
DRAM:  128 MB, 2 x 64 MiB DDR2 Hynix H5PS5162GF
CPU: AMCC PowerPC APM82181 at 1000 MHz
FLASH: 32 MiB, NAND SLC, Hynix HY27US08561A
Ethernet: RealTek RTL8363SB 2x2-Port Switch PHY - Only 1 GBit Port (POE)
Wifi: Atheros AR9380 minipcie - Dual-Band - 3x3:3
Serial: console port with RJ45 Interface (9600-N-8-1)
LEDS: Power, LAN-Activity, dual color LAN-Linkspeed, 2.4GHz, 5GHz LEDs
Button: Soft Reset Button
Antennae: 3 internal dual-band antennae + 3 x RSMA for external antennaes

Hardware Highlights WNDAP660:
CPU: AMCC PowerPC APM82181 at 1000 MHz + 2 Heatsinks
DRAM:  256 MB, 2 x 128 MiB DDR2
FLASH: 32 MiB, NAND SLC, Hynix HY27US08561A
Ethernet: RealTek RTL8363SB 2x2-Port Switch PHY (POE)
Wifi1: Atheros AR9380 minipcie - Dual-Band - 3x3:3
Wifi2: Atheros AR9380 minipcie - Dual-Band - 3x3:3
Serial: console port with RJ45 Interface (9600-N-8-1)
LEDS: Power, LAN-Activity, 2x dual color LAN-Linkspeed, 2.4GHz, 5GHz LEDs
Button: Soft Reset Button
Antennae: 6 internal dual-band antennae + 3 x RSMA for external antennaes

Flashing requirements:

 - needs a tftp server at 192.168.1.10/serverip.
 - special 8P8C(aka RJ45)<->D-SUB9 Console Cable
   ("Cisco Console Cable"). Note: Both WNDAP6x0 have
   a MAX3232 transceivers, hence no need for any separate
   CMOS/TTL level shifters.

External Antenna:
The antennae mux is controlled by GPIO 11 and GPIO14. Valid Configurations:
 = Config# = | = GPIO 11 = | = GPIO 14 = |  ===== Description =====
      1.     |   1 / High  |  0 / Low    | Use the internal antennae (default)
      2.     |   0 / Low   |  1 / High   | Use the external antennae

The external antennaes are only meant for the 2.4 GHz band.

One-way Flashing instructions via u-boot:

 0. connect the serial cable to the RJ45 Console Port
    Note: This requires a poper RS232 and not a TTL/USB adaptor.

 1. power up the AP and interrupt the u-boot process at

    'Hit any key to stop autoboot'

 2. setup serverip and ipaddr env settings
    Enter the following commands into the u-boot shell
    # setenv ipaddr 192.168.1.1
    # setenv serverip 192.168.1.10

 3. download the factory.img image to the AP
    Enter the following commands into the u-boot shell

    # tftp ${kernel_addr_r} openwrt-apm821xx-nand-netgear_wndap660-squashfs-factory.img

 4. verfiy image integrity
    Enter the following commands into the u-boot shell

    # crc32 $fileaddr $filesize

    If the calculated crc32 checksum does not match, go back to step 3.

 5. flash the image
    Enter the following commands into the u-boot shell

    # nand erase 0x110000 0x1bd0000
    # nand write ${kernel_addr_r} 0x110000 ${filesize}

 6. setup uboot environment
    Enter the following commands into the u-boot shell

    # setenv bootargs
    # setenv fileaddr
    # setenv filesize
    # setenv addroot 'setenv bootargs ${bootargs} root=/dev/ubiblock0_0'
    # setenv owrt_boot 'nboot ${kernel_addr_r} nand0 0x110000; run addroot; run addtty; bootm ${kernel_addr_r}'
    # setenv bootcmd 'run owrt_boot'
    # saveenv

 7. boot
    # run bootcmd

Booting initramfs instructions via u-boot:

 Follow steps 0 - 2 from above.

 3. boot initramfs
    Enter the following commands into the u-boot shell

    # tftp ${kernel_addr_r} openwrt-apm821xx-nand-netgear_wndap660-initramfs-kernel.bin
    # run addtty
    # bootm ${kernel_addr_r}

Signed-off-by: Christian Lamparter <chunkeey at gmail.com>
---
 package/boot/uboot-envtools/files/apm821xx    |   4 +
 .../apm821xx/base-files/etc/board.d/01_leds   |  16 ++
 .../base-files/etc/board.d/02_network         |   7 +-
 .../etc/hotplug.d/ieee80211/10_fix_wifi_mac   |  21 ++
 .../base-files/lib/upgrade/platform.sh        |   2 +
 .../linux/apm821xx/dts/netgear-wndap620.dts   |  28 +++
 .../linux/apm821xx/dts/netgear-wndap660.dts   |  38 +++
 .../linux/apm821xx/dts/netgear-wndap6x0.dtsi  | 227 ++++++++++++++++++
 target/linux/apm821xx/image/Makefile          |  29 +++
 target/linux/apm821xx/nand/config-default     |   3 +
 10 files changed, 374 insertions(+), 1 deletion(-)
 create mode 100644 target/linux/apm821xx/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
 create mode 100644 target/linux/apm821xx/dts/netgear-wndap620.dts
 create mode 100644 target/linux/apm821xx/dts/netgear-wndap660.dts
 create mode 100644 target/linux/apm821xx/dts/netgear-wndap6x0.dtsi

diff --git a/package/boot/uboot-envtools/files/apm821xx b/package/boot/uboot-envtools/files/apm821xx
index bf61e972de..6bcc3ad62f 100644
--- a/package/boot/uboot-envtools/files/apm821xx
+++ b/package/boot/uboot-envtools/files/apm821xx
@@ -17,6 +17,10 @@ meraki,mr24)
 meraki,mx60)
 	ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x20000" "4"
 	;;
+netgear,wndap620|\
+netgear,wndap660)
+	ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x4000" "0x4000" "4"
+	;;
 esac
 
 config_load ubootenv
diff --git a/target/linux/apm821xx/base-files/etc/board.d/01_leds b/target/linux/apm821xx/base-files/etc/board.d/01_leds
index 632d22a470..dd529b528d 100755
--- a/target/linux/apm821xx/base-files/etc/board.d/01_leds
+++ b/target/linux/apm821xx/base-files/etc/board.d/01_leds
@@ -23,6 +23,22 @@ meraki,mx60)
 	ucidef_set_led_switch "lan4" "LAN4" "mx60:green:lan4" "switch0" "0x02"
 	;;
 
+netgear,wndap620)
+	ucidef_set_led_switch "lan_act" "LAN (Activity)" "wndap6x0:green:activity" "switch0" "0x04" "0x0f" "rx tx"
+	ucidef_set_led_switch "lan_100" "LAN 100Mbps" "wndap620:amber:link100" "switch0" "0x04" "0x04" "link"
+	ucidef_set_led_switch "lan_1000" "LAN 1000Mbps" "wndap620:green:link1000" "switch0" "0x04" "0x08" "link"
+	;;
+
+netgear,wndap660)
+	ucidef_set_led_netdev "lan_act" "LAN (Activity)" "wndap6x0:green:activity" "eth0"
+	ucidef_set_led_switch "lan1_100" "LAN 100Mbps" "wndap660:amber:lan1-link100" "switch0" "0x04" "0x04" "link"
+	ucidef_set_led_switch "lan1_1000" "LAN 1000Mbps" "wndap660:green:lan1-link1000" "switch0" "0x04" "0x08" "link"
+	ucidef_set_led_switch "lan2_100" "LAN 100Mbps" "wndap660:amber:lan2-link100" "switch0" "0x02" "0x04" "link"
+	ucidef_set_led_switch "lan2_1000" "LAN 1000Mbps" "wndap660:green:lan2-link1000" "switch0" "0x02" "0x08" "link"
+	ucidef_set_led_wlan "wlan2g" "WLAN2G" "wndap6x0:green:wlan2g" "phy0tpt"
+	ucidef_set_led_wlan "wlan5g" "WLAN5G" "wndap6x0:green:wlan5g" "phy1tpt"
+	;;
+
 netgear,wndr4700)
 	ucidef_set_led_switch "wan_green" "WAN (green)" "wndr4700:green:wan" "switch0" "0x20"
 	ucidef_set_led_netdev "wan_yellow" "WAN (yellow)" "wndr4700:yellow:wan" "eth0.2" "tx rx"
diff --git a/target/linux/apm821xx/base-files/etc/board.d/02_network b/target/linux/apm821xx/base-files/etc/board.d/02_network
index 6f4456e8a1..69bc038bd4 100755
--- a/target/linux/apm821xx/base-files/etc/board.d/02_network
+++ b/target/linux/apm821xx/base-files/etc/board.d/02_network
@@ -13,7 +13,12 @@ wd,mybooklive|\
 wd,mybooklive-duo)
 	ucidef_set_interface_lan "eth0"
 	;;
-
+netgear,wndap620)
+	ucidef_add_switch "switch0" "2:lan" "5 at eth0"
+	;;
+netgear,wndap660)
+	ucidef_add_switch "switch0" "1:lan:2" "2:lan:1" "5 at eth0"
+	;;
 meraki,mx60|\
 netgear,wndr4700)
 	ucidef_add_switch "switch0" \
diff --git a/target/linux/apm821xx/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/apm821xx/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
new file mode 100644
index 0000000000..597b5dcca6
--- /dev/null
+++ b/target/linux/apm821xx/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
@@ -0,0 +1,21 @@
+#!/bin/ash
+
+[ "$ACTION" == "add" ] || exit 0
+
+PHYNBR=${DEVPATH##*/phy}
+
+[ -n $PHYNBR ] || exit 0
+
+. /lib/functions.sh
+. /lib/functions/system.sh
+
+board=$(board_name)
+
+case "$board" in
+netgear,wndap620|\
+netgear,wndap660)
+	echo $(macaddr_add $(mtd_get_mac_ascii u-boot-env baseMAC) $(($PHYNBR + 1)) ) > /sys${DEVPATH}/macaddress
+	;;
+*)
+	;;
+esac
diff --git a/target/linux/apm821xx/base-files/lib/upgrade/platform.sh b/target/linux/apm821xx/base-files/lib/upgrade/platform.sh
index fa0aa38014..02c750130c 100755
--- a/target/linux/apm821xx/base-files/lib/upgrade/platform.sh
+++ b/target/linux/apm821xx/base-files/lib/upgrade/platform.sh
@@ -26,6 +26,8 @@ platform_do_upgrade() {
 		;;
 	meraki,mr24|\
 	meraki,mx60|\
+	netgear,wndap620|\
+	netgear,wndap660|\
 	netgear,wndr4700)
 		nand_do_upgrade "$1"
 		;;
diff --git a/target/linux/apm821xx/dts/netgear-wndap620.dts b/target/linux/apm821xx/dts/netgear-wndap620.dts
new file mode 100644
index 0000000000..afaf0616ba
--- /dev/null
+++ b/target/linux/apm821xx/dts/netgear-wndap620.dts
@@ -0,0 +1,28 @@
+/*
+ * Device Tree Source for Netgear WNDAP620
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without
+ * any warranty of any kind, whether express or implied.
+ */
+
+/dts-v1/;
+
+#include "netgear-wndap6x0.dtsi";
+
+/ {
+	model = "Netgear WNDAP620";
+	compatible = "netgear,wndap620", "apm,bluestone";
+};
+
+&LEDS {
+	link1000 {
+		label = "wndap620:green:link1000";
+		gpios = <&GPIO0 9 GPIO_ACTIVE_HIGH>;
+	};
+
+	link100 {
+		label = "wndap620:amber:link100";
+		gpios = <&GPIO0 10 GPIO_ACTIVE_HIGH>;
+	};
+};
diff --git a/target/linux/apm821xx/dts/netgear-wndap660.dts b/target/linux/apm821xx/dts/netgear-wndap660.dts
new file mode 100644
index 0000000000..3e5daac835
--- /dev/null
+++ b/target/linux/apm821xx/dts/netgear-wndap660.dts
@@ -0,0 +1,38 @@
+/*
+ * Device Tree Source for Netgear WNDAP660
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without
+ * any warranty of any kind, whether express or implied.
+ */
+
+/dts-v1/;
+
+#include "netgear-wndap6x0.dtsi"
+
+/ {
+	model = "Netgear WNDAP660";
+	compatible = "netgear,wndap660", "apm,bluestone";
+};
+
+&LEDS {
+	lan1-link1000 {
+		label = "wndap660:green:lan1-link1000";
+		gpios = <&GPIO0 22 GPIO_ACTIVE_HIGH>;
+	};
+
+	lan1-link100 {
+		label = "wndap660:amber:lan1-link100";
+		gpios = <&GPIO0 23 GPIO_ACTIVE_HIGH>;
+	};
+
+	lan2-link1000 {
+		label = "wndap660:green:lan2-link1000";
+		gpios = <&GPIO0 9 GPIO_ACTIVE_HIGH>;
+	};
+
+	lan2-link100 {
+		label = "wndap660:amber:lan2-link100";
+		gpios = <&GPIO0 10 GPIO_ACTIVE_HIGH>;
+	};
+};
diff --git a/target/linux/apm821xx/dts/netgear-wndap6x0.dtsi b/target/linux/apm821xx/dts/netgear-wndap6x0.dtsi
new file mode 100644
index 0000000000..a163b1d82d
--- /dev/null
+++ b/target/linux/apm821xx/dts/netgear-wndap6x0.dtsi
@@ -0,0 +1,227 @@
+/*
+ * Device Tree Source for Netgear WNDAP620 and WNDAP660
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2.  This program is licensed "as is" without
+ * any warranty of any kind, whether express or implied.
+ */
+
+#include "apm82181.dtsi"
+
+/ {
+	aliases {
+		serial0 = &UART0;
+		led-boot = &status;
+		led-failsafe = &failsafe;
+		led-running = &status;
+		led-upgrade = &status;
+	};
+
+	chosen {
+		stdout-path = "/plb/opb/serial at ef600300";
+	};
+};
+
+&CRYPTO {
+	status = "okay";
+};
+
+&PKA {
+	status = "okay";
+};
+
+&TRNG {
+	status = "okay";
+};
+
+&EBC0 {
+	ndfc at 1,0 {
+		status = "okay";
+		/* 32 MiB SLC NAND Flash */
+		nand {
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition at 0 {
+				label = "u-boot";
+				reg = <0x00000000 0x00100000>;
+				read-only;
+			};
+
+			partition at 100000 {
+				label = "u-boot-env";
+				reg = <0x00100000 0x00010000>;
+				read-only;
+			};
+
+			partition at 110000,0 {
+				label = "firmware";
+				reg = <0x00110000 0x01ac0000>;
+			};
+
+			partition at 110000,1 {
+				/*
+				 * The u-boot bootloader will look at this
+				 * offset (0x110000) for an uImage binary.
+				 */
+				label = "kernel";
+				reg = <0x00110000 0x003f0000>;
+			};
+
+			partition at 500000 {
+				label = "ubi";
+				reg = <0x00500000 0x016d0000>;
+			};
+
+			partition at 1bd0000 {
+				/*
+				 * original vendor device-tree - do not use or
+				 * overwrite. The original u-boot also supports
+				 * the gzipped legacy monolithic/Multi-File Image
+				 * format, which is a better choice.
+				 */
+				label = "device-tree";
+				reg = <0x01bd0000 0x0010000>;
+				read-only;
+			};
+
+			partition at 1be0000 {
+				label = "var";
+				reg = <0x01be0000 0x0400000>;
+				read-only;
+			};
+
+			partition at 1fe0000 {
+				label = "manudata";
+				reg   = <0x01fe0000 0x20000 >;
+				read-only;
+			};
+		};
+	};
+};
+
+&UART0 {
+	status = "okay";
+};
+
+&GPIO0 {
+	status = "okay";
+};
+
+&EMAC0 {
+	status = "okay";
+
+	fixed-link {
+		speed = <1000>;
+		full-duplex;
+		pause;
+		asym-pause;
+	};
+
+	mdio0: mdio {
+		#address-cells = <1>;
+		#size-cells = <0>;
+	};
+};
+
+&POB0 {
+	gpio_keys_polled {
+		compatible = "gpio-keys-polled";
+		#address-cells = <1>;
+		#size-cells = <0>;
+		#interrupt-cells = <2>;
+		poll-interval = <60>;   /* 3 * 20 = 60ms */
+		autorepeat;
+
+		reset {
+			label = "Reset Button";
+			gpios = <&GPIO0 16 GPIO_ACTIVE_HIGH>;
+			linux,code = <KEY_RESTART>;
+			interrupt-parent = <&UIC1>;
+			interrupts = <0x15 IRQ_TYPE_EDGE_FALLING>;
+		};
+	};
+
+	LEDS: gpio-leds {
+		compatible = "gpio-leds";
+
+		status: power {
+			label = "wndap6x0:green:power";
+			gpios = <&GPIO0 18 GPIO_ACTIVE_HIGH>;
+		};
+
+		failsafe: test {
+			label = "wndap6x0:amber:test";
+			gpios = <&GPIO0 17 GPIO_ACTIVE_HIGH>;
+			panic-indicator;
+		};
+
+		activity {
+			label = "wndap6x0:green:activity";
+			gpios = <&GPIO0 21 GPIO_ACTIVE_HIGH>;
+		};
+
+		wlan2g {
+			label = "wndap6x0:green:wlan2g";
+			gpios = <&GPIO0 19 GPIO_ACTIVE_HIGH>;
+		};
+
+		wlan5g {
+			label = "wndap6x0:green:wlan5g";
+			gpios = <&GPIO0 20 GPIO_ACTIVE_HIGH>;
+		};
+	};
+
+	gpio-export {
+		compatible = "gpio-export";
+
+		internal-antenna {
+			gpio-export,name = "wndap6x0:internal-antenna";
+			gpio-export,output = <1>;
+			gpios = <&GPIO0 11 GPIO_ACTIVE_HIGH>;
+		};
+
+		external-antenna {
+			gpio-export,name = "wndap6x0:external-antenna";
+			gpio-export,output = <0>;
+			gpios = <&GPIO0 14 GPIO_ACTIVE_HIGH>;
+		};
+
+		mains-powered {
+			/*
+			 * Input pin describing what powers the AP
+			 * 0/Low = PoE
+			 * 1/High = 12v mains powered
+			 */
+			gpio-export,name = "wndap620:mains-powered";
+			gpios = <&GPIO0 3 GPIO_ACTIVE_HIGH>;
+		};
+	};
+
+	rtl8367b {
+		compatible = "realtek,rtl8367b";
+		cpu_port = <5>;
+		realtek,extif0 = <1 2 1 1 1 1 1 1 2>;
+		mii-bus = <&mdio0>;
+	};
+};
+
+&PCIE0 {
+	status = "okay";
+};
+
+&MSI {
+	status = "okay";
+};
+
+&IIC0 {
+	status = "okay";
+
+	at24 at 52 {
+		compatible = "atmel,24c04";
+		reg = <0x52>;
+		pagesize = <16>;
+		read-only;
+	};
+};
+
diff --git a/target/linux/apm821xx/image/Makefile b/target/linux/apm821xx/image/Makefile
index 4a6ca9b633..4dec5fdf3c 100644
--- a/target/linux/apm821xx/image/Makefile
+++ b/target/linux/apm821xx/image/Makefile
@@ -152,6 +152,35 @@ define Build/MuImage-initramfs
 	rm -rf $@.fakerd
 endef
 
+define Device/netgear_wndap6x0
+  DEVICE_PACKAGES := kmod-eeprom-at24
+  SUBPAGESIZE := 256
+  PAGESIZE := 512
+  BLOCKSIZE := 16k
+  DTB_SIZE := 32768
+  IMAGE_SIZE := 27392k
+  IMAGES := sysupgrade.tar factory.img
+  KERNEL_SIZE := 4032k
+  KERNEL := dtb | kernel-bin | gzip | MuImage-initramfs gzip
+  IMAGE/sysupgrade.tar := sysupgrade-tar | append-metadata
+  IMAGE/factory.img := append-kernel | pad-to $$$$(KERNEL_SIZE) | append-ubi
+  UBINIZE_OPTS := -E 5
+endef
+
+define Device/netgear_wndap620
+  $(Device/netgear_wndap6x0)
+  DEVICE_TITLE := Netgear WNDAP620 - Premium Wireless-N
+  DEVICE_DTS := netgear-wndap620
+endef
+TARGET_DEVICES += netgear_wndap620
+
+define Device/netgear_wndap660
+  $(Device/netgear_wndap6x0)
+  DEVICE_TITLE := Netgear WNDAP660 - Dual Radio Dual Band Wireless-N
+  DEVICE_DTS := netgear-wndap660
+endef
+TARGET_DEVICES += netgear_wndap660
+
 define Device/netgear_wndr4700
   DEVICE_TITLE := Netgear Centria N900 WNDR4700/WNDR4720
   DEVICE_PACKAGES := badblocks block-mount e2fsprogs \
diff --git a/target/linux/apm821xx/nand/config-default b/target/linux/apm821xx/nand/config-default
index 7b66f27d30..1c05a83fb1 100644
--- a/target/linux/apm821xx/nand/config-default
+++ b/target/linux/apm821xx/nand/config-default
@@ -39,8 +39,11 @@ CONFIG_MTD_UBI_BLOCK=y
 CONFIG_MTD_UBI_WL_THRESHOLD=4096
 CONFIG_UBIFS_FS=y
 # CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
+CONFIG_RTL8366_SMI=y
+CONFIG_RTL8367B_PHY=y
 CONFIG_SENSORS_LM90=y
 CONFIG_SENSORS_TC654=y
 CONFIG_SWCONFIG=y
 CONFIG_SWCONFIG_LEDS=y
 CONFIG_WNDR4700=y
+
-- 
2.19.1


_______________________________________________
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