ar71xx: add support for TP-Link TL-WA850RE v2
authorPiotr Dymacz <pepe2k@gmail.com>
Fri, 10 Feb 2017 12:44:06 +0000 (13:44 +0100)
committerJohn Crispin <john@phrozen.org>
Tue, 14 Feb 2017 11:25:33 +0000 (12:25 +0100)
TP-Link TL-WA850RE v2 is a wall-plug N300 Wi-Fi range extender,
based on Qualcomm/Atheros QCA9533 v2.

Short specification:

- 550/391/195 MHz (CPU/DDR/AHB)
- 1x 10/100 Mbps Ethernet
- 32 MB of RAM (DDR1)
- 4 MB of FLASH
- 2T2R 2.4 GHz
- 2x internal antennas (embedded on PCB)
- 9x LED (all can be turned off with GPIO15), 2x button
- UART (J3) header on PCB

Flash instruction: use "factory" image directly in vendor GUI.

Warning: this device does not include any kind of recovery mechanism
in the bootloader and disassembling process is not trivial.

You can access vendor firmware over serial line using:
- login: root
- password: sohoadmin

Image was tested only in US version of the device, but should work
also with the same device version sold in other countries.

Available FLASH space, with LEDE trunk, is only 240 KB.

Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
14 files changed:
target/linux/ar71xx/base-files/etc/board.d/01_leds
target/linux/ar71xx/base-files/etc/board.d/02_network
target/linux/ar71xx/base-files/etc/diag.sh
target/linux/ar71xx/base-files/lib/ar71xx.sh
target/linux/ar71xx/base-files/lib/upgrade/platform.sh
target/linux/ar71xx/config-4.4
target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
target/linux/ar71xx/files/arch/mips/ath79/Makefile
target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wax50re.c
target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
target/linux/ar71xx/image/tp-link.mk
target/linux/ar71xx/mikrotik/config-default
target/linux/ar71xx/nand/config-default
tools/firmware-utils/src/tplink-safeloader.c

index 7493c6ccbafd36e2a7c33dce892a496f13a7fa52..ee67899d4f1bf66a0585816fcd1153b1068f803e 100755 (executable)
@@ -574,7 +574,8 @@ tl-wa801nd-v3)
        ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan" "eth1"
        ucidef_set_led_wlan "wlan" "WLAN" "tp-link:green:wlan" "phy0tpt"
        ;;
-tl-wa850re)
+tl-wa850re|\
+tl-wa850re-v2)
        ucidef_set_led_netdev "lan" "LAN" "tp-link:blue:lan" "eth0"
        ucidef_set_led_wlan "wlan" "WLAN" "tp-link:blue:wlan" "phy0tpt"
        ucidef_set_rssimon "wlan0" "200000" "1"
index 5f80feffdb6d66427a190a378d1545a54451a96b..d14fb428d81900af8c0515fcbb430e2f711b4ce8 100755 (executable)
@@ -108,6 +108,7 @@ ar71xx_setup_interfaces()
        tl-wa801nd-v2|\
        tl-wa830re-v2|\
        tl-wa850re|\
+       tl-wa850re-v2|\
        tl-wa901nd|\
        tl-wa901nd-v2|\
        tl-wa901nd-v3|\
index 82cf6c5a2e505fb73fa7436c5344980a08ee611e..a407a9979d4eb86946e5e6d516fdf2df2458098f 100644 (file)
@@ -341,7 +341,8 @@ get_status_led() {
        tl-wa750re)
                status_led="tp-link:orange:re"
                ;;
-       tl-wa850re)
+       tl-wa850re|\
+       tl-wa850re-v2)
                status_led="tp-link:blue:re"
                ;;
        tl-wa860re)
index b8ec3254092165bf7c0a7966716aafe5bc64a4fe..44dd9c4d49b491be6e2d45da3266110a16c22b49 100755 (executable)
@@ -998,6 +998,9 @@ ar71xx_board_detect() {
        *TL-WA850RE)
                name="tl-wa850re"
                ;;
+       *"TL-WA850RE v2")
+               name="tl-wa850re-v2"
+               ;;
        *TL-WA860RE)
                name="tl-wa860re"
                ;;
