ipq806x: add support for NEC Aterm WG2600HP
authorINAGAKI Hiroshi <musashino.open@gmail.com>
Thu, 17 May 2018 07:06:02 +0000 (16:06 +0900)
committerMathias Kresin <dev@kresin.me>
Tue, 19 Jun 2018 20:44:27 +0000 (22:44 +0200)
NEC Aterm WG2600HP is a 2.4/5 GHz band 11ac router, based on Qualcomm
IPQ8064.

Specification:

- IPQ8064 (384 - 1,400 MHz)
- 512 MB of RAM
- 32 MB of Flash (SPI)
- 4T4R 2.4/5 GHz
- 5x 10/100/1000 Mbps Ethernet
- 12x LEDs, 4x keys
- 1x USB 3.0 Type-A
- UART header on PCB
  - RX, TX, NC, GND, Vcc from power connector side
  - baudrate: 115200 bps

Flash instruction using initramfs image:
1. Connect serial cable to UART header
2. Connect power cable and turn on the router
3. When the "Press the [f] key and hit [enter] to enter failsafe mode"
message is displayed on the console, press the "f" key and Enter key
sequentially to enter the failsafe mode
4. create fw_env.config file with following contents on failsafe mode:
  /dev/mtd9 0x0 0x10000 0x10000
5. Execute following commands to add and change the environment
variables of U-Boot
  fw_setenv ipaddr "192.168.0.1"
  fw_setenv serverip "192.168.0.2"
  fw_setenv autostart "yes"
  fw_setenv bootcmd "tftpboot 0x44000000 wg2600hp-initramfs.bin;
  bootipq"
6. Set the IP address of the computer to 192.168.0.2, connect to the LAN
port of WG2600HP, and start the TFTP server on the computer
7. Rename OpenWrt initramfs image for WG2600HP to
"wg2600hp-initramfs.bin" and place it in the TFTP directory
8. Remove power cable from WG2600HP, reconnect it and restart WG2600HP
9. WG2600HP downloads initramfs image from TFTP server on the computer,
loads it and boot with initramfs image
10. On the initramfs image, execute "mtd erase firmware" to erase stock
firmware and execute sysupgrade with the sysupgrade image
11. Wait ~180 seconds to complete flashing

Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com>
target/linux/ipq806x/base-files/etc/board.d/01_leds
target/linux/ipq806x/base-files/etc/board.d/02_network
target/linux/ipq806x/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
target/linux/ipq806x/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
target/linux/ipq806x/base-files/lib/upgrade/platform.sh
target/linux/ipq806x/config-4.14
target/linux/ipq806x/files-4.14/arch/arm/boot/dts/qcom-ipq8064-wg2600hp.dts [new file with mode: 0644]
target/linux/ipq806x/image/Makefile
target/linux/ipq806x/patches-4.14/0069-arm-boot-add-dts-files.patch

index a8d9573..fea4d7c 100755 (executable)
@@ -15,6 +15,11 @@ compex,wpq864)
        ucidef_set_led_usbport "usb" "USB" "wpq864:green:usb" "usb1-port1" "usb2-port1"
        ucidef_set_led_usbport "pcie-usb" "PCIe USB" "wpq864:green:usb-pcie" "usb3-port1"
        ;;
+nec,wg2600hp)
+       ucidef_set_led_wlan "wlan2g" "WLAN2G" "${boardname}:green:wlan2g" "phy1tpt"
+       ucidef_set_led_wlan "wlan5g" "WLAN5G" "${boardname}:green:wlan5g" "phy0tpt"
+       ucidef_set_led_switch "wan" "WAN" "${boardname}:green:active" "switch0" "0x1e"
+       ;;
 netgear,d7800 |\
 netgear,r7500 |\
 netgear,r7500v2 |\
