Skip to content

Commit

Permalink
ar71xx: add support for TP-Link TL-WA850RE v2
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
pepe2k authored and blogic committed Feb 14, 2017
1 parent a9fdb35 commit 56561b9
Show file tree
Hide file tree
Showing 14 changed files with 182 additions and 5 deletions.
3 changes: 2 additions & 1 deletion target/linux/ar71xx/base-files/etc/board.d/01_leds
Expand Up @@ -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"
Expand Down
1 change: 1 addition & 0 deletions target/linux/ar71xx/base-files/etc/board.d/02_network
Expand Up @@ -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|\
Expand Down
3 changes: 2 additions & 1 deletion target/linux/ar71xx/base-files/etc/diag.sh
Expand Up @@ -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)
Expand Down
3 changes: 3 additions & 0 deletions target/linux/ar71xx/base-files/lib/ar71xx.sh
Expand Up @@ -998,6 +998,9 @@ ar71xx_board_detect() {
*TL-WA850RE)
name="tl-wa850re"
;;
*"TL-WA850RE v2")
name="tl-wa850re-v2"
;;
*TL-WA860RE)
name="tl-wa860re"
;;
Expand Down
1 change: 1 addition & 0 deletions target/linux/ar71xx/base-files/lib/upgrade/platform.sh
Expand Up @@ -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|\
Expand Down
1 change: 1 addition & 0 deletions target/linux/ar71xx/config-4.4
Expand Up @@ -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
Expand Down
9 changes: 9 additions & 0 deletions target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions target/linux/ar71xx/files/arch/mips/ath79/Makefile
Expand Up @@ -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
Expand Down
103 changes: 101 additions & 2 deletions target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wax50re.c
@@ -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
Expand Down Expand Up @@ -33,6 +37,17 @@
#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
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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();
Expand Down
1 change: 1 addition & 0 deletions target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
Expand Up @@ -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 */
Expand Down
16 changes: 15 additions & 1 deletion target/linux/ar71xx/image/tp-link.mk
Expand Up @@ -981,14 +981,28 @@ 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
BOARDNAME := TL-WA860RE
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)
Expand Down
1 change: 1 addition & 0 deletions target/linux/ar71xx/mikrotik/config-default
Expand Up @@ -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
Expand Down
1 change: 1 addition & 0 deletions target/linux/ar71xx/nand/config-default
Expand Up @@ -124,6 +124,7 @@
# 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
Expand Down
43 changes: 43 additions & 0 deletions tools/firmware-utils/src/tplink-safeloader.c
Expand Up @@ -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",
Expand Down

0 comments on commit 56561b9

Please sign in to comment.