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 18:46:01 +0000 (20:46 +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 a8d9573faacf2e42bb8cfaa71aa755d4bbd642a7..fea4d7c8bb08e362b781a12ea9c320f006df82df 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 9d8af44855527dc40fb93d8d9a316ca068b8b190..f5daf626537f6d4602ffb1950e2504f91a3545c8 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 ed99bd5ea870e24072a07f13097c9449a7a20e91..fa49c250f0221560dd298eb7ab865cf3611bd901 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 7e31c3856112fb98cdccd1493c81ba52871840d2..afa425f07540a47a2b6b52b8e4e86616d35423cf 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 4f230eac8a8846aadd3d2013c24f0db02792dc04..b41bea1c29cfa8909d504b4b7871a8c03889af33 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 d64e40637e9fda31c9d24ccbfb60a05ed8982123..fda8f52d2c78aa71998f9410176439d7fcdf93bb 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 ac579919614b8c0c360a62bfe999ed2ff3360ab1..2902af3231a87592e9c040e7e7e1e4e1958a01a5 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 fead994c00a933d10968021f16ef36b47677d574..59f37a7027d15f11e79f9b9b7490c229a1a4f2ea 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 \