diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds index de9072e55c..103002d54a 100755 --- a/target/linux/ar71xx/base-files/etc/board.d/01_leds +++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds @@ -750,6 +750,11 @@ tl-wr802n-v1) tl-wr802n-v2) ucidef_set_led_wlan "wlan" "WLAN" "$board:green:system" "phy0tpt" ;; +tl-wr902ac-v1) + ucidef_set_led_netdev "wan" "WAN" "$board:green:lan" "eth0" + ucidef_set_led_usbdev "usb" "USB" "$board:green:usb" "1-1" + ucidef_set_led_wlan "wlan2g" "WLAN2G" "$board:green:wlan2g" "phy1tpt" + ;; tl-wr940n-v4|\ tl-wr941nd-v6) ucidef_set_led_netdev "wan" "WAN" "tp-link:blue:wan" "eth0" diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network index 23c50b41d6..b9b7b3cb27 100755 --- a/target/linux/ar71xx/base-files/etc/board.d/02_network +++ b/target/linux/ar71xx/base-files/etc/board.d/02_network @@ -124,6 +124,7 @@ ar71xx_setup_interfaces() tl-wr703n|\ tl-wr802n-v1|\ tl-wr802n-v2|\ + tl-wr902ac-v1|\ tube2h|\ unifiac-lite|\ wndap360|\ diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh index 2d2a6788a7..50b893f5b1 100644 --- a/target/linux/ar71xx/base-files/etc/diag.sh +++ b/target/linux/ar71xx/base-files/etc/diag.sh @@ -61,7 +61,8 @@ get_status_led() { nbg6616|\ sc1750|\ sc450|\ - tl-wpa8630) + tl-wpa8630|\ + tl-wr902ac-v1) status_led="$board:green:power" ;; ap90q|\ diff --git a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata index ecbc9b8163..a2e98f4be7 100644 --- a/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata +++ b/target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata @@ -98,7 +98,8 @@ case "$FIRMWARE" in rb-952ui-5ac2nd) ath10kcal_from_file "/sys/firmware/routerboot/ext_wlan_data" 20480 2116 ;; - re450) + re450|\ + tl-wr902ac-v1) ath10kcal_extract "art" 20480 2116 ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -2) ;; diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh index df8c6d7283..b74807d4b0 100755 --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh @@ -1169,6 +1169,9 @@ ar71xx_board_detect() { *"TL-WR842N/ND v3") name="tl-wr842n-v3" ;; + *"TL-WR902AC v1") + name="tl-wr902ac-v1" + ;; *"TL-WR940N v4") name="tl-wr940n-v4" ;; diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh index 85fc1e9122..88e8e92a0d 100755 --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh @@ -657,7 +657,8 @@ platform_check_image() { rb-952ui-5ac2nd|\ rb-962uigs-5hact2hnt|\ rb-lhg-5nd|\ - rb-mapl-2nd) + rb-mapl-2nd|\ + tl-wr902ac-v1) return 0 ;; esac diff --git a/target/linux/ar71xx/config-4.4 b/target/linux/ar71xx/config-4.4 index 4a6545a7e6..e8d907fcd3 100644 --- a/target/linux/ar71xx/config-4.4 +++ b/target/linux/ar71xx/config-4.4 @@ -210,6 +210,7 @@ CONFIG_ATH79_MACH_TL_WR840N_V2=y CONFIG_ATH79_MACH_TL_WR841N_V1=y CONFIG_ATH79_MACH_TL_WR841N_V8=y CONFIG_ATH79_MACH_TL_WR841N_V9=y +CONFIG_ATH79_MACH_TL_WR902AC_V1=y CONFIG_ATH79_MACH_TL_WR940N_V4=y CONFIG_ATH79_MACH_TL_WR941ND=y CONFIG_ATH79_MACH_TL_WR941ND_V6=y diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt index 0584e3896b..055dddf33d 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt +++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt @@ -1696,6 +1696,17 @@ config ATH79_MACH_TL_WR841N_V9 select ATH79_DEV_USB select ATH79_DEV_WMAC +config ATH79_MACH_TL_WR902AC_V1 + bool "TP-LINK TL-WR902AC v1 support" + select SOC_QCA953X + select ATH79_DEV_AP9X_PCI if PCI + select ATH79_DEV_ETH + select ATH79_DEV_GPIO_BUTTONS + select ATH79_DEV_LEDS_GPIO + select ATH79_DEV_M25P80 + select ATH79_DEV_USB + select ATH79_DEV_WMAC + config ATH79_MACH_TL_WR941ND bool "TP-LINK TL-WR941ND support" select SOC_AR913X diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Makefile b/target/linux/ar71xx/files/arch/mips/ath79/Makefile index dd0b729996..3f589f7e2e 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile +++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile @@ -215,6 +215,7 @@ obj-$(CONFIG_ATH79_MACH_TL_WR840N_V2) += mach-tl-wr841n-v9.o obj-$(CONFIG_ATH79_MACH_TL_WR841N_V1) += mach-tl-wr841n.o obj-$(CONFIG_ATH79_MACH_TL_WR841N_V8) += mach-tl-wr841n-v8.o obj-$(CONFIG_ATH79_MACH_TL_WR841N_V9) += mach-tl-wr841n-v9.o +obj-$(CONFIG_ATH79_MACH_TL_WR902AC_V1) += mach-tl-wr902ac-v1.o obj-$(CONFIG_ATH79_MACH_TL_WR941ND) += mach-tl-wr941nd.o obj-$(CONFIG_ATH79_MACH_TL_WR941ND_V6) += mach-tl-wr941nd-v6.o obj-$(CONFIG_ATH79_MACH_TL_WR940N_V4) += mach-tl-wr940n-v4.o diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr902ac-v1.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr902ac-v1.c new file mode 100644 index 0000000000..5d7582232c --- /dev/null +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-tl-wr902ac-v1.c @@ -0,0 +1,140 @@ +/* + * TP-Link TL-WR902AC v1 board support + * + * Copyright (C) 2017 Piotr Dymacz + * + * 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 + * by the Free Software Foundation. + */ + +#include +#include + +#include +#include + +#include "common.h" +#include "dev-ap9x-pci.h" +#include "dev-eth.h" +#include "dev-gpio-buttons.h" +#include "dev-leds-gpio.h" +#include "dev-m25p80.h" +#include "dev-usb.h" +#include "dev-wmac.h" +#include "machtypes.h" + + +#define TL_WR902AC_V1_GPIO_LED_LAN 12 +#define TL_WR902AC_V1_GPIO_LED_POWER 13 +#define TL_WR902AC_V1_GPIO_LED_USB 4 +#define TL_WR902AC_V1_GPIO_LED_WLAN2G 11 +#define TL_WR902AC_V1_GPIO_LED_WPS 0 + +#define TL_WR902AC_V1_GPIO_BTN_RESET 3 +#define TL_WR902AC_V1_GPIO_BTN_SW1 17 +#define TL_WR902AC_V1_GPIO_BTN_SW2 14 +#define TL_WR902AC_V1_GPIO_BTN_WPS 2 + +#define TL_WR902AC_V1_GPIO_USB_POWER 1 + +#define TL_WR902AC_V1_KEYS_POLL_INTERVAL 20 /* msecs */ +#define TL_WR902AC_V1_KEYS_DEBOUNCE_INTERVAL \ + (3 * TL_WR902AC_V1_KEYS_POLL_INTERVAL) + +static struct gpio_led tl_wr902ac_v1_leds_gpio[] __initdata = { + { + .name = "tl-wr902ac-v1:green:lan", + .gpio = TL_WR902AC_V1_GPIO_LED_LAN, + .active_low = 1, + }, { + .name = "tl-wr902ac-v1:green:power", + .gpio = TL_WR902AC_V1_GPIO_LED_POWER, + .active_low = 0, + }, { + .name = "tl-wr902ac-v1:green:usb", + .gpio = TL_WR902AC_V1_GPIO_LED_USB, + .active_low = 0, + }, { + .name = "tl-wr902ac-v1:green:wlan2g", + .gpio = TL_WR902AC_V1_GPIO_LED_WLAN2G, + .active_low = 1, + }, { + .name = "tl-wr902ac-v1:green:wps", + .gpio = TL_WR902AC_V1_GPIO_LED_WPS, + .active_low = 1, + } +}; + +static struct gpio_keys_button tl_wr902ac_v1_gpio_keys[] __initdata = { + { + .desc = "reset", + .type = EV_KEY, + .code = KEY_RESTART, + .debounce_interval = TL_WR902AC_V1_KEYS_DEBOUNCE_INTERVAL, + .gpio = TL_WR902AC_V1_GPIO_BTN_RESET, + .active_low = 1, + }, { + .desc = "sw1", + .type = EV_KEY, + .code = BTN_0, + .debounce_interval = TL_WR902AC_V1_KEYS_DEBOUNCE_INTERVAL, + .gpio = TL_WR902AC_V1_GPIO_BTN_SW1, + .active_low = 1, + }, { + .desc = "sw2", + .type = EV_KEY, + .code = BTN_1, + .debounce_interval = TL_WR902AC_V1_KEYS_DEBOUNCE_INTERVAL, + .gpio = TL_WR902AC_V1_GPIO_BTN_SW2, + .active_low = 1, + }, { + .desc = "wps", + .type = EV_KEY, + .code = KEY_WPS_BUTTON, + .debounce_interval = TL_WR902AC_V1_KEYS_DEBOUNCE_INTERVAL, + .gpio = TL_WR902AC_V1_GPIO_BTN_WPS, + .active_low = 1, + } +}; + +static void __init tl_wr902ac_v1_setup(void) +{ + u8 *art = (u8 *) KSEG1ADDR(0x1f7f0000); + u8 *mac = (u8 *) KSEG1ADDR(0x1f750008); + + ath79_register_m25p80(NULL); + + ath79_setup_ar933x_phy4_switch(false, false); + ath79_register_mdio(0, 0x0); + + /* LAN */ + 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, 1); + ath79_register_eth(0); + + ath79_register_leds_gpio(-1, ARRAY_SIZE(tl_wr902ac_v1_leds_gpio), + tl_wr902ac_v1_leds_gpio); + + ath79_register_gpio_keys_polled(-1, TL_WR902AC_V1_KEYS_POLL_INTERVAL, + ARRAY_SIZE(tl_wr902ac_v1_gpio_keys), + tl_wr902ac_v1_gpio_keys); + + gpio_request_one(TL_WR902AC_V1_GPIO_USB_POWER, + GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED, + "USB power"); + + ath79_register_usb(); + + ath79_register_wmac(art + 0x1000, mac); + + ap91_pci_init(art + 0x5000, NULL); +} + +MIPS_MACHINE(ATH79_MACH_TL_WR902AC_V1, "TL-WR902AC-V1", "TP-LINK TL-WR902AC v1", + tl_wr902ac_v1_setup); diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h index dde6d9735a..0b70256338 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h +++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h @@ -262,6 +262,7 @@ enum ath79_mach_type { ATH79_MACH_TL_WR841N_V9, /* TP-LINK TL-WR841N/ND v9 */ ATH79_MACH_TL_WR842N_V2, /* TP-LINK TL-WR842N/ND v2 */ ATH79_MACH_TL_WR842N_V3, /* TP-LINK TL-WR842N/ND v3 */ + ATH79_MACH_TL_WR902AC_V1, /* TP-LINK TL-WR902AC v1 */ ATH79_MACH_TL_WR941ND, /* TP-LINK TL-WR941ND */ ATH79_MACH_TL_WR941ND_V5, /* TP-LINK TL-WR941ND v5 */ ATH79_MACH_TL_WR941ND_V6, /* TP-LINK TL-WR941ND v6 */ diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk index 8d6eb616f2..8422a1b2dd 100644 --- a/target/linux/ar71xx/image/tp-link.mk +++ b/target/linux/ar71xx/image/tp-link.mk @@ -1026,6 +1026,25 @@ define Device/tl-wr847n-v8 endef TARGET_DEVICES += tl-wr842n-v1 tl-wr842n-v2 tl-wr842n-v3 tl-wr843nd-v1 tl-wr847n-v8 +define Device/tl-wr902ac-v1 + DEVICE_TITLE := TP-LINK TL-WR902AC v1 + DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport \ + kmod-ath10k ath10k-firmware-qca9887 -swconfig -uboot-envtools + BOARDNAME := TL-WR902AC-V1 + DEVICE_PROFILE := TLWR902 + TPLINK_BOARD_ID := TL-WR902AC-V1 + TPLINK_HWID := 0x0 + SUPPORTED_DEVICES := tl-wr902ac-v1 + IMAGE_SIZE := 7360k + KERNEL := kernel-bin | patch-cmdline | lzma | mktplinkfw-kernel + IMAGES += factory.bin + IMAGE/factory.bin := append-rootfs | tplink-safeloader factory + IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade | \ + append-metadata | check-size $$$$(IMAGE_SIZE) + MTDPARTS := spi0.0:128k(u-boot)ro,7360k(firmware),640k(tplink)ro,64k(art)ro +endef +TARGET_DEVICES += tl-wr902ac-v1 + define Device/tl-wr940n-v4 $(Device/tplink-4mlzma) DEVICE_TITLE := TP-LINK TL-WR940N v4 diff --git a/target/linux/ar71xx/mikrotik/config-default b/target/linux/ar71xx/mikrotik/config-default index 71f186716c..6c81bc2de5 100644 --- a/target/linux/ar71xx/mikrotik/config-default +++ b/target/linux/ar71xx/mikrotik/config-default @@ -170,6 +170,7 @@ CONFIG_ATH79_MACH_RBSXTLITE=y # CONFIG_ATH79_MACH_TL_WR841N_V1 is not set # CONFIG_ATH79_MACH_TL_WR841N_V8 is not set # CONFIG_ATH79_MACH_TL_WR841N_V9 is not set +# CONFIG_ATH79_MACH_TL_WR902AC_V1 is not set # CONFIG_ATH79_MACH_TL_WR940N_V4 is not set # CONFIG_ATH79_MACH_TL_WR941ND is not set # CONFIG_ATH79_MACH_TL_WR941ND_V6 is not set diff --git a/target/linux/ar71xx/nand/config-default b/target/linux/ar71xx/nand/config-default index 51bab804a7..6eff5d0b28 100644 --- a/target/linux/ar71xx/nand/config-default +++ b/target/linux/ar71xx/nand/config-default @@ -166,6 +166,7 @@ CONFIG_ATH79_MACH_RAMBUTAN=y # CONFIG_ATH79_MACH_TL_WR841N_V1 is not set # CONFIG_ATH79_MACH_TL_WR841N_V8 is not set # CONFIG_ATH79_MACH_TL_WR841N_V9 is not set +# CONFIG_ATH79_MACH_TL_WR902AC_V1 is not set # CONFIG_ATH79_MACH_TL_WR940N_V4 is not set # CONFIG_ATH79_MACH_TL_WR941ND is not set # CONFIG_ATH79_MACH_TL_WR941ND_V6 is not set diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c index cc5b583f7c..aa8cc31304 100644 --- a/tools/firmware-utils/src/tplink-safeloader.c +++ b/tools/firmware-utils/src/tplink-safeloader.c @@ -672,6 +672,42 @@ static struct device_info boards[] = { .last_sysupgrade_partition = "file-system" }, + /** Firmware layout for the TL-WR902AC v1 */ + { + .id = "TL-WR902AC-V1", + .vendor = "", + .support_list = + "SupportList:\n" + "{product_name:TL-WR902AC,product_ver:1.0.0,special_id:45550000}\n", + .support_trail = '\x00', + .soft_ver = NULL, + + /** + 384KB were moved from file-system to os-image + in comparison to the stock image + */ + .partitions = { + {"fs-uboot", 0x00000, 0x20000}, + {"os-image", 0x20000, 0x160000}, + {"file-system", 0x180000, 0x5d0000}, + {"default-mac", 0x750000, 0x00200}, + {"pin", 0x750200, 0x00200}, + {"product-info", 0x750400, 0x0fc00}, + {"soft-version", 0x760000, 0x0b000}, + {"support-list", 0x76b000, 0x04000}, + {"profile", 0x770000, 0x04000}, + {"default-config", 0x774000, 0x0b000}, + {"user-config", 0x780000, 0x40000}, + {"partition-table", 0x7c0000, 0x10000}, + {"log", 0x7d0000, 0x20000}, + {"radio", 0x7f0000, 0x10000}, + {NULL, 0, 0} + }, + + .first_sysupgrade_partition = "os-image", + .last_sysupgrade_partition = "file-system", + }, + /** Firmware layout for the TL-WR942N V1 */ { .id = "TLWR942NV1",