apm821xx: add support for the Netgear WNDAP620 and WNDAP660

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@gmail.com>
This commit is contained in:
Christian Lamparter 2018-10-17 22:37:38 +02:00 committed by John Crispin
parent a9839fe638
commit d82d84694e
10 changed files with 374 additions and 1 deletions

View file

@ -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

View file

@ -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"

View file

@ -13,7 +13,12 @@ wd,mybooklive|\
wd,mybooklive-duo)
ucidef_set_interface_lan "eth0"
;;
netgear,wndap620)
ucidef_add_switch "switch0" "2:lan" "5@eth0"
;;
netgear,wndap660)
ucidef_add_switch "switch0" "1:lan:2" "2:lan:1" "5@eth0"
;;
meraki,mx60|\
netgear,wndr4700)
ucidef_add_switch "switch0" \

View file

@ -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

View file

@ -26,6 +26,8 @@ platform_do_upgrade() {
;;
meraki,mr24|\
meraki,mx60|\
netgear,wndap620|\
netgear,wndap660|\
netgear,wndr4700)
nand_do_upgrade "$1"
;;

View file

@ -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>;
};
};

View file

@ -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>;
};
};

View file

@ -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@ef600300";
};
};
&CRYPTO {
status = "okay";
};
&PKA {
status = "okay";
};
&TRNG {
status = "okay";
};
&EBC0 {
ndfc@1,0 {
status = "okay";
/* 32 MiB SLC NAND Flash */
nand {
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "u-boot";
reg = <0x00000000 0x00100000>;
read-only;
};
partition@100000 {
label = "u-boot-env";
reg = <0x00100000 0x00010000>;
read-only;
};
partition@110000,0 {
label = "firmware";
reg = <0x00110000 0x01ac0000>;
};
partition@110000,1 {
/*
* The u-boot bootloader will look at this
* offset (0x110000) for an uImage binary.
*/
label = "kernel";
reg = <0x00110000 0x003f0000>;
};
partition@500000 {
label = "ubi";
reg = <0x00500000 0x016d0000>;
};
partition@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@1be0000 {
label = "var";
reg = <0x01be0000 0x0400000>;
read-only;
};
partition@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@52 {
compatible = "atmel,24c04";
reg = <0x52>;
pagesize = <16>;
read-only;
};
};

View file

@ -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 \

View file

@ -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