index 76273b30e021e8dc99d675b8babdf2c4974b0e7f..3b7db4699a997abdf6a2df41d874cee6751048cc 100755 (executable)
@@ -401,6 +401,7 @@ platform_check_image() {
        tl-wa801nd-v3|\
        tl-wa830re-v2|\
        tl-wa850re|\
+       tl-wa850re-v2|\
        tl-wa860re|\
        tl-wa901nd-v2|\
        tl-wa901nd-v3|\
index d3be103350b50486b10928ee0d2664ca686e7510..3902aeed5fc894660ca4fbd71b64636f5c16e4f3 100644 (file)
@@ -172,6 +172,7 @@ CONFIG_ATH79_MACH_TL_WA701ND_V2=y
 CONFIG_ATH79_MACH_TL_WA7210N_V2=y
 CONFIG_ATH79_MACH_TL_WA801ND_V3=y
 CONFIG_ATH79_MACH_TL_WA830RE_V2=y
+CONFIG_ATH79_MACH_TL_WA850RE_V2=y
 CONFIG_ATH79_MACH_TL_WA901ND=y
 CONFIG_ATH79_MACH_TL_WA901ND_V2=y
 CONFIG_ATH79_MACH_TL_WA901ND_V4=y
index 873befaec8fa973ae83a8fedfe023a4bec164fc5..14490e27f741434064ec0d47486f0609bf97b04c 100644 (file)
@@ -1395,6 +1395,15 @@ config ATH79_MACH_TL_WA830RE_V2
        select ATH79_DEV_USB
        select ATH79_DEV_WMAC
 
+config ATH79_MACH_TL_WA850RE_V2
+       bool "TP-LINK TL-WA850RE v2 support"
+       select SOC_QCA953X
+       select ATH79_DEV_ETH
+       select ATH79_DEV_GPIO_BUTTONS
+       select ATH79_DEV_LEDS_GPIO
+       select ATH79_DEV_M25P80
+       select ATH79_DEV_WMAC
+
 config ATH79_MACH_TL_WA901ND
        bool "TP-LINK TL-WA901ND/TL-WA7510N support"
        select SOC_AR724X
index 5baa77d3aa574858e89b40f53d7a8e01c39fe66f..aab8d6e8d07d9cc70e8291d4a9bfc1a7eb5540d7 100644 (file)
@@ -176,6 +176,7 @@ obj-$(CONFIG_ATH79_MACH_TL_WA701ND_V2)              += mach-tl-wa701nd-v2.o
 obj-$(CONFIG_ATH79_MACH_TL_WA7210N_V2)         += mach-tl-wa7210n-v2.o
 obj-$(CONFIG_ATH79_MACH_TL_WA801ND_V3)         += mach-tl-wa801nd-v3.o
 obj-$(CONFIG_ATH79_MACH_TL_WA830RE_V2)         += mach-tl-wa830re-v2.o
+obj-$(CONFIG_ATH79_MACH_TL_WA850RE_V2)         += mach-tl-wax50re.o
 obj-$(CONFIG_ATH79_MACH_TL_WA901ND)            += mach-tl-wa901nd.o
 obj-$(CONFIG_ATH79_MACH_TL_WA901ND_V2)         += mach-tl-wa901nd-v2.o
 obj-$(CONFIG_ATH79_MACH_TL_WA901ND_V4)         += mach-tl-wa901nd-v4.o
index 965b1cd3b8fbc376f5780b059a08a928c540da7d..d7a1af4e2c178a8a8e3c7e062579938afe0e22a6 100644 (file)
@@ -1,9 +1,13 @@
 /*
- *  TP-LINK TL-WA750RE v1/TL-WA801ND v2/TL-WA850RE v1/TL-WA901ND v3
- *  board support
+ *  Support for TP-Link boards:
+ *  - TL-WA750RE v1
+ *  - TL-WA801ND v2
+ *  - TL-WA850RE v1/v2
+ *  - TL-WA901ND v3
  *
  *  Copyright (C) 2013 Martijn Zilverschoon <thefriedzombie@gmail.com>
  *  Copyright (C) 2013 Jiri Pirko <jiri@resnulli.us>
+ *  Copyright (C) 2017 Piotr Dymacz <pepe2k@gmail.com>
  *
  *  This program is free software; you can redistribute it and/or modify it
  *  under the terms of the GNU General Public License version 2 as published
 #define TL_WAX50RE_GPIO_LED_SIGNAL4    3
 #define TL_WAX50RE_GPIO_LED_SIGNAL5    4
 
+#define TL_WA850RE_V2_GPIO_LED_LAN     14
+#define TL_WA850RE_V2_GPIO_LED_RE      12
+#define TL_WA850RE_V2_GPIO_LED_SIGNAL1 0
+#define TL_WA850RE_V2_GPIO_LED_SIGNAL2 1
+#define TL_WA850RE_V2_GPIO_LED_SIGNAL3 2
+#define TL_WA850RE_V2_GPIO_LED_SIGNAL4 3
+#define TL_WA850RE_V2_GPIO_LED_SIGNAL5 4
+#define TL_WA850RE_V2_GPIO_LED_WLAN    13
+
+#define TL_WA850RE_V2_GPIO_ENABLE_LEDS 15
+
 #define TL_WA860RE_GPIO_LED_WLAN_ORANGE        0
 #define TL_WA860RE_GPIO_LED_WLAN_GREEN 2
 #define TL_WA860RE_GPIO_LED_POWER_ORANGE       12
@@ -133,6 +148,42 @@ static struct gpio_led tl_wa850re_leds_gpio[] __initdata = {
        },
 };
 
+static struct gpio_led tl_wa850re_v2_leds_gpio[] __initdata = {
+       {
+               .name           = "tp-link:blue:lan",
+               .gpio           = TL_WA850RE_V2_GPIO_LED_LAN,
+               .active_low     = 1,
+       }, {
+               .name           = "tp-link:blue:re",
+               .gpio           = TL_WA850RE_V2_GPIO_LED_RE,
+               .active_low     = 1,
+       }, {
+               .name           = "tp-link:blue:signal1",
+               .gpio           = TL_WA850RE_V2_GPIO_LED_SIGNAL1,
+               .active_low     = 1,
+       }, {
+               .name           = "tp-link:blue:signal2",
+               .gpio           = TL_WA850RE_V2_GPIO_LED_SIGNAL2,
+               .active_low     = 1,
+       }, {
+               .name           = "tp-link:blue:signal3",
+               .gpio           = TL_WA850RE_V2_GPIO_LED_SIGNAL3,
+               .active_low     = 1,
+       }, {
+               .name           = "tp-link:blue:signal4",
+               .gpio           = TL_WA850RE_V2_GPIO_LED_SIGNAL4,
+               .active_low     = 1,
+       }, {
+               .name           = "tp-link:blue:signal5",
+               .gpio           = TL_WA850RE_V2_GPIO_LED_SIGNAL5,
+               .active_low     = 1,
+       }, {
+               .name           = "tp-link:blue:wlan",
+               .gpio           = TL_WA850RE_V2_GPIO_LED_WLAN,
+               .active_low     = 1,
+       },
+};
+
 static struct gpio_led tl_wa860re_leds_gpio[] __initdata = {
        {
                .name           = "tp-link:green:lan",
@@ -242,6 +293,30 @@ static void __init tl_ap123_setup(void)
        ath79_register_wmac(ee, mac);
 }
 
+static void __init tl_ap143_setup(void)
+{
+       u8 *mac = (u8 *) KSEG1ADDR(0x1f3c0008);
+       u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000);
+       u8 tmpmac[ETH_ALEN];
+
+       ath79_register_m25p80(NULL);
+
+       ath79_setup_ar933x_phy4_switch(false, false);
+
+       ath79_register_mdio(0, 0x0);
+
+       ath79_switch_data.phy4_mii_en = 1;
+       ath79_eth0_data.duplex = DUPLEX_FULL;
+       ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII;
+       ath79_eth0_data.phy_mask = BIT(4);
+       ath79_eth0_data.speed = SPEED_100;
+       ath79_init_mac(ath79_eth0_data.mac_addr, mac, -2);
+       ath79_register_eth(0);
+
+       ath79_init_mac(tmpmac, mac, 0);
+       ath79_register_wmac(ee, mac);
+}
+
 static void  __init tl_wa750re_setup(void)
 {
        tl_ap123_setup();
@@ -284,6 +359,30 @@ static void  __init tl_wa850re_setup(void)
 MIPS_MACHINE(ATH79_MACH_TL_WA850RE, "TL-WA850RE", "TP-LINK TL-WA850RE",
             tl_wa850re_setup);
 
+static void  __init tl_wa850re_v2_setup(void)
+{
+       tl_ap143_setup();
+
+       /* For GPIO 0~4 */
+       ath79_gpio_function_setup(AR934X_GPIO_FUNC_JTAG_DISABLE,
+                                 AR934X_GPIO_FUNC_CLK_OBS4_EN);
+
+       /* Allow to enable/disable all LEDs from userspace */
+       gpio_request_one(TL_WA850RE_V2_GPIO_ENABLE_LEDS,
+                        GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED,
+                        "LEDs enable");
+
+       ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wa850re_v2_leds_gpio),
+                                tl_wa850re_v2_leds_gpio);
+
+       ath79_register_gpio_keys_polled(-1, TL_WAX50RE_KEYS_POLL_INTERVAL,
+                                       ARRAY_SIZE(tl_wax50re_gpio_keys),
+                                       tl_wax50re_gpio_keys);
+}
+
+MIPS_MACHINE(ATH79_MACH_TL_WA850RE_V2, "TL-WA850RE-V2",
+            "TP-LINK TL-WA850RE v2", tl_wa850re_v2_setup);
+
 static void  __init tl_wa860re_setup(void)
 {
        tl_ap123_setup();
index 2a8d3398fd247dc33853888f10d9d28b928d494f..446631f14b10df047dd16c78ed9ed7bdba55f1c1 100644 (file)
@@ -206,6 +206,7 @@ enum ath79_mach_type {
        ATH79_MACH_TL_WA801ND_V3,               /* TP-LINK TL-WA801ND v3 */
        ATH79_MACH_TL_WA830RE_V2,               /* TP-LINK TL-WA830RE v2 */
        ATH79_MACH_TL_WA850RE,                  /* TP-LINK TL-WA850RE */
+       ATH79_MACH_TL_WA850RE_V2,               /* TP-LINK TL-WA850RE v2 */
        ATH79_MACH_TL_WA860RE,                  /* TP-LINK TL-WA860RE */
        ATH79_MACH_TL_WA901ND,                  /* TP-LINK TL-WA901ND */
        ATH79_MACH_TL_WA901ND_V2,               /* TP-LINK TL-WA901ND v2 */
index 4d95f4822eeca9586bf26c7ab5223bde1759813e..34b5390fcabdb3cdd59931ddf9918f62bc948f68 100644 (file)
@@ -981,6 +981,20 @@ define Device/tl-wa850re-v1
     TPLINK_HWID := 0x08500001
 endef
 
+define Device/tl-wa850re-v2
+    $(Device/tplink)
+    DEVICE_TITLE := TP-LINK TL-WA850RE v2
+    DEVICE_PACKAGES := rssileds
+    BOARDNAME := TL-WA850RE-V2
+    DEVICE_PROFILE := TLWA850
+    TPLINK_BOARD_NAME := TLWA850REV2
+    TPLINK_HWID := 0x08500002
+    KERNEL := kernel-bin | patch-cmdline | lzma | mktplinkfw-kernel
+    IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade
+    IMAGE/factory.bin := append-rootfs | tplink-safeloader factory
+    MTDPARTS := spi0.0:128k(u-boot)ro,1344k(kernel),2304k(rootfs),256k(config)ro,64k(art)ro,3648k@0x20000(firmware)
+endef
+
 define Device/tl-wa860re-v1
     $(Device/tplink-4mlzma)
     DEVICE_TITLE := TP-LINK TL-WA860RE
@@ -988,7 +1002,7 @@ define Device/tl-wa860re-v1
     DEVICE_PROFILE := TLWA860
     TPLINK_HWID := 0x08600001
 endef
-TARGET_DEVICES += tl-wa801nd-v1 tl-wa801nd-v2 tl-wa801nd-v3 tl-wa830re-v1 tl-wa830re-v2 tl-wa850re-v1 tl-wa860re-v1
+TARGET_DEVICES += tl-wa801nd-v1 tl-wa801nd-v2 tl-wa801nd-v3 tl-wa830re-v1 tl-wa830re-v2 tl-wa850re-v1 tl-wa850re-v2 tl-wa860re-v1
 
 define Device/tl-wa901nd-v1
     $(Device/tplink-4m)
index 324c6f72f4f38dae3b0a53a5639ad9f6072b65c1..a55952d7935177c1a01d71497c9f426aade2c4b5 100644 (file)
@@ -137,6 +137,7 @@ CONFIG_ATH79_MACH_RBSXTLITE=y
 # CONFIG_ATH79_MACH_TL_WA7210N_V2 is not set
 # CONFIG_ATH79_MACH_TL_WA801ND_V3 is not set
 # CONFIG_ATH79_MACH_TL_WA830RE_V2 is not set
+# CONFIG_ATH79_MACH_TL_WA850RE_V2 is not set
 # CONFIG_ATH79_MACH_TL_WA901ND is not set
 # CONFIG_ATH79_MACH_TL_WA901ND_V2 is not set
 # CONFIG_ATH79_MACH_TL_WA901ND_V4 is not set
index 1cad3a06e17c6d2d00cb5528a7f4ef9e8d281c93..3d3e256c83e70c06fd2c5c7f27bed32c6b47bddc 100644 (file)
 # CONFIG_ATH79_MACH_TL_WA7210N_V2 is not set
 # CONFIG_ATH79_MACH_TL_WA801ND_V3 is not set
 # CONFIG_ATH79_MACH_TL_WA830RE_V2 is not set
+# CONFIG_ATH79_MACH_TL_WA850RE_V2 is not set
 # CONFIG_ATH79_MACH_TL_WA901ND is not set
 # CONFIG_ATH79_MACH_TL_WA901ND_V2 is not set
 # CONFIG_ATH79_MACH_TL_WA901ND_V4 is not set
index a1dc987fb54559ecb9903099d110ec244f78576f..a872cbaa4be05bf13dcb0a14d6d5fb08bda0707d 100644 (file)
@@ -427,6 +427,49 @@ static struct device_info boards[] = {
                .last_sysupgrade_partition = "file-system"
        },
 
+       /** Firmware layout for the TL-WA850RE v2 */
+       {
+               .id     = "TLWA850REV2",
+               .vendor = "",
+               .support_list =
+                       "SupportList:\n"
+                       "{product_name:TL-WA850RE,product_ver:2.0.0,special_id:55530000}\n"
+                       "{product_name:TL-WA850RE,product_ver:2.0.0,special_id:00000000}\n"
+                       "{product_name:TL-WA850RE,product_ver:2.0.0,special_id:55534100}\n"
+                       "{product_name:TL-WA850RE,product_ver:2.0.0,special_id:45550000}\n"
+                       "{product_name:TL-WA850RE,product_ver:2.0.0,special_id:4B520000}\n"
+                       "{product_name:TL-WA850RE,product_ver:2.0.0,special_id:42520000}\n"
+                       "{product_name:TL-WA850RE,product_ver:2.0.0,special_id:4A500000}\n"
+                       "{product_name:TL-WA850RE,product_ver:2.0.0,special_id:43410000}\n"
+                       "{product_name:TL-WA850RE,product_ver:2.0.0,special_id:41550000}\n"
+                       "{product_name:TL-WA850RE,product_ver:2.0.0,special_id:52550000}\n",
+               .support_trail = '\x00',
+
+               /**
+                  576KB were moved from file-system to os-image
+                  in comparison to the stock image
+               */
+               .partitions = {
+                       {"fs-uboot", 0x00000, 0x20000},
+                       {"os-image", 0x20000, 0x150000},
+                       {"file-system", 0x170000, 0x240000},
+                       {"partition-table", 0x3b0000, 0x02000},
+                       {"default-mac", 0x3c0000, 0x00020},
+                       {"pin", 0x3c0100, 0x00020},
+                       {"product-info", 0x3c1000, 0x01000},
+                       {"soft-version", 0x3c2000, 0x00100},
+                       {"support-list", 0x3c3000, 0x01000},
+                       {"profile", 0x3c4000, 0x08000},
+                       {"user-config", 0x3d0000, 0x10000},
+                       {"default-config", 0x3e0000, 0x10000},
+                       {"radio", 0x3f0000, 0x10000},
+                       {NULL, 0, 0}
+               },
+
+               .first_sysupgrade_partition = "os-image",
+               .last_sysupgrade_partition = "file-system"
+       },
+
        /** Firmware layout for the TL-WR1043 v4 */
        {
                .id     = "TLWR1043NDV4",