index 9d8af44..f5daf62 100755 (executable)
@@ -29,6 +29,10 @@ linksys,ea8500)
        ucidef_set_interface_macaddr "lan" "$hw_mac_addr"
        ucidef_set_interface_macaddr "wan" "$hw_mac_addr"
        ;;
+nec,wg2600hp)
+       ucidef_add_switch "switch0" \
+               "2:lan" "3:lan" "4:lan" "5:lan" "6@eth1" "1:wan" "0@eth0"
+       ;;
 qcom,ipq8064-db149)
        ucidef_set_interface_lan "eth1 eth2 eth3"
        ucidef_add_switch "switch0" \
index ed99bd5..fa49c25 100644 (file)
@@ -60,6 +60,7 @@ case "$FIRMWARE" in
                ath10kcal_extract "radio" 4096 12064
 #              ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_binary default-mac 8) -1)
                ;;
+       nec,wg2600hp |\
        tplink,vr2600v)
                ath10kcal_extract "ART" 4096 12064
                ;;
@@ -83,6 +84,7 @@ case "$FIRMWARE" in
                ath10kcal_extract "radio" 20480 12064
 #              ath10kcal_patch_mac $(macaddr_add $(mtd_get_mac_binary default-mac 8) -2)
                ;;
+       nec,wg2600hp |\
        tplink,vr2600v)
                ath10kcal_extract "ART" 20480 12064
                ;;
index 7e31c38..afa425f 100644 (file)
@@ -15,6 +15,9 @@ case "$board" in
        linksys,ea8500)
                echo $(macaddr_add $(mtd_get_mac_ascii devinfo hw_mac_addr) $(($PHYNBR + 1)) ) > /sys${DEVPATH}/macaddress
                ;;
+       nec,wg2600hp)
+               echo $(macaddr_add $(mtd_get_mac_binary PRODUCTDATA 12) $((1 - $PHYNBR)) ) > /sys${DEVPATH}/macaddress
+               ;;
        netgear,d7800 |\
        netgear,r7500v2 |\
        netgear,r7800)
index 4f230ea..b41bea1 100644 (file)
@@ -32,6 +32,7 @@ platform_do_upgrade() {
                MTD_CONFIG_ARGS="-s 0x200000"
                default_do_upgrade "$ARGV"
                ;;
+       nec,wg2600hp |\
        *)
                default_do_upgrade "$ARGV"
                ;;
index d64e406..fda8f52 100644 (file)
@@ -309,6 +309,7 @@ CONFIG_MTD_QCOM_SMEM_PARTS=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_SPLIT_FIRMWARE=y
 CONFIG_MTD_SPLIT_FIT_FW=y
+CONFIG_MTD_SPLIT_UIMAGE_FW=y
 CONFIG_MTD_UBI=y
 CONFIG_MTD_UBI_BEB_LIMIT=20
 CONFIG_MTD_UBI_BLOCK=y
diff --git a/target/linux/ipq806x/files-4.14/arch/arm/boot/dts/qcom-ipq8064-wg2600hp.dts b/target/linux/ipq806x/files-4.14/arch/arm/boot/dts/qcom-ipq8064-wg2600hp.dts
new file mode 100644 (file)
index 0000000..b643014
--- /dev/null
@@ -0,0 +1,448 @@
+#include "qcom-ipq8064-v2.0.dtsi"
+
+#include <dt-bindings/input/input.h>
+
+/ {
+       model = "NEC Aterm WG2600HP";
+       compatible = "nec,wg2600hp", "qcom,ipq8064";
+
+       memory@0 {
+               reg = <0x42000000 0x1e000000>;
+               device_type = "memory";
+       };
+
+       reserved-memory {
+               #address-cells = <1>;
+               #size-cells = <1>;
+               ranges;
+               rsvd@41200000 {
+                       reg = <0x41200000 0x300000>;
+                       no-map;
+               };
+       };
+
+       aliases {
+               serial0 = &gsbi4_serial;
+               mdio-gpio0 = &mdio0;
+
+               led-boot = &power_green;
+               led-failsafe = &power_green;
+               led-running = &power_green;
+               led-upgrade = &power_green;
+       };
+
+       chosen {
+               linux,stdout-path = "serial0:115200n8";
+       };
+
+       soc {
+               pinmux@800000 {
+                       button_pins: button_pins {
+                               mux {
+                                       pins = "gpio16", "gpio54", "gpio24", "gpio25";
+                                       function = "gpio";
+                                       drive-strength = <2>;
+                                       bias-pull-up;
+                               };
+                       };
+
+                       i2c4_pins: i2c4_pinmux {
+                               mux {
+                                       pins = "gpio12", "gpio13";
+                                       function = "gsbi4";
+                                       drive-strength = <12>;
+                                       bias-disable;
+                               };
+                       };
+
+                       led_pins: led_pins {
+                               mux {
+                                       pins = "gpio6", "gpio7", "gpio8", "gpio9", "gpio14",
+                                               "gpio15", "gpio55", "gpio56", "gpio57", "gpio58",
+                                               "gpio64", "gpio65";
+                                       function = "gpio";
+                                       drive-strength = <2>;
+                                       bias-pull-down;
+                               };
+                       };
+
+                       spi_pins: spi_pins {
+                               mux {
+                                       pins = "gpio18", "gpio19", "gpio21";
+                                       function = "gsbi5";
+                                       bias-pull-down;
+                               };
+
+                               data {
+                                       pins = "gpio18", "gpio19";
+                                       drive-strength = <10>;
+                               };
+
+                               cs {
+                                       pins = "gpio20";
+                                       drive-strength = <10>;
+                                       bias-pull-up;
+                               };
+
+                               clk {
+                                       pins = "gpio21";
+                                       drive-strength = <12>;
+                               };
+                       };
+
+                       mdio0_pins: mdio0_pins {
+                               mux {
+                                       pins = "gpio0", "gpio1";
+                                       function = "gpio";
+                                       drive-strength = <8>;
+                                       bias-disable;
+                               };
+                       };
+
+                       rgmii2_pins: rgmii2_pins {
+                               mux {
+                                       pins = "gpio27", "gpio28", "gpio29", "gpio30", "gpio31", "gpio32",
+                                              "gpio51", "gpio52", "gpio59", "gpio60", "gpio61", "gpio62" ;
+                                       function = "rgmii2";
+                                       drive-strength = <8>;
+                                       bias-disable;
+                               };
+                       };
+
+                       usb_pwr_en_pins: usb_pwr_en_pins {
+                               mux {
+                                       pins = "gpio22";
+                                       function = "gpio";
+                                       drive-strength = <2>;
+                                       bias-pull-down;
+                                       output-high;
+                               };
+                       };
+               };
+
+               gsbi@16300000 {
+                       qcom,mode = <GSBI_PROT_I2C_UART>;
+                       status = "ok";
+                       serial@16340000 {
+                               status = "ok";
+                       };
+                       /*
+                        * The i2c device on gsbi4 should not be enabled.
+                        * On ipq806x designs gsbi4 i2c is meant for exclusive
+                        * RPM usage. Turning this on in kernel manifests as
+                        * i2c failure for the RPM.
+                        */
+               };
+
+               gsbi5: gsbi@1a200000 {
+                       qcom,mode = <GSBI_PROT_SPI>;
+                       status = "ok";
+
+                       spi4: spi@1a280000 {
+                               status = "ok";
+
+                               pinctrl-0 = <&spi_pins>;
+                               pinctrl-names = "default";
+
+                               cs-gpios = <&qcom_pinmux 20 GPIO_ACTIVE_HIGH>;
+
+                               flash: m25p80@0 {
+                                       compatible = "jedec,spi-nor";
+                                       #address-cells = <1>;
+                                       #size-cells = <1>;
+                                       spi-max-frequency = <50000000>;
+                                       reg = <0>;
+
+                                       SBL1@0 {
+                                               label = "SBL1";
+                                               reg = <0x0 0x20000>;
+                                               read-only;
+                                       };
+
+                                       MIBIB@20000 {
+                                               label = "MIBIB";
+                                               reg = <0x20000 0x20000>;
+                                               read-only;
+                                       };
+
+                                       SBL2@40000 {
+                                               label = "SBL2";
+                                               reg = <0x40000 0x40000>;
+                                               read-only;
+                                       };
+
+                                       SBL3@80000 {
+                                               label = "SBL3";
+                                               reg = <0x80000 0x80000>;
+                                               read-only;
+                                       };
+
+                                       DDRCONFIG@100000 {
+                                               label = "DDRCONFIG";
+                                               reg = <0x100000 0x10000>;
+                                               read-only;
+                                       };
+
+                                       SSD@110000 {
+                                               label = "SSD";
+                                               reg = <0x110000 0x10000>;
+                                               read-only;
+                                       };
+
+                                       TZ@120000 {
+                                               label = "TZ";
+                                               reg = <0x120000 0x80000>;
+                                               read-only;
+                                       };
+
+                                       RPM@1a0000 {
+                                               label = "RPM";
+                                               reg = <0x1a0000 0x80000>;
+                                               read-only;
+                                       };
+
+                                       APPSBL@220000 {
+                                               label = "APPSBL";
+                                               reg = <0x220000 0x80000>;
+                                               read-only;
+                                       };
+
+                                       APPSBLENV@2a0000 {
+                                               label = "APPSBLENV";
+                                               reg = <0x2a0000 0x10000>;
+                                       };
+
+                                       PRODUCTDATA: PRODUCTDATA@2b0000 {
+                                               label = "PRODUCTDATA";
+                                               reg = <0x2b0000 0x30000>;
+                                               read-only;
+                                       };
+
+                                       ART@2e0000 {
+                                               label = "ART";
+                                               reg = <0x2e0000 0x40000>;
+                                               read-only;
+                                       };
+
+                                       TP@320000 {
+                                               label = "TP";
+                                               reg = <0x320000 0x40000>;
+                                               read-only;
+                                       };
+
+                                       TINY@360000 {
+                                               label = "TINY";
+                                               reg = <0x360000 0x500000>;
+                                               read-only;
+                                       };
+
+                                       firmware@860000 {
+                                               label = "firmware";
+                                               reg = <0x860000 0x17a0000>;
+                                       };
+                               };
+                       };
+               };
+
+               phy@100f8800 {          /* USB3 port 1 HS phy */
+                       status = "ok";
+               };
+
+               phy@100f8830 {          /* USB3 port 1 SS phy */
+                       status = "ok";
+               };
+
+               phy@110f8800 {          /* USB3 port 0 HS phy */
+                       status = "ok";
+               };
+
+               phy@110f8830 {          /* USB3 port 0 SS phy */
+                       status = "ok";
+               };
+
+               usb30@0 {
+                       status = "ok";
+
+                       pinctrl-0 = <&usb_pwr_en_pins>;
+                       pinctrl-names = "default";
+               };
+
+               usb30@1 {
+                       status = "ok";
+               };
+
+               pcie0: pci@1b500000 {
+                       status = "ok";
+                       reset-gpio = <&qcom_pinmux 3 GPIO_ACTIVE_HIGH>;
+                       pinctrl-0 = <&pcie0_pins>;
+                       pinctrl-names = "default";
+               };
+
+               pcie1: pci@1b700000 {
+                       status = "ok";
+                       reset-gpio = <&qcom_pinmux 48 GPIO_ACTIVE_HIGH>;
+                       pinctrl-0 = <&pcie1_pins>;
+                       pinctrl-names = "default";
+                       force_gen1 = <1>;
+               };
+
+               mdio0: mdio {
+                       compatible = "virtual,mdio-gpio";
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+                       gpios = <&qcom_pinmux 1 GPIO_ACTIVE_HIGH &qcom_pinmux 0 GPIO_ACTIVE_HIGH>;
+                       pinctrl-0 = <&mdio0_pins>;
+                       pinctrl-names = "default";
+
+                       phy0: ethernet-phy@0 {
+                               device_type = "ethernet-phy";
+                               reg = <0>;
+                               qca,ar8327-initvals = <
+                                       0x00004 0x7600000   /* PAD0_MODE */
+                                       0x00008 0x1000000   /* PAD5_MODE */
+                                       0x0000c 0x80        /* PAD6_MODE */
+                                       0x000e4 0x6a545     /* MAC_POWER_SEL */
+                                       0x000e0 0xc74164de  /* SGMII_CTRL */
+                                       0x0007c 0x4e        /* PORT0_STATUS */
+                                       0x00094 0x4e        /* PORT6_STATUS */
+                                       >;
+                       };
+
+                       phy4: ethernet-phy@4 {
+                               device_type = "ethernet-phy";
+                               reg = <4>;
+                       };
+               };
+
+               gmac1: ethernet@37200000 {
+                       status = "ok";
+                       phy-mode = "rgmii";
+                       qcom,id = <1>;
+
+                       pinctrl-0 = <&rgmii2_pins>;
+                       pinctrl-names = "default";
+
+                       mtd-mac-address = <&PRODUCTDATA 6>;
+
+                       fixed-link {
+                               speed = <1000>;
+                               full-duplex;
+                       };
+               };
+
+               gmac2: ethernet@37400000 {
+                       status = "ok";
+                       phy-mode = "sgmii";
+                       qcom,id = <2>;
+
+                       mtd-mac-address = <&PRODUCTDATA 0>;
+
+                       fixed-link {
+                               speed = <1000>;
+                               full-duplex;
+                       };
+               };
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+               pinctrl-0 = <&button_pins>;
+               pinctrl-names = "default";
+
+               wps {
+                       label = "wps";
+                       gpios = <&qcom_pinmux 16 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_WPS_BUTTON>;
+               };
+
+               reset {
+                       label = "reset";
+                       gpios = <&qcom_pinmux 54 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+               };
+
+               bridge {
+                       label = "bridge";
+                       gpios = <&qcom_pinmux 24 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_0>;
+                       linux,input-type = <EV_SW>;
+               };
+
+               converter {
+                       label = "converter";
+                       gpios = <&qcom_pinmux 25 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_0>;
+                       linux,input-type = <EV_SW>;
+               };
+       };
+
+       gpio-leds {
+               compatible = "gpio-leds";
+               pinctrl-0 = <&led_pins>;
+               pinctrl-names = "default";
+
+               converter_green {
+                       label = "wg2600hp:green:converter";
+                       gpios = <&qcom_pinmux 6 GPIO_ACTIVE_HIGH>;
+               };
+
+               power_red {
+                       label = "wg2600hp:red:power";
+                       gpios = <&qcom_pinmux 7 GPIO_ACTIVE_HIGH>;
+               };
+
+               active_green {
+                       label = "wg2600hp:green:active";
+                       gpios = <&qcom_pinmux 8 GPIO_ACTIVE_HIGH>;
+               };
+
+               active_red {
+                       label = "wg2600hp:red:active";
+                       gpios = <&qcom_pinmux 9 GPIO_ACTIVE_HIGH>;
+               };
+
+               power_green: power_green {
+                       label = "wg2600hp:green:power";
+                       gpios = <&qcom_pinmux 14 GPIO_ACTIVE_HIGH>;
+               };
+
+               converter_red {
+                       label = "wg2600hp:red:converter";
+                       gpios = <&qcom_pinmux 15 GPIO_ACTIVE_HIGH>;
+               };
+
+               wlan2g_green {
+                       label = "wg2600hp:green:wlan2g";
+                       gpios = <&qcom_pinmux 55 GPIO_ACTIVE_HIGH>;
+               };
+
+               wlan2g_red {
+                       label = "wg2600hp:red:wlan2g";
+                       gpios = <&qcom_pinmux 56 GPIO_ACTIVE_HIGH>;
+               };
+
+               wlan5g_green {
+                       label = "wg2600hp:green:wlan5g";
+                       gpios = <&qcom_pinmux 57 GPIO_ACTIVE_HIGH>;
+               };
+
+               wlan5g_red {
+                       label = "wg2600hp:red:wlan5g";
+                       gpios = <&qcom_pinmux 58 GPIO_ACTIVE_HIGH>;
+               };
+
+               tv_green {
+                       label = "wg2600hp:green:tv";
+                       gpios = <&qcom_pinmux 64 GPIO_ACTIVE_HIGH>;
+               };
+
+               tv_red {
+                       label = "wg2600hp:red:tv";
+                       gpios = <&qcom_pinmux 65 GPIO_ACTIVE_HIGH>;
+               };
+       };
+};
+
+&adm_dma {
+       status = "ok";
+};
index ac57991..2902af3 100644 (file)
@@ -101,6 +101,18 @@ define Device/linksys_ea8500
 endef
 TARGET_DEVICES += linksys_ea8500
 
+define Device/nec_wg2600hp
+       $(call Device/LegacyImage)
+       DEVICE_DTS := qcom-ipq8064-wg2600hp
+       BLOCKSIZE := 64k
+       BOARD_NAME := wg2600hp
+       DEVICE_TITLE := NEC Aterm WG2600HP
+       IMAGES := sysupgrade.bin
+       IMAGE/sysupgrade.bin := append-kernel | append-rootfs | pad-rootfs | append-metadata
+       DEVICE_PACKAGES := ath10k-firmware-qca99x0
+endef
+TARGET_DEVICES += nec_wg2600hp
+
 define Device/netgear_d7800
        $(call Device/DniImage)
        DEVICE_DTS := qcom-ipq8064-d7800
index fead994..59f37a7 100644 (file)
@@ -10,19 +10,20 @@ Signed-off-by: John Crispin <john@phrozen.org>
 
 --- a/arch/arm/boot/dts/Makefile
 +++ b/arch/arm/boot/dts/Makefile
-@@ -699,6 +699,15 @@ dtb-$(CONFIG_ARCH_QCOM) += \
-       qcom-apq8084-mtp.dtb \
-       qcom-ipq4019-ap.dk01.1-c1.dtb \
-       qcom-ipq8064-ap148.dtb \
+@@ -699,6 +699,16 @@ dtb-$(CONFIG_ARCH_QCOM) += \
+       qcom-apq8084-mtp.dtb \
+       qcom-ipq4019-ap.dk01.1-c1.dtb \
+       qcom-ipq8064-ap148.dtb \
 +      qcom-ipq8064-c2600.dtb \
 +      qcom-ipq8064-d7800.dtb \
 +      qcom-ipq8064-db149.dtb \
 +      qcom-ipq8064-ea8500.dtb \
 +      qcom-ipq8064-r7500.dtb \
 +      qcom-ipq8064-r7500v2.dtb \
++      qcom-ipq8064-wg2600hp.dtb \
 +      qcom-ipq8064-wpq864.dtb \
 +      qcom-ipq8065-nbg6817.dtb \
 +      qcom-ipq8065-r7800.dtb \
-       qcom-msm8660-surf.dtb \
-       qcom-msm8960-cdp.dtb \
-       qcom-msm8974-lge-nexus5-hammerhead.dtb \
+       qcom-msm8660-surf.dtb \
+       qcom-msm8960-cdp.dtb \
+       qcom-msm8974-lge-nexus5-hammerhead.dtb \