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 2f9f1054a8..c44fb7d047 100755 --- a/target/linux/ar71xx/base-files/etc/board.d/01_leds +++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds @@ -235,16 +235,25 @@ cf-e530n) ucidef_set_led_netdev "wan" "WAN" "$board:blue:wan" "eth1" ;; cpe210|\ +cpe210-v2|\ cpe510|\ wbs210|\ wbs510) - ucidef_set_led_switch "lan0" "LAN0" "tp-link:green:lan0" "switch0" "0x20" - ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x10" ucidef_set_rssimon "wlan0" "200000" "1" ucidef_set_led_rssi "rssilow" "RSSILOW" "tp-link:green:link1" "wlan0" "1" "100" "0" "13" ucidef_set_led_rssi "rssimediumlow" "RSSIMEDIUMLOW" "tp-link:green:link2" "wlan0" "26" "100" "-25" "13" ucidef_set_led_rssi "rssimediumhigh" "RSSIMEDIUMHIGH" "tp-link:green:link3" "wlan0" "51" "100" "-50" "13" ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "tp-link:green:link4" "wlan0" "76" "100" "-75" "13" + + case "$board" in + cpe210-v2) + ucidef_set_led_netdev "lan" "LAN" "tp-link:green:lan0" "eth0" + ;; + *) + ucidef_set_led_switch "lan0" "LAN0" "tp-link:green:lan0" "switch0" "0x20" + ucidef_set_led_switch "lan1" "LAN1" "tp-link:green:lan1" "switch0" "0x10" + ;; + esac ;; cr3000) ucidef_set_led_netdev "wan" "WAN" "pcs:blue:wan" "eth1" 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 d8039fdf6c..4a141e9f87 100755 --- a/target/linux/ar71xx/base-files/etc/board.d/02_network +++ b/target/linux/ar71xx/base-files/etc/board.d/02_network @@ -74,6 +74,7 @@ ar71xx_setup_interfaces() cap4200ag|\ cf-e380ac-v1|\ cf-e380ac-v2|\ + cpe210-v2|\ dr342|\ eap120|\ eap300v2|\ diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt index 4146f0186d..394e8d3c5e 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt +++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt @@ -1585,6 +1585,7 @@ config ATH79_MACH_CPE505N config ATH79_MACH_CPE510 bool "TP-LINK CPE510 support" select SOC_AR934X + select SOC_QCA953X select ATH79_DEV_ETH select ATH79_DEV_GPIO_BUTTONS select ATH79_DEV_LEDS_GPIO diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c index d2dbed1fe2..ceb1769ddd 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-cpe510.c @@ -1,7 +1,8 @@ /* - * TP-LINK CPE210/220/510/520 board support + * TP-LINK CPE210/210 v2/220/510/520 board support * * Copyright (C) 2014 Matthias Schiffer + * Copyright (C) 2017 Robert Marko * * 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 @@ -41,6 +42,8 @@ #define CPE510_KEYS_POLL_INTERVAL 20 /* msecs */ #define CPE510_KEYS_DEBOUNCE_INTERVAL (3 * CPE510_KEYS_POLL_INTERVAL) +/* CPE210 v2 reset GPIO */ +#define CPE210_V2_GPIO_BTN_RESET 17 static struct gpio_led cpe510_leds_gpio[] __initdata = { { @@ -98,6 +101,30 @@ static struct gpio_led wbs510_leds_gpio[] __initdata = { }, }; +static struct gpio_led cpe210_v2_leds_gpio[] __initdata = { + { + .name = "tp-link:green:lan0", + .gpio = CPE510_GPIO_LED_LAN0, + .active_low = 1, + }, { + .name = "tp-link:green:link1", + .gpio = CPE510_GPIO_LED_L1, + .active_low = 1, + }, { + .name = "tp-link:green:link2", + .gpio = CPE510_GPIO_LED_L2, + .active_low = 1, + }, { + .name = "tp-link:green:link3", + .gpio = CPE510_GPIO_LED_L3, + .active_low = 1, + }, { + .name = "tp-link:green:link4", + .gpio = CPE510_GPIO_LED_L4, + .active_low = 1, + }, +}; + static struct gpio_keys_button cpe510_gpio_keys[] __initdata = { { .desc = "Reset button", @@ -109,6 +136,17 @@ static struct gpio_keys_button cpe510_gpio_keys[] __initdata = { } }; +static struct gpio_keys_button cpe210_v2_gpio_keys[] __initdata = { + { + .desc = "Reset button", + .type = EV_KEY, + .code = KEY_RESTART, + .debounce_interval = CPE510_KEYS_DEBOUNCE_INTERVAL, + .gpio = CPE210_V2_GPIO_BTN_RESET, + .active_low = 1, + } +}; + static void __init cpe_setup(u8 *mac) { /* Disable JTAG, enabling GPIOs 0-3 */ @@ -171,9 +209,33 @@ static void __init wbs_setup(void) ath79_register_wmac(ee, mac); } +static void __init cpe210_v2_setup(void) +{ + u8 *mac = (u8 *) KSEG1ADDR(0x1f830008); + u8 *ee = (u8 *) KSEG1ADDR(0x1fff1000); + + ath79_register_leds_gpio(-1, ARRAY_SIZE(cpe210_v2_leds_gpio), + cpe210_v2_leds_gpio); + ath79_register_gpio_keys_polled(-1, CPE510_KEYS_POLL_INTERVAL, + ARRAY_SIZE(cpe210_v2_gpio_keys), + cpe210_v2_gpio_keys); + ath79_register_m25p80(NULL); + ath79_register_mdio(0, 0x0); + ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0); + ath79_eth0_data.duplex = DUPLEX_FULL; + ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; + ath79_eth0_data.speed = SPEED_100; + ath79_eth0_data.phy_mask = BIT(4); + ath79_register_eth(0); + ath79_register_wmac(ee, mac); +} + MIPS_MACHINE(ATH79_MACH_CPE210, "CPE210", "TP-LINK CPE210/220", cpe210_setup); +MIPS_MACHINE(ATH79_MACH_CPE210_V2, "CPE210V2", "TP-LINK CPE210 v2", + cpe210_v2_setup); + MIPS_MACHINE(ATH79_MACH_CPE510, "CPE510", "TP-LINK CPE510/520", cpe510_setup); diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h index dce25c6fc8..c5be6b9a38 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h +++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h @@ -73,7 +73,8 @@ enum ath79_mach_type { ATH79_MACH_CF_E385AC, /* COMFAST CF-E385AC */ ATH79_MACH_CF_E520N, /* COMFAST CF-E520N */ ATH79_MACH_CF_E530N, /* COMFAST CF-E530N */ - ATH79_MACH_CPE210, /* TP-LINK CPE210 */ + ATH79_MACH_CPE210, /* TP-LINK CPE210 v1 */ + ATH79_MACH_CPE210_V2, /* TP-LINK CPE210 v2 */ ATH79_MACH_CPE505N, /* P&W CPE505N */ ATH79_MACH_CPE510, /* TP-LINK CPE510 */ ATH79_MACH_CPE830, /* YunCore CPE830 */ diff --git a/target/linux/ar71xx/image/generic-tp-link.mk b/target/linux/ar71xx/image/generic-tp-link.mk index 6f7d608b01..502c88b1ba 100644 --- a/target/linux/ar71xx/image/generic-tp-link.mk +++ b/target/linux/ar71xx/image/generic-tp-link.mk @@ -152,22 +152,26 @@ define Device/archer-c7-v5 endef TARGET_DEVICES += archer-c7-v5 -define Device/cpe510-520-v1 - DEVICE_TITLE := TP-LINK CPE510/520 v1 +define Device/cpexxx DEVICE_PACKAGES := rssileds MTDPARTS := spi0.0:128k(u-boot)ro,64k(partition-table)ro,64k(product-info)ro,1792k(kernel),5888k(rootfs),192k(config)ro,64k(ART)ro,7680k@0x40000(firmware) IMAGE_SIZE := 7680k - BOARDNAME := CPE510 - TPLINK_BOARD_ID := CPE510 DEVICE_PROFILE := CPE510 LOADER_TYPE := elf + IMAGES := sysupgrade.bin factory.bin + IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade + IMAGE/factory.bin := append-rootfs | tplink-safeloader factory +endef + +define Device/cpe510-520-v1 + $(Device/cpexxx) + DEVICE_TITLE := TP-LINK CPE510/520 v1 + BOARDNAME := CPE510 + TPLINK_BOARD_ID := CPE510 LOADER_FLASH_OFFS := 0x43000 COMPILE := loader-$(1).elf COMPILE/loader-$(1).elf := loader-okli-compile KERNEL := kernel-bin | lzma | uImage lzma -M 0x4f4b4c49 | loader-okli $(1) 12288 - IMAGES := sysupgrade.bin factory.bin - IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade - IMAGE/factory.bin := append-rootfs | tplink-safeloader factory endef TARGET_DEVICES += cpe510-520-v1 @@ -179,6 +183,18 @@ define Device/cpe210-220-v1 endef TARGET_DEVICES += cpe210-220-v1 +define Device/cpe210-v2 + $(Device/cpexxx) + DEVICE_TITLE := TP-LINK CPE210 v2 + BOARDNAME := CPE210V2 + TPLINK_BOARD_ID := CPE210V2 + KERNEL := kernel-bin | patch-cmdline | lzma | tplink-v1-header + TPLINK_HWID := 0x0 + TPLINK_HWREV := 0 + TPLINK_HEADER_VERSION := 1 +endef +TARGET_DEVICES += cpe210-v2 + define Device/wbs210-v1 $(Device/cpe510-520-v1) DEVICE_TITLE := TP-LINK WBS210 v1 diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c index 10577cbaaf..c7942d1ef6 100644 --- a/tools/firmware-utils/src/tplink-safeloader.c +++ b/tools/firmware-utils/src/tplink-safeloader.c @@ -155,6 +155,48 @@ static struct device_info boards[] = { .last_sysupgrade_partition = "support-list", }, + /** Firmware layout for the CPE210 V2 */ + { + .id = "CPE210V2", + .vendor = "CPE210(TP-LINK|UN|N300-2|00000000):2.0\r\n", + .support_list = + "SupportList:\r\n" + "CPE210(TP-LINK|EU|N300-2|00000000):2.0\r\n" + "CPE210(TP-LINK|EU|N300-2|45550000):2.0\r\n" + "CPE210(TP-LINK|EU|N300-2|55530000):2.0\r\n" + "CPE210(TP-LINK|UN|N300-2|00000000):2.0\r\n" + "CPE210(TP-LINK|UN|N300-2|45550000):2.0\r\n" + "CPE210(TP-LINK|UN|N300-2|55530000):2.0\r\n" + "CPE210(TP-LINK|US|N300-2|55530000):2.0\r\n" + "CPE210(TP-LINK|UN|N300-2):2.0\r\n" + "CPE210(TP-LINK|EU|N300-2):2.0\r\n" + "CPE210(TP-LINK|US|N300-2):2.0\r\n", + .support_trail = '\xff', + .soft_ver = NULL, + + .partitions = { + {"fs-uboot", 0x00000, 0x20000}, + {"partition-table", 0x20000, 0x02000}, + {"default-mac", 0x30000, 0x00020}, + {"product-info", 0x31100, 0x00100}, + {"device-info", 0x31400, 0x00400}, + {"signature", 0x32000, 0x00400}, + {"device-id", 0x33000, 0x00100}, + {"os-image", 0x40000, 0x1c0000}, + {"file-system", 0x200000, 0x5b0000}, + {"soft-version", 0x7b0000, 0x00100}, + {"support-list", 0x7b1000, 0x01000}, + {"user-config", 0x7c0000, 0x10000}, + {"default-config", 0x7d0000, 0x10000}, + {"log", 0x7e0000, 0x10000}, + {"radio", 0x7f0000, 0x10000}, + {NULL, 0, 0} + }, + + .first_sysupgrade_partition = "os-image", + .last_sysupgrade_partition = "support-list", + }, + /** Firmware layout for the CPE510/520 */ { .id = "CPE510",