Message ID | 1499511609-30508-4-git-send-email-tim@tn-x.org |
---|---|
State | Accepted |
Headers | show |
diff --git a/bsp/ar71xx/.config b/bsp/ar71xx/.config index 43d063c..b407f7d 100644 --- a/bsp/ar71xx/.config +++ b/bsp/ar71xx/.config @@ -6,6 +6,8 @@ CONFIG_TARGET_ar71xx_generic=y CONFIG_TARGET_MULTI_PROFILE=y CONFIG_TARGET_DEVICE_ar71xx_generic_DEVICE_gl-ar150=y CONFIG_TARGET_DEVICE_PACKAGES_ar71xx_generic_DEVICE_gl-ar150="" +CONFIG_TARGET_DEVICE_ar71xx_generic_DEVICE_archer-c25-v1=y +CONFIG_TARGET_DEVICE_PACKAGES_ar71xx_generic_DEVICE_archer-c25-v1="-kmod-ath10k kmod-ath10k-ct -ath10k-firmware-qca9887 ath10k-firmware-qca9887-ct" CONFIG_TARGET_DEVICE_ar71xx_generic_DEVICE_archer-c7-v2=y CONFIG_TARGET_DEVICE_PACKAGES_ar71xx_generic_DEVICE_archer-c7-v2="-kmod-ath10k kmod-ath10k-ct -ath10k-firmware-qca988x ath10k-firmware-qca988x-ct" CONFIG_TARGET_DEVICE_ar71xx_generic_DEVICE_cpe210-220=y @@ -83,6 +85,7 @@ CONFIG_CLEAN_IPKG=y # CONFIG_KERNEL_DEBUG_INFO is not set # CONFIG_KERNEL_DEBUG_KERNEL is not set # CONFIG_PACKAGE_ALFRED_VIS is not set +CONFIG_PACKAGE_ath10k-firmware-qca9887-ct=m CONFIG_PACKAGE_ath10k-firmware-qca988x-ct=m CONFIG_PACKAGE_kmod-ath10k-ct=m CONFIG_PACKAGE_kmod-hwmon-core=m diff --git a/bsp/board_ar71xx.bsp b/bsp/board_ar71xx.bsp index 6c541cc..1137b0d 100644 --- a/bsp/board_ar71xx.bsp +++ b/bsp/board_ar71xx.bsp @@ -31,4 +31,5 @@ images=("lede-ar71xx-generic-cpe210-220-squashfs-sysupgrade.bin" "lede-ar71xx-generic-tl-wdr4300-v1-squashfs-sysupgrade.bin" "lede-ar71xx-generic-tl-wdr4310-v1-squashfs-sysupgrade.bin" "lede-ar71xx-generic-archer-c7-v2-squashfs-sysupgrade.bin" + "lede-ar71xx-generic-archer-c25-v1-squashfs-sysupgrade.bin" ) diff --git a/build_patches/openwrt/0005-firmware-utils-tplink-safeloader-support-strings-as-.patch b/build_patches/openwrt/0005-firmware-utils-tplink-safeloader-support-strings-as-.patch new file mode 100644 index 0000000..289322e --- /dev/null +++ b/build_patches/openwrt/0005-firmware-utils-tplink-safeloader-support-strings-as-.patch @@ -0,0 +1,162 @@ +From e9ef329106fbf7e71718e73aee8b48315dd22a18 Mon Sep 17 00:00:00 2001 +From: Jan Niehusmann <jan@gondor.com> +Date: Fri, 19 May 2017 09:42:24 +0200 +Subject: [PATCH 5/7] firmware-utils: tplink-safeloader: support strings as + soft_version + +Some TP-Link routers (C25, C59, C60) contain a version string instead +of a binary structure in the soft_version partition. + +Flashing LEDE from the original firmware's GUI, this version string +taken from the soft_ver partition of the firmware image is written to +the router's config partition. + +When using tftp recovery to go back to the original Archer C25 firmware, +a version check compares that version to the version of the firmware to +be flashed. + +Without proper contents in the config partition, reverting to the +original firmware fails. + +Therefore, write the string "soft_ver:1.0.0\n" to that soft_ver +partition. + +Signed-off-by: Jan Niehusmann <jan@gondor.com> +[Rebased on v17.01.2] +Signed-off-by: Tim Niemeyer <tim@tnx-x.org> +--- + tools/firmware-utils/src/tplink-safeloader.c | 34 +++++++++++++++++++++++++++- + 1 file changed, 33 insertions(+), 1 deletion(-) + +diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c +index 4e3d205..688cdac 100644 +--- a/tools/firmware-utils/src/tplink-safeloader.c ++++ b/tools/firmware-utils/src/tplink-safeloader.c +@@ -75,6 +75,7 @@ struct device_info { + const char *vendor; + const char *support_list; + char support_trail; ++ const char *soft_ver; + const struct flash_partition_entry partitions[MAX_PARTITIONS+1]; + const char *first_sysupgrade_partition; + const char *last_sysupgrade_partition; +@@ -130,6 +131,7 @@ static struct device_info boards[] = { + "CPE220(TP-LINK|US|N300-2):1.1\r\n" + "CPE220(TP-LINK|EU|N300-2):1.1\r\n", + .support_trail = '\xff', ++ .soft_ver = NULL, + + .partitions = { + {"fs-uboot", 0x00000, 0x20000}, +@@ -167,6 +169,7 @@ static struct device_info boards[] = { + "CPE520(TP-LINK|US|N300-5):1.1\r\n" + "CPE520(TP-LINK|EU|N300-5):1.1\r\n", + .support_trail = '\xff', ++ .soft_ver = NULL, + + .partitions = { + {"fs-uboot", 0x00000, 0x20000}, +@@ -198,6 +201,7 @@ static struct device_info boards[] = { + "WBS210(TP-LINK|US|N300-2):1.20\r\n" + "WBS210(TP-LINK|EU|N300-2):1.20\r\n", + .support_trail = '\xff', ++ .soft_ver = NULL, + + .partitions = { + {"fs-uboot", 0x00000, 0x20000}, +@@ -229,6 +233,7 @@ static struct device_info boards[] = { + "WBS510(TP-LINK|US|N300-5):1.20\r\n" + "WBS510(TP-LINK|EU|N300-5):1.20\r\n", + .support_trail = '\xff', ++ .soft_ver = NULL, + + .partitions = { + {"fs-uboot", 0x00000, 0x20000}, +@@ -259,6 +264,7 @@ static struct device_info boards[] = { + "SupportList:\r\n" + "{product_name:Archer C2600,product_ver:1.0.0,special_id:00000000}\r\n", + .support_trail = '\x00', ++ .soft_ver = NULL, + + .partitions = { + {"SBL1", 0x00000, 0x20000}, +@@ -303,6 +309,7 @@ static struct device_info boards[] = { + "product_ver:2.0.0," + "special_id:00000000}\r\n", + .support_trail = '\x00', ++ .soft_ver = NULL, + + .partitions = { + {"fs-uboot", 0x00000, 0x40000}, +@@ -337,6 +344,7 @@ static struct device_info boards[] = { + "product_ver:1.0.0," + "special_id:00000000}\n", + .support_trail = '\x00', ++ .soft_ver = NULL, + + .partitions = { + {"fs-uboot", 0x00000, 0x40000}, +@@ -369,6 +377,7 @@ static struct device_info boards[] = { + "SupportList:\r\n" + "EAP120(TP-LINK|UN|N300-2):1.0\r\n", + .support_trail = '\xff', ++ .soft_ver = NULL, + + .partitions = { + {"fs-uboot", 0x00000, 0x20000}, +@@ -398,6 +407,7 @@ static struct device_info boards[] = { + "SupportList:\n" + "{product_name:TL-WR1043ND,product_ver:4.0.0,special_id:45550000}\n", + .support_trail = '\x00', ++ .soft_ver = NULL, + + /** + We use a bigger os-image partition than the stock images (and thus +@@ -441,6 +451,7 @@ static struct device_info boards[] = { + "{product_name:RE450,product_ver:1.0.0,special_id:4B520000}\r\n" + "{product_name:RE450,product_ver:1.0.0,special_id:55534100}\r\n", + .support_trail = '\x00', ++ .soft_ver = NULL, + + /** + The flash partition table for RE450; +@@ -569,6 +580,23 @@ static struct image_partition_entry make_soft_version(uint32_t rev) { + return entry; + } + ++static struct image_partition_entry make_soft_version_from_string(const char *soft_ver) { ++ /** String length _including_ the terminating zero byte */ ++ uint32_t ver_len = strlen(soft_ver) + 1; ++ /** Partition contains 64 bit header, the version string, and one additional null byte */ ++ size_t partition_len = 2*sizeof(uint32_t) + ver_len + 1; ++ struct image_partition_entry entry = alloc_image_partition("soft-version", partition_len); ++ ++ uint32_t *len = (uint32_t *)entry.data; ++ len[0] = htonl(ver_len); ++ len[1] = 0; ++ memcpy(&len[2], soft_ver, ver_len); ++ ++ entry.data[partition_len - 1] = 0; ++ ++ return entry; ++} ++ + /** Generates the support-list partition */ + static struct image_partition_entry make_support_list(const struct device_info *info) { + size_t len = strlen(info->support_list); +@@ -799,7 +827,11 @@ static void build_image(const char *output, + struct image_partition_entry parts[6] = {}; + + parts[0] = make_partition_table(info->partitions); +- parts[1] = make_soft_version(rev); ++ if (info->soft_ver) ++ parts[1] = make_soft_version_from_string(info->soft_ver); ++ else ++ parts[1] = make_soft_version(rev); ++ + parts[2] = make_support_list(info); + parts[3] = read_file("os-image", kernel_image, false); + parts[4] = read_file("file-system", rootfs_image, add_jffs2_eof); +-- +2.1.4 + diff --git a/build_patches/openwrt/0006-ar71xx-add-support-for-TP-Link-Archer-C25-v1.patch b/build_patches/openwrt/0006-ar71xx-add-support-for-TP-Link-Archer-C25-v1.patch new file mode 100644 index 0000000..aa0f9ce --- /dev/null +++ b/build_patches/openwrt/0006-ar71xx-add-support-for-TP-Link-Archer-C25-v1.patch @@ -0,0 +1,499 @@ +From a5290bd7279f0aa4a7129ce103fec154239ddd86 Mon Sep 17 00:00:00 2001 +From: Ludwig Thomeczek <ledesrc@wxorx.net> +Date: Sat, 22 Apr 2017 18:21:47 +0200 +Subject: [PATCH 6/7] ar71xx: add support for TP-Link Archer C25 v1 + +The TP-Link Archer C25 is a low-cost dual-band router. + +Specification: + +- CPU: Atheros QCA9561 775 MHz +- RAM: 64 MB +- Flash: 8 MB +- Wifi: 3x3 2.4 GHz (integrated), 1x1 5 GHz QCA9887 +- NET: 5x 10/100 Mbps Ethernet + +Some LEDs are controlled by an additional 74HC595 chip. + +Signed-off-by: Ludwig Thomeczek <ledesrc@wxorx.net> +[minor code style fixes, boards alphabetical order fixes, +reworked commit message] +Signed-off-by: Piotr Dymacz <pepe2k@gmail.com> +[Rebased on v17.01.2] +Signed-off-by: Tim Niemeyer <tim@tnx-x.org> +--- + target/linux/ar71xx/base-files/etc/board.d/01_leds | 9 + + .../linux/ar71xx/base-files/etc/board.d/02_network | 1 + + target/linux/ar71xx/base-files/etc/diag.sh | 1 + + .../etc/hotplug.d/firmware/11-ath10k-caldata | 1 + + target/linux/ar71xx/base-files/lib/ar71xx.sh | 3 + + .../ar71xx/base-files/lib/upgrade/platform.sh | 1 + + target/linux/ar71xx/config-4.4 | 3 + + .../ar71xx/files/arch/mips/ath79/Kconfig.openwrt | 11 + + target/linux/ar71xx/files/arch/mips/ath79/Makefile | 1 + + .../files/arch/mips/ath79/mach-archer-c25-v1.c | 227 +++++++++++++++++++++ + .../linux/ar71xx/files/arch/mips/ath79/machtypes.h | 1 + + target/linux/ar71xx/image/tp-link.mk | 24 +++ + target/linux/ar71xx/mikrotik/config-default | 1 + + target/linux/ar71xx/nand/config-default | 1 + + 14 files changed, 285 insertions(+) + create mode 100644 target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c + +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 0279dfc..3aa2bfb 100755 +--- a/target/linux/ar71xx/base-files/etc/board.d/01_leds ++++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds +@@ -49,6 +49,15 @@ antrouter-r1) + ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan" "phy0tpt" + ucidef_set_led_default "btc" "BTC" "$board:green:btc" "0" + ;; ++archer-c25-v1) ++ ucidef_set_led_netdev "wan" "WAN" "$board:green:wan" "eth0" ++ ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan2g" "phy1tpt" ++ ucidef_set_led_wlan "wlan5g" "WLAN5G" "$board:green:wlan5g" "phy0tpt" ++ ucidef_set_led_switch "lan1" "LAN1" "$board:green:lan1" "switch0" "0x10" ++ ucidef_set_led_switch "lan2" "LAN2" "$board:green:lan2" "switch0" "0x08" ++ ucidef_set_led_switch "lan3" "LAN3" "$board:green:lan3" "switch0" "0x04" ++ ucidef_set_led_switch "lan4" "LAN4" "$board:green:lan4" "switch0" "0x02" ++ ;; + arduino-yun) + ucidef_set_led_wlan "wlan" "WLAN" "arduino:blue:wlan" "phy0tpt" + ucidef_set_led_usbdev "usb" "USB" "arduino:white:usb" "1-1.1" +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 c8c7827..4404e80 100755 +--- a/target/linux/ar71xx/base-files/etc/board.d/02_network ++++ b/target/linux/ar71xx/base-files/etc/board.d/02_network +@@ -122,6 +122,7 @@ ar71xx_setup_interfaces() + a60|\ + alfa-ap96|\ + alfa-nx|\ ++ archer-c25-v1|\ + dr344|\ + gl-ar150|\ + gl-ar300m|\ +diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh +index 7b8aac8..cf6278c 100644 +--- a/target/linux/ar71xx/base-files/etc/diag.sh ++++ b/target/linux/ar71xx/base-files/etc/diag.sh +@@ -47,6 +47,7 @@ get_status_led() { + ap135-020) + status_led="ap135:green:status" + ;; ++ archer-c25-v1|\ + mr12|\ + mr16|\ + nbg6616|\ +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 b3e23c9..68f90de 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 +@@ -92,6 +92,7 @@ case "$FIRMWARE" in + ath10kcal_extract "art" 20480 2116 + ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth0/address) -2) + ;; ++ archer-c25-v1|\ + tl-wdr6500-v2) + ath10kcal_extract "art" 20480 2116 + ath10kcal_patch_mac $(macaddr_add $(cat /sys/class/net/eth1/address) -2) +diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh +index b035535..0d01c5e 100755 +--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh ++++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh +@@ -457,6 +457,9 @@ ar71xx_board_detect() { + *AP90Q) + name="ap90q" + ;; ++ *"Archer C25 v1") ++ name="archer-c25-v1" ++ ;; + *"Archer C5") + name="archer-c5" + ;; +diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh +index 580e09a..e2aaceb 100755 +--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh ++++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh +@@ -205,6 +205,7 @@ platform_check_image() { + airrouter|\ + ap132|\ + ap90q|\ ++ archer-c25-v1|\ + bullet-m|\ + c-55|\ + carambola2|\ +diff --git a/target/linux/ar71xx/config-4.4 b/target/linux/ar71xx/config-4.4 +index ff6bb13..79308e8 100644 +--- a/target/linux/ar71xx/config-4.4 ++++ b/target/linux/ar71xx/config-4.4 +@@ -50,6 +50,7 @@ CONFIG_ATH79_MACH_AP152=y + # CONFIG_ATH79_MACH_AP81 is not set + CONFIG_ATH79_MACH_AP90Q=y + CONFIG_ATH79_MACH_AP96=y ++CONFIG_ATH79_MACH_ARCHER_C25_V1=y + CONFIG_ATH79_MACH_ARCHER_C7=y + CONFIG_ATH79_MACH_ARDUINO_YUN=y + CONFIG_ATH79_MACH_AW_NR580=y +@@ -269,6 +270,7 @@ CONFIG_GENERIC_SMP_IDLE_THREAD=y + CONFIG_GENERIC_TIME_VSYSCALL=y + CONFIG_GPIOLIB=y + CONFIG_GPIOLIB_IRQCHIP=y ++CONFIG_GPIO_74X164=y + CONFIG_GPIO_DEVRES=y + # CONFIG_GPIO_LATCH is not set + CONFIG_GPIO_NXP_74HC153=y +@@ -335,6 +337,7 @@ CONFIG_LEDS_NU801=y + CONFIG_LIBFDT=y + CONFIG_MARVELL_PHY=y + CONFIG_MDIO_BITBANG=y ++CONFIG_SPI_GPIO=y + CONFIG_MDIO_BOARDINFO=y + CONFIG_MDIO_GPIO=y + CONFIG_MICREL_PHY=y +diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt +index 76ba6fa..d49659c 100644 +--- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt ++++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt +@@ -1224,6 +1224,17 @@ config ATH79_MACH_BSB + select ATH79_DEV_USB + select ATH79_DEV_WMAC + ++config ATH79_MACH_ARCHER_C25_V1 ++ bool "TP-LINK Archer C25 v1 support" ++ select SOC_QCA956X ++ 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_WMAC ++ ++ + config ATH79_MACH_ARCHER_C7 + bool "TP-LINK Archer C5/C7/TL-WDR4900 v2 board support" + select SOC_QCA955X +diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Makefile b/target/linux/ar71xx/files/arch/mips/ath79/Makefile +index c91d03f..fc28716 100644 +--- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile ++++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile +@@ -55,6 +55,7 @@ obj-$(CONFIG_ATH79_MACH_AP147) += mach-ap147.o + obj-$(CONFIG_ATH79_MACH_AP152) += mach-ap152.o + obj-$(CONFIG_ATH79_MACH_AP90Q) += mach-ap90q.o + obj-$(CONFIG_ATH79_MACH_AP96) += mach-ap96.o ++obj-$(CONFIG_ATH79_MACH_ARCHER_C25_V1) += mach-archer-c25-v1.o + obj-$(CONFIG_ATH79_MACH_ARCHER_C7) += mach-archer-c7.o + obj-$(CONFIG_ATH79_MACH_ARDUINO_YUN) += mach-arduino-yun.o + obj-$(CONFIG_ATH79_MACH_AW_NR580) += mach-aw-nr580.o +diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c +new file mode 100644 +index 0000000..a0f001c +--- /dev/null ++++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c +@@ -0,0 +1,227 @@ ++/* ++ * TP-Link Archer C25 v1 board support ++ * ++ * Copyright (C) 2017 Ludwig Thomeczek <ledesrc@wxorx.net> ++ * based on mach-archer-c60/C59-v1.c ++ * Copyright (C) 2016 Henryk Heisig <hyniu@o2.pl> ++ * ++ * 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 <linux/platform_device.h> ++#include <linux/ath9k_platform.h> ++#include <linux/ar8216_platform.h> ++#include <asm/mach-ath79/ar71xx_regs.h> ++#include <linux/gpio.h> ++ ++#include "common.h" ++#include "dev-m25p80.h" ++#include "machtypes.h" ++#include "pci.h" ++#include "dev-ap9x-pci.h" ++#include "dev-eth.h" ++#include "dev-gpio-buttons.h" ++#include "dev-leds-gpio.h" ++#include "dev-spi.h" ++#include "dev-usb.h" ++#include "dev-wmac.h" ++#include <linux/spi/spi_gpio.h> ++#include <linux/spi/74x164.h> ++ ++#define ARCHER_C25_GPIO_SHIFT_OE 21 /* OE, Output Enable */ ++#define ARCHER_C25_GPIO_SHIFT_SER 14 /* DS, Data Serial Input */ ++#define ARCHER_C25_GPIO_SHIFT_SRCLK 15 /* SHCP, Shift Reg Clock Input */ ++#define ARCHER_C25_GPIO_SHIFT_SRCLR 19 /* MR, Master Reset */ ++#define ARCHER_C25_GPIO_SHIFT_RCLK 16 /* STCP, Storage Reg Clock Input */ ++ ++#define ARCHER_C25_74HC_GPIO_BASE QCA956X_GPIO_COUNT ++#define ARCHER_C25_74HC_GPIO_LED_WAN_AMBER 27 ++#define ARCHER_C25_74HC_GPIO_LED_WAN_GREEN 28 ++#define ARCHER_C25_74HC_GPIO_LED_WLAN2 29 ++#define ARCHER_C25_74HC_GPIO_LED_WLAN5 30 ++#define ARCHER_C25_74HC_GPIO_LED_LAN1 23 ++#define ARCHER_C25_74HC_GPIO_LED_LAN2 24 ++#define ARCHER_C25_74HC_GPIO_LED_LAN3 25 ++#define ARCHER_C25_74HC_GPIO_LED_LAN4 26 ++ ++#define ARCHER_C25_V1_SSR_BIT_0 0 ++#define ARCHER_C25_V1_SSR_BIT_1 1 ++#define ARCHER_C25_V1_SSR_BIT_2 2 ++#define ARCHER_C25_V1_SSR_BIT_3 3 ++#define ARCHER_C25_V1_SSR_BIT_4 4 ++#define ARCHER_C25_V1_SSR_BIT_5 5 ++#define ARCHER_C25_V1_SSR_BIT_6 6 ++#define ARCHER_C25_V1_SSR_BIT_7 7 ++ ++ ++#define ARCHER_C25_V1_KEYS_POLL_INTERVAL 20 ++#define ARCHER_C25_V1_KEYS_DEBOUNCE_INTERVAL \ ++ (3 * ARCHER_C25_V1_KEYS_POLL_INTERVAL) ++ ++#define ARCHER_C25_V1_GPIO_BTN_RESET 1 ++#define ARCHER_C25_V1_GPIO_BTN_RFKILL 22 ++ ++#define ARCHER_C25_V1_GPIO_LED_POWER 17 ++#define ARCHER_C25_V1_GPIO_LED_WPS 2 ++ ++#define ARCHER_C25_V1_WMAC_CALDATA_OFFSET 0x1000 ++ ++static struct spi_gpio_platform_data archer_c25_v1_spi_data = { ++ .sck = ARCHER_C25_GPIO_SHIFT_SRCLK, ++ .miso = SPI_GPIO_NO_MISO, ++ .mosi = ARCHER_C25_GPIO_SHIFT_SER, ++ .num_chipselect = 1, ++}; ++ ++static u8 archer_c25_v1_ssr_initdata[] __initdata = { ++ BIT(ARCHER_C25_V1_SSR_BIT_7) | ++ BIT(ARCHER_C25_V1_SSR_BIT_6) | ++ BIT(ARCHER_C25_V1_SSR_BIT_5) | ++ BIT(ARCHER_C25_V1_SSR_BIT_4) | ++ BIT(ARCHER_C25_V1_SSR_BIT_3) | ++ BIT(ARCHER_C25_V1_SSR_BIT_2) | ++ BIT(ARCHER_C25_V1_SSR_BIT_1) ++}; ++ ++static struct gen_74x164_chip_platform_data archer_c25_v1_ssr_data = { ++ .base = ARCHER_C25_74HC_GPIO_BASE, ++ .num_registers = ARRAY_SIZE(archer_c25_v1_ssr_initdata), ++ .init_data = archer_c25_v1_ssr_initdata, ++}; ++ ++static struct platform_device archer_c25_v1_spi_device = { ++ .name = "spi_gpio", ++ .id = 1, ++ .dev = { ++ .platform_data = &archer_c25_v1_spi_data, ++ }, ++}; ++ ++static struct spi_board_info archer_c25_v1_spi_info[] = { ++ { ++ .bus_num = 1, ++ .chip_select = 0, ++ .max_speed_hz = 10000000, ++ .modalias = "74x164", ++ .platform_data = &archer_c25_v1_ssr_data, ++ .controller_data = (void *) ARCHER_C25_GPIO_SHIFT_RCLK, ++ }, ++}; ++ ++static struct gpio_led archer_c25_v1_leds_gpio[] __initdata = { ++ { ++ .name = "archer-c25-v1:green:power", ++ .gpio = ARCHER_C25_V1_GPIO_LED_POWER, ++ .active_low = 1, ++ }, { ++ .name = "archer-c25-v1:green:wps", ++ .gpio = ARCHER_C25_V1_GPIO_LED_WPS, ++ .active_low = 1, ++ }, { ++ .name = "archer-c25-v1:green:wlan2g", ++ .gpio = ARCHER_C25_74HC_GPIO_LED_WLAN2, ++ .active_low = 1, ++ }, { ++ .name = "archer-c25-v1:green:wlan5g", ++ .gpio = ARCHER_C25_74HC_GPIO_LED_WLAN5, ++ .active_low = 1, ++ }, { ++ .name = "archer-c25-v1:green:lan1", ++ .gpio = ARCHER_C25_74HC_GPIO_LED_LAN1, ++ .active_low = 1, ++ }, { ++ .name = "archer-c25-v1:green:lan2", ++ .gpio = ARCHER_C25_74HC_GPIO_LED_LAN2, ++ .active_low = 1, ++ }, { ++ .name = "archer-c25-v1:green:lan3", ++ .gpio = ARCHER_C25_74HC_GPIO_LED_LAN3, ++ .active_low = 1, ++ }, { ++ .name = "archer-c25-v1:green:lan4", ++ .gpio = ARCHER_C25_74HC_GPIO_LED_LAN4, ++ .active_low = 1, ++ }, { ++ .name = "archer-c25-v1:green:wan", ++ .gpio = ARCHER_C25_74HC_GPIO_LED_WAN_GREEN, ++ .active_low = 1, ++ }, { ++ .name = "archer-c25-v1:amber:wan", ++ .gpio = ARCHER_C25_74HC_GPIO_LED_WAN_AMBER, ++ .active_low = 1, ++ }, ++}; ++ ++static struct gpio_keys_button archer_c25_v1_gpio_keys[] __initdata = { ++ { ++ .desc = "Reset button", ++ .type = EV_KEY, ++ .code = KEY_RESTART, ++ .debounce_interval = ARCHER_C25_V1_KEYS_DEBOUNCE_INTERVAL, ++ .gpio = ARCHER_C25_V1_GPIO_BTN_RESET, ++ .active_low = 1, ++ }, { ++ .desc = "RFKILL button", ++ .type = EV_KEY, ++ .code = KEY_RFKILL, ++ .debounce_interval = ARCHER_C25_V1_KEYS_DEBOUNCE_INTERVAL, ++ .gpio = ARCHER_C25_V1_GPIO_BTN_RFKILL, ++ .active_low = 1, ++ }, ++}; ++ ++static void __init archer_c25_v1_setup(void) ++{ ++ u8 *mac = (u8 *) KSEG1ADDR(0x1f7e0008); ++ u8 *art = (u8 *) KSEG1ADDR(0x1f7f0000); ++ ++ ath79_register_m25p80(NULL); ++ ++ spi_register_board_info(archer_c25_v1_spi_info, ++ ARRAY_SIZE(archer_c25_v1_spi_info)); ++ ++ platform_device_register(&archer_c25_v1_spi_device); ++ ++ gpio_request_one(ARCHER_C25_GPIO_SHIFT_OE, ++ GPIOF_OUT_INIT_LOW | GPIOF_EXPORT_DIR_FIXED, ++ "LED control"); ++ ++ gpio_request_one(ARCHER_C25_GPIO_SHIFT_SRCLR, ++ GPIOF_OUT_INIT_HIGH | GPIOF_EXPORT_DIR_FIXED, ++ "LED reset"); ++ ++ ath79_register_leds_gpio(-1, ARRAY_SIZE(archer_c25_v1_leds_gpio), ++ archer_c25_v1_leds_gpio); ++ ++ ath79_register_gpio_keys_polled(-1, ARCHER_C25_V1_KEYS_POLL_INTERVAL, ++ ARRAY_SIZE(archer_c25_v1_gpio_keys), ++ archer_c25_v1_gpio_keys); ++ ++ ath79_register_mdio(0, 0x0); ++ ath79_register_mdio(1, 0x0); ++ ++ ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0); ++ ath79_init_mac(ath79_eth1_data.mac_addr, mac, 1); ++ ++ /* WAN port */ ++ ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; ++ ath79_eth0_data.speed = SPEED_100; ++ ath79_eth0_data.duplex = DUPLEX_FULL; ++ ath79_eth0_data.phy_mask = BIT(4); ++ ath79_register_eth(0); ++ ++ /* LAN ports */ ++ ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII; ++ ath79_eth1_data.speed = SPEED_1000; ++ ath79_eth1_data.duplex = DUPLEX_FULL; ++ ath79_switch_data.phy_poll_mask |= BIT(4); ++ ath79_switch_data.phy4_mii_en = 1; ++ ath79_register_eth(1); ++ ++ ath79_register_wmac(art + ARCHER_C25_V1_WMAC_CALDATA_OFFSET, mac); ++ ap91_pci_init(NULL, NULL); ++} ++ ++MIPS_MACHINE(ATH79_MACH_ARCHER_C25_V1, "ARCHER-C25-V1", "TP-LINK Archer C25 v1", ++ archer_c25_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 b9a8e3e..53f0d1c 100644 +--- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h ++++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h +@@ -39,6 +39,7 @@ enum ath79_mach_type { + ATH79_MACH_AP152, /* Atheros AP152 reference board */ + ATH79_MACH_AP90Q, /* YunCore AP90Q */ + ATH79_MACH_AP96, /* Atheros AP96 */ ++ ATH79_MACH_ARCHER_C25_V1, /* TP-LINK Archer C25 V1 board */ + ATH79_MACH_ARCHER_C5, /* TP-LINK Archer C5 board */ + ATH79_MACH_ARCHER_C7, /* TP-LINK Archer C7 board */ + ATH79_MACH_ARCHER_C7_V2, /* TP-LINK Archer C7 V2 board */ +diff --git a/target/linux/ar71xx/image/tp-link.mk b/target/linux/ar71xx/image/tp-link.mk +index 1c88f43..f70c12c 100644 +--- a/target/linux/ar71xx/image/tp-link.mk ++++ b/target/linux/ar71xx/image/tp-link.mk +@@ -45,6 +45,14 @@ define Build/mktplinkfw-kernel + @mv $@.new $@ + endef + ++define Build/uImageArcher ++ mkimage -A $(LINUX_KARCH) \ ++ -O linux -T kernel \ ++ -C $(1) -a $(KERNEL_LOADADDR) -e $(if $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \ ++ -n '$(call toupper,$(LINUX_KARCH)) LEDE Linux-$(LINUX_VERSION)' -d $@ $@.new ++ @mv $@.new $@ ++endef ++ + define Device/tplink + TPLINK_HWREV := 0x1 + TPLINK_HEADER_VERSION := 1 +@@ -95,6 +103,22 @@ $(Device/tplink) + IMAGE_SIZE := 15872k + endef + ++define Device/archer-c25-v1 ++ DEVICE_TITLE := TP-LINK Archer C25 v1 ++ DEVICE_PACKAGES := kmod-ath10k ath10k-firmware-qca9887 ++ BOARDNAME := ARCHER-C25-V1 ++ TPLINK_BOARD_NAME := ARCHER-C25-V1 ++ DEVICE_PROFILE := ARCHERC25V1 ++ IMAGE_SIZE := 7808k ++ LOADER_TYPE := elf ++ KERNEL := kernel-bin | patch-cmdline | lzma | uImageArcher lzma ++ IMAGES := sysupgrade.bin factory.bin ++ IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade ++ IMAGE/factory.bin := append-rootfs | tplink-safeloader factory ++ MTDPARTS := spi0.0:128k(factory-uboot)ro,64k(u-boot)ro,1536k(kernel),6272k(rootfs),128k(config)ro,64k(art)ro,7808k@0x30000(firmware) ++endef ++TARGET_DEVICES += archer-c25-v1 ++ + define Device/cpe510-520 + DEVICE_TITLE := TP-LINK CPE510/520 + DEVICE_PACKAGES := rssileds +diff --git a/target/linux/ar71xx/mikrotik/config-default b/target/linux/ar71xx/mikrotik/config-default +index 44ea327..3f11c23 100644 +--- a/target/linux/ar71xx/mikrotik/config-default ++++ b/target/linux/ar71xx/mikrotik/config-default +@@ -15,6 +15,7 @@ + # CONFIG_ATH79_MACH_AP152 is not set + # CONFIG_ATH79_MACH_AP90Q is not set + # CONFIG_ATH79_MACH_AP96 is not set ++# CONFIG_ATH79_MACH_ARCHER_C25_V1 is not set + # CONFIG_ATH79_MACH_ARCHER_C7 is not set + # CONFIG_ATH79_MACH_ARDUINO_YUN is not set + # CONFIG_ATH79_MACH_AW_NR580 is not set +diff --git a/target/linux/ar71xx/nand/config-default b/target/linux/ar71xx/nand/config-default +index 515266b..6357531 100644 +--- a/target/linux/ar71xx/nand/config-default ++++ b/target/linux/ar71xx/nand/config-default +@@ -8,6 +8,7 @@ + # CONFIG_ATH79_MACH_AP136 is not set + # CONFIG_ATH79_MACH_AP147 is not set + # CONFIG_ATH79_MACH_AP96 is not set ++# CONFIG_ATH79_MACH_ARCHER_C25_V1 is not set + # CONFIG_ATH79_MACH_ARCHER_C7 is not set + # CONFIG_ATH79_MACH_AW_NR580 is not set + # CONFIG_ATH79_MACH_CAP324 is not set +-- +2.1.4 + diff --git a/build_patches/openwrt/0007-firmware-utils-tplink-safeloader-add-TP-Link-Archer-.patch b/build_patches/openwrt/0007-firmware-utils-tplink-safeloader-add-TP-Link-Archer-.patch new file mode 100644 index 0000000..861ccfd --- /dev/null +++ b/build_patches/openwrt/0007-firmware-utils-tplink-safeloader-add-TP-Link-Archer-.patch @@ -0,0 +1,112 @@ +From ae91fb7f8cef0fbd9b0ee707ce577ac9c5cdf2f2 Mon Sep 17 00:00:00 2001 +From: Ludwig Thomeczek <ledesrc@wxorx.net> +Date: Sat, 13 May 2017 11:40:48 +0200 +Subject: [PATCH 7/7] firmware-utils: tplink-safeloader: add TP-Link Archer C25 + v1 + +This adds the necessary firmware layout definitions for the Archer C25. +It has an addtional partition containing some static data ("extra-para") +without which no factory flash is possible, therefore put_data() has been +added. + +Signed-off-by: Ludwig Thomeczek <ledesrc@wxorx.net> +[Rebased on v17.01.2] +Signed-off-by: Tim Niemeyer <tim@tnx-x.org> +--- + tools/firmware-utils/src/tplink-safeloader.c | 59 +++++++++++++++++++++++++++- + 1 file changed, 58 insertions(+), 1 deletion(-) + +diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c +index 688cdac..2468426 100644 +--- a/tools/firmware-utils/src/tplink-safeloader.c ++++ b/tools/firmware-utils/src/tplink-safeloader.c +@@ -299,6 +299,48 @@ static struct device_info boards[] = { + .last_sysupgrade_partition = "file-system" + }, + ++ /** Firmware layout for the C25v1 */ ++ { ++ .id = "ARCHER-C25-V1", ++ .support_list = ++ "SupportList:\n" ++ "{product_name:ArcherC25,product_ver:1.0.0,special_id:00000000}\n" ++ "{product_name:ArcherC25,product_ver:1.0.0,special_id:55530000}\n" ++ "{product_name:ArcherC25,product_ver:1.0.0,special_id:45550000}\n", ++ .support_trail = '\x00', ++ .soft_ver = "soft_ver:1.0.0\n", ++ ++ /** ++ We use a bigger os-image partition than the stock images (and thus ++ smaller file-system), as our kernel doesn't fit in the stock firmware's ++ 1MB os-image. ++ */ ++ .partitions = { ++ {"factory-boot", 0x00000, 0x20000}, ++ {"fs-uboot", 0x20000, 0x10000}, ++ {"os-image", 0x30000, 0x180000}, /* Stock: base 0x30000 size 0x100000 */ ++ {"file-system", 0x1b0000, 0x620000}, /* Stock: base 0x130000 size 0x6a0000 */ ++ {"user-config", 0x7d0000, 0x04000}, ++ {"default-mac", 0x7e0000, 0x00100}, ++ {"device-id", 0x7e0100, 0x00100}, ++ {"extra-para", 0x7e0200, 0x00100}, ++ {"pin", 0x7e0300, 0x00100}, ++ {"support-list", 0x7e0400, 0x00400}, ++ {"soft-version", 0x7e0800, 0x00400}, ++ {"product-info", 0x7e0c00, 0x01400}, ++ {"partition-table", 0x7e2000, 0x01000}, ++ {"profile", 0x7e3000, 0x01000}, ++ {"default-config", 0x7e4000, 0x04000}, ++ {"merge-config", 0x7ec000, 0x02000}, ++ {"qos-db", 0x7ee000, 0x02000}, ++ {"radio", 0x7f0000, 0x10000}, ++ {NULL, 0, 0} ++ }, ++ ++ .first_sysupgrade_partition = "os-image", ++ .last_sysupgrade_partition = "file-system", ++ }, ++ + /** Firmware layout for the C5 */ + { + .id = "ARCHER-C5-V2", +@@ -643,6 +685,15 @@ static struct image_partition_entry read_file(const char *part_name, const char + return entry; + } + ++/** Creates a new image partition from arbitrary data */ ++static struct image_partition_entry put_data(const char *part_name, const char *datain, size_t len) { ++ ++ struct image_partition_entry entry = alloc_image_partition(part_name, len); ++ ++ memcpy(entry.data, datain, len); ++ ++ return entry; ++} + + /** + Copies a list of image partitions into an image buffer and generates the image partition table while doing so +@@ -824,7 +875,8 @@ static void build_image(const char *output, + bool add_jffs2_eof, + bool sysupgrade, + const struct device_info *info) { +- struct image_partition_entry parts[6] = {}; ++ ++ struct image_partition_entry parts[7] = {}; + + parts[0] = make_partition_table(info->partitions); + if (info->soft_ver) +@@ -836,6 +888,11 @@ static void build_image(const char *output, + parts[3] = read_file("os-image", kernel_image, false); + parts[4] = read_file("file-system", rootfs_image, add_jffs2_eof); + ++ if (strcasecmp(info->id, "ARCHER-C25-V1") == 0) { ++ const char mdat[11] = {0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00}; ++ parts[5] = put_data("extra-para", mdat, 11); ++ } ++ + size_t len; + void *image; + if (sysupgrade) +-- +2.1.4 + diff --git a/src/packages/fff/fff-network/Makefile b/src/packages/fff/fff-network/Makefile index fee3f98..d34016c 100644 --- a/src/packages/fff/fff-network/Makefile +++ b/src/packages/fff/fff-network/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=fff-network -PKG_VERSION:=0.0.6 +PKG_VERSION:=0.0.7 PKG_RELEASE:=1 PKG_BUILD_DIR:=$(BUILD_DIR)/fff-network diff --git a/src/packages/fff/fff-network/ar71xx/network.archer-c25-v1 b/src/packages/fff/fff-network/ar71xx/network.archer-c25-v1 new file mode 100644 index 0000000..e524545 --- /dev/null +++ b/src/packages/fff/fff-network/ar71xx/network.archer-c25-v1 @@ -0,0 +1,8 @@ +WANDEV=eth0 +SWITCHDEV=eth1 +CLIENT_PORTS="1 2 0t" +WAN_PORTS="" +BATMAN_PORTS="3 4 0t" + +ETHMESHMAC=eth1 +ROUTERMAC=eth0
Hallo, hab heute mal mit nem C25 getestet: Flashen hat wunderbar geklappt, aber: - Beim Neustart blinkt der immer erst zweimal mit allen LEDs, was wie ein Bootloop aussieht, aber zum Glück nur lästig ist, danach kommt er (meistens) zunächst normal hoch. - Die LEDs sind soweit plausibel. - Bei mir startet er sich aber immer nach ca. 2 Minuten neu. Angekündigt wird das durch eine langsamere Blinkfrequenz der schmalen Funk-LED sowie etwaiger angeschlossener LAN-LEDs. Neustart tritt sowohl bei Betrieb über Mesh als auch WAN-Verbindung auf. Zugang ist direkt und über Mesh-Router per WebUI möglich, also kommt die Firmware zumindest teilweise hoch. - Der Router ist bis jetzt nicht im Monitoring aufgetaucht (wahrscheinlich weil er den 5 Minuten Timer nie erreicht). - Einmal hatte ich nach der Trennung vom Netz das Problem, dass er gar nicht mehr hochkam (nur Power blinkt, kein Login möglich; 5 Neustart-Versuche). Da half es dann lustigerweise, ein LAN-Kabel einzustecken, danach ist der Fehler aber nicht mehr aufgetreten. - Danach hab ich einen Reset per "Knopf" versucht (um Fehlkonfiguration im WebUI auszuschließen), hat jedoch nichts (am Problem) geändert. - Was mich wundert: Jetzt muss ich mich richtig beeilen, dass ich im WebUI was eingeben kann, bevor er abkackt. Ich meine, dass beim allerersten Mal, bevor ich ihn vom Netz genommen habe, das nicht so war, und ich mehr Zeit zum Einstellen hatte. Sicher bin ich mir da aber nicht mehr. Hat jemand TFTP-IP und Image-Namen für das Ding? Ich würde gerne nochmal flashen, aber ich trau mich nicht, ein sysupgrade zu machen, weil der dann bestimmt währenddessen abkackt. TFTP sollte aber funktionieren, dann könnte ich den o.g. Erstversuch ohne Neustart nach 2 min. nachstellen. Beste Grüße Adrian -----Original Message----- From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf Of Tim Niemeyer Sent: Samstag, 8. Juli 2017 13:00 To: franken-dev@freifunk.net Subject: [PATCH v2 4/4] Add support for TP-Link C25 > Signed-off-by: Tim Niemeyer <tim@tn-x.org> > --- > Changes in v2: > - Added kernel config for LEDs > - Changed patch format
Hallo nochmal, hab jetzt nochmal ein bisschen rumprobiert. Nachdem ich den Router mal ein bisschen habe stehen lassen, hat er dann zwischendurch auch mal etwa 10 Minuten durchgehalten und kam auch ins Monitoring rein. Danach war aber immer wieder nach jeweils ca. 2 Minuten Schluss, oder er kam gar nicht hoch. TFTP habe ich inzwischen gefunden: 192.168.0.66 ArcherC25v1_recovery.bin Ging bei mir mit Port 3 Habe dann mal die Versionen 1 und 2 von Tim's Patch mit TFTP versucht, gleiches Ergebnis (nur halt mit LEDs alle an bei v1). Uptime reicht nicht mal, um die Location zu setzen. K.A., ob man da ein Log sinnvoll auslesen kann... Grüße Adrian -----Original Message----- From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf Of mail@adrianschmutzler.de Sent: Sonntag, 16. Juli 2017 23:47 To: 'Tim Niemeyer' <tim@tn-x.org>; franken-dev@freifunk.net Subject: RE: [PATCH v2 4/4] Add support for TP-Link C25 Hallo, hab heute mal mit nem C25 getestet: Flashen hat wunderbar geklappt, aber: - Beim Neustart blinkt der immer erst zweimal mit allen LEDs, was wie ein Bootloop aussieht, aber zum Glück nur lästig ist, danach kommt er (meistens) zunächst normal hoch. - Die LEDs sind soweit plausibel. - Bei mir startet er sich aber immer nach ca. 2 Minuten neu. Angekündigt wird das durch eine langsamere Blinkfrequenz der schmalen Funk-LED sowie etwaiger angeschlossener LAN-LEDs. Neustart tritt sowohl bei Betrieb über Mesh als auch WAN-Verbindung auf. Zugang ist direkt und über Mesh-Router per WebUI möglich, also kommt die Firmware zumindest teilweise hoch. - Der Router ist bis jetzt nicht im Monitoring aufgetaucht (wahrscheinlich weil er den 5 Minuten Timer nie erreicht). - Einmal hatte ich nach der Trennung vom Netz das Problem, dass er gar nicht mehr hochkam (nur Power blinkt, kein Login möglich; 5 Neustart-Versuche). Da half es dann lustigerweise, ein LAN-Kabel einzustecken, danach ist der Fehler aber nicht mehr aufgetreten. - Danach hab ich einen Reset per "Knopf" versucht (um Fehlkonfiguration im WebUI auszuschließen), hat jedoch nichts (am Problem) geändert. - Was mich wundert: Jetzt muss ich mich richtig beeilen, dass ich im WebUI was eingeben kann, bevor er abkackt. Ich meine, dass beim allerersten Mal, bevor ich ihn vom Netz genommen habe, das nicht so war, und ich mehr Zeit zum Einstellen hatte. Sicher bin ich mir da aber nicht mehr. Hat jemand TFTP-IP und Image-Namen für das Ding? Ich würde gerne nochmal flashen, aber ich trau mich nicht, ein sysupgrade zu machen, weil der dann bestimmt währenddessen abkackt. TFTP sollte aber funktionieren, dann könnte ich den o.g. Erstversuch ohne Neustart nach 2 min. nachstellen. Beste Grüße Adrian -----Original Message----- From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf Of Tim Niemeyer Sent: Samstag, 8. Juli 2017 13:00 To: franken-dev@freifunk.net Subject: [PATCH v2 4/4] Add support for TP-Link C25 > Signed-off-by: Tim Niemeyer <tim@tn-x.org> > --- > Changes in v2: > - Added kernel config for LEDs > - Changed patch format -- franken-dev mailing list franken-dev@freifunk.net http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net
Hab jetzt nochmal einen Test mit FFF-Firmware basierend auf dem LEDE master gemacht, selbes Ergebnis. Liegt also auch nicht daran, dass irgendein Patch vergessen oder was nachträglich gefixt wurde. -----Original Message----- From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf Of mail@adrianschmutzler.de Sent: Montag, 17. Juli 2017 01:31 To: franken-dev@freifunk.net Subject: RE: [PATCH v2 4/4] Add support for TP-Link C25 Hallo nochmal, hab jetzt nochmal ein bisschen rumprobiert. Nachdem ich den Router mal ein bisschen habe stehen lassen, hat er dann zwischendurch auch mal etwa 10 Minuten durchgehalten und kam auch ins Monitoring rein. Danach war aber immer wieder nach jeweils ca. 2 Minuten Schluss, oder er kam gar nicht hoch. TFTP habe ich inzwischen gefunden: 192.168.0.66 ArcherC25v1_recovery.bin Ging bei mir mit Port 3 Habe dann mal die Versionen 1 und 2 von Tim's Patch mit TFTP versucht, gleiches Ergebnis (nur halt mit LEDs alle an bei v1). Uptime reicht nicht mal, um die Location zu setzen. K.A., ob man da ein Log sinnvoll auslesen kann... Grüße Adrian -----Original Message----- From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf Of mail@adrianschmutzler.de Sent: Sonntag, 16. Juli 2017 23:47 To: 'Tim Niemeyer' <tim@tn-x.org>; franken-dev@freifunk.net Subject: RE: [PATCH v2 4/4] Add support for TP-Link C25 Hallo, hab heute mal mit nem C25 getestet: Flashen hat wunderbar geklappt, aber: - Beim Neustart blinkt der immer erst zweimal mit allen LEDs, was wie ein Bootloop aussieht, aber zum Glück nur lästig ist, danach kommt er (meistens) zunächst normal hoch. - Die LEDs sind soweit plausibel. - Bei mir startet er sich aber immer nach ca. 2 Minuten neu. Angekündigt wird das durch eine langsamere Blinkfrequenz der schmalen Funk-LED sowie etwaiger angeschlossener LAN-LEDs. Neustart tritt sowohl bei Betrieb über Mesh als auch WAN-Verbindung auf. Zugang ist direkt und über Mesh-Router per WebUI möglich, also kommt die Firmware zumindest teilweise hoch. - Der Router ist bis jetzt nicht im Monitoring aufgetaucht (wahrscheinlich weil er den 5 Minuten Timer nie erreicht). - Einmal hatte ich nach der Trennung vom Netz das Problem, dass er gar nicht mehr hochkam (nur Power blinkt, kein Login möglich; 5 Neustart-Versuche). Da half es dann lustigerweise, ein LAN-Kabel einzustecken, danach ist der Fehler aber nicht mehr aufgetreten. - Danach hab ich einen Reset per "Knopf" versucht (um Fehlkonfiguration im WebUI auszuschließen), hat jedoch nichts (am Problem) geändert. - Was mich wundert: Jetzt muss ich mich richtig beeilen, dass ich im WebUI was eingeben kann, bevor er abkackt. Ich meine, dass beim allerersten Mal, bevor ich ihn vom Netz genommen habe, das nicht so war, und ich mehr Zeit zum Einstellen hatte. Sicher bin ich mir da aber nicht mehr. Hat jemand TFTP-IP und Image-Namen für das Ding? Ich würde gerne nochmal flashen, aber ich trau mich nicht, ein sysupgrade zu machen, weil der dann bestimmt währenddessen abkackt. TFTP sollte aber funktionieren, dann könnte ich den o.g. Erstversuch ohne Neustart nach 2 min. nachstellen. Beste Grüße Adrian -----Original Message----- From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf Of Tim Niemeyer Sent: Samstag, 8. Juli 2017 13:00 To: franken-dev@freifunk.net Subject: [PATCH v2 4/4] Add support for TP-Link C25 > Signed-off-by: Tim Niemeyer <tim@tn-x.org> > --- > Changes in v2: > - Added kernel config for LEDs > - Changed patch format -- franken-dev mailing list franken-dev@freifunk.net http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net -- franken-dev mailing list franken-dev@freifunk.net http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net
So, habe nun in der /etc/config/wireless herumgespielt. Solange bei radio0 (also 5 GHz) "option disabled '1'" gesetzt ist, läuft er wunderbar. Mache ich aber auch nur eines der beiden interfaces an (also mesh ODER w5ap), startet er alle 2 Minuten neu. Heißt im Umkehrschluss, wenn man "uci set wireless.radio0.disabled=1" macht, ist er immer noch ein günstigeres Replacement für den 1043er. Nun kommt es denke ich darauf an, ob sich beim 9887 Treiber was tut, oder hat noch jemand ne Idee...? -----Original Message----- From: mail@adrianschmutzler.de [mailto:mail@adrianschmutzler.de] Sent: Mittwoch, 19. Juli 2017 11:03 To: 'mail@adrianschmutzler.de' <mail@adrianschmutzler.de>; 'franken-dev@freifunk.net' <franken-dev@freifunk.net> Subject: RE: [PATCH v2 4/4] Add support for TP-Link C25 Hab jetzt nochmal einen Test mit FFF-Firmware basierend auf dem LEDE master gemacht, selbes Ergebnis. Liegt also auch nicht daran, dass irgendein Patch vergessen oder was nachträglich gefixt wurde. -----Original Message----- From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf Of mail@adrianschmutzler.de Sent: Montag, 17. Juli 2017 01:31 To: franken-dev@freifunk.net Subject: RE: [PATCH v2 4/4] Add support for TP-Link C25 Hallo nochmal, hab jetzt nochmal ein bisschen rumprobiert. Nachdem ich den Router mal ein bisschen habe stehen lassen, hat er dann zwischendurch auch mal etwa 10 Minuten durchgehalten und kam auch ins Monitoring rein. Danach war aber immer wieder nach jeweils ca. 2 Minuten Schluss, oder er kam gar nicht hoch. TFTP habe ich inzwischen gefunden: 192.168.0.66 ArcherC25v1_recovery.bin Ging bei mir mit Port 3 Habe dann mal die Versionen 1 und 2 von Tim's Patch mit TFTP versucht, gleiches Ergebnis (nur halt mit LEDs alle an bei v1). Uptime reicht nicht mal, um die Location zu setzen. K.A., ob man da ein Log sinnvoll auslesen kann... Grüße Adrian -----Original Message----- From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf Of mail@adrianschmutzler.de Sent: Sonntag, 16. Juli 2017 23:47 To: 'Tim Niemeyer' <tim@tn-x.org>; franken-dev@freifunk.net Subject: RE: [PATCH v2 4/4] Add support for TP-Link C25 Hallo, hab heute mal mit nem C25 getestet: Flashen hat wunderbar geklappt, aber: - Beim Neustart blinkt der immer erst zweimal mit allen LEDs, was wie ein Bootloop aussieht, aber zum Glück nur lästig ist, danach kommt er (meistens) zunächst normal hoch. - Die LEDs sind soweit plausibel. - Bei mir startet er sich aber immer nach ca. 2 Minuten neu. Angekündigt wird das durch eine langsamere Blinkfrequenz der schmalen Funk-LED sowie etwaiger angeschlossener LAN-LEDs. Neustart tritt sowohl bei Betrieb über Mesh als auch WAN-Verbindung auf. Zugang ist direkt und über Mesh-Router per WebUI möglich, also kommt die Firmware zumindest teilweise hoch. - Der Router ist bis jetzt nicht im Monitoring aufgetaucht (wahrscheinlich weil er den 5 Minuten Timer nie erreicht). - Einmal hatte ich nach der Trennung vom Netz das Problem, dass er gar nicht mehr hochkam (nur Power blinkt, kein Login möglich; 5 Neustart-Versuche). Da half es dann lustigerweise, ein LAN-Kabel einzustecken, danach ist der Fehler aber nicht mehr aufgetreten. - Danach hab ich einen Reset per "Knopf" versucht (um Fehlkonfiguration im WebUI auszuschließen), hat jedoch nichts (am Problem) geändert. - Was mich wundert: Jetzt muss ich mich richtig beeilen, dass ich im WebUI was eingeben kann, bevor er abkackt. Ich meine, dass beim allerersten Mal, bevor ich ihn vom Netz genommen habe, das nicht so war, und ich mehr Zeit zum Einstellen hatte. Sicher bin ich mir da aber nicht mehr. Hat jemand TFTP-IP und Image-Namen für das Ding? Ich würde gerne nochmal flashen, aber ich trau mich nicht, ein sysupgrade zu machen, weil der dann bestimmt währenddessen abkackt. TFTP sollte aber funktionieren, dann könnte ich den o.g. Erstversuch ohne Neustart nach 2 min. nachstellen. Beste Grüße Adrian -----Original Message----- From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf Of Tim Niemeyer Sent: Samstag, 8. Juli 2017 13:00 To: franken-dev@freifunk.net Subject: [PATCH v2 4/4] Add support for TP-Link C25 > Signed-off-by: Tim Niemeyer <tim@tn-x.org> > --- > Changes in v2: > - Added kernel config for LEDs > - Changed patch format -- franken-dev mailing list franken-dev@freifunk.net http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net -- franken-dev mailing list franken-dev@freifunk.net http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net
Hallo, Reviewed-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> Tested-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> Beides gilt nur in Kombination mit meinem Patch "[5/5] Archer C25: Disable 5 GHz to provide working firmware", der 5 GHz vollständig deaktiviert. Ich bin dafür, das Paket C25 (Patches 1-5) jetzt erstmal zu applien, da er mit 2.4 GHz stabil läuft und somit als Alternative zum 1043 geeignet ist. Den Support für 5 GHz würde ich vorschlagen nachzureichen und nachzupatchen, sobald jemand dazu in der Lage ist (vll. gibts ja auch noch einen neuen Treiber). Wer 5 GHz testen will, bräuchte dann nur den uci set aus dem Patch 5 lokal wieder zu entfernen, die Treiber stehen ja weiterhin drin. Zum 5 GHz nochmal zusammenfassend: - Ich habe alle 2 min. Neustartloop, sobald auch nur ein Interface unter 5 GHz aktiviert ist (egal ob w5ap oder w5mesh) - Nehme ich nur die Treiber ohne -ct, erscheint bei mir der physische Adapter für 5 GHz gar nicht Grüße Adrian > -----Original Message----- > From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf > Of Tim Niemeyer > Sent: Samstag, 8. Juli 2017 13:00 > To: franken-dev@freifunk.net > Subject: [PATCH v2 4/4] Add support for TP-Link C25 > > Signed-off-by: Tim Niemeyer <tim@tn-x.org> > --- > > Changes in v2: > - Added kernel config for LEDs > - Changed patch format > > bsp/ar71xx/.config | 3 + > bsp/board_ar71xx.bsp | 1 + > ...ils-tplink-safeloader-support-strings-as-.patch | 162 +++++++ ...1xx-add- > support-for-TP-Link-Archer-C25-v1.patch | 499 > +++++++++++++++++++++ > ...ils-tplink-safeloader-add-TP-Link-Archer-.patch | 112 +++++ > src/packages/fff/fff-network/Makefile | 2 +- > .../fff/fff-network/ar71xx/network.archer-c25-v1 | 8 + > 7 files changed, 786 insertions(+), 1 deletion(-) create mode 100644 > build_patches/openwrt/0005-firmware-utils-tplink-safeloader-support- > string > s-as-.patch > create mode 100644 > build_patches/openwrt/0006-ar71xx-add-support-for-TP-Link-Archer-C25- > v1.pa > tch > create mode 100644 > build_patches/openwrt/0007-firmware-utils-tplink-safeloader-add-TP-Link- > Ar > cher-.patch > create mode 100644 > src/packages/fff/fff-network/ar71xx/network.archer-c25-v1 > > diff --git a/bsp/ar71xx/.config b/bsp/ar71xx/.config index 43d063c..b407f7d > 100644 > --- a/bsp/ar71xx/.config > +++ b/bsp/ar71xx/.config > @@ -6,6 +6,8 @@ CONFIG_TARGET_ar71xx_generic=y > CONFIG_TARGET_MULTI_PROFILE=y > CONFIG_TARGET_DEVICE_ar71xx_generic_DEVICE_gl-ar150=y > CONFIG_TARGET_DEVICE_PACKAGES_ar71xx_generic_DEVICE_gl-ar150="" > +CONFIG_TARGET_DEVICE_ar71xx_generic_DEVICE_archer-c25-v1=y > +CONFIG_TARGET_DEVICE_PACKAGES_ar71xx_generic_DEVICE_archer-c25- > v1="-kmo > +d- > ath10k kmod-ath10k-ct -ath10k-firmware-qca9887 ath10k-firmware-qca9887- > ct" > CONFIG_TARGET_DEVICE_ar71xx_generic_DEVICE_archer-c7-v2=y > > CONFIG_TARGET_DEVICE_PACKAGES_ar71xx_generic_DEVICE_archer-c7- > v2="-kmod-at > h10k kmod-ath10k-ct -ath10k-firmware-qca988x ath10k-firmware-qca988x- > ct" > CONFIG_TARGET_DEVICE_ar71xx_generic_DEVICE_cpe210-220=y > @@ -83,6 +85,7 @@ CONFIG_CLEAN_IPKG=y > # CONFIG_KERNEL_DEBUG_INFO is not set > # CONFIG_KERNEL_DEBUG_KERNEL is not set # > CONFIG_PACKAGE_ALFRED_VIS is not set > +CONFIG_PACKAGE_ath10k-firmware-qca9887-ct=m > CONFIG_PACKAGE_ath10k-firmware-qca988x-ct=m > CONFIG_PACKAGE_kmod-ath10k-ct=m > CONFIG_PACKAGE_kmod-hwmon-core=m > diff --git a/bsp/board_ar71xx.bsp b/bsp/board_ar71xx.bsp index > 6c541cc..1137b0d 100644 > --- a/bsp/board_ar71xx.bsp > +++ b/bsp/board_ar71xx.bsp > @@ -31,4 +31,5 @@ > images=("lede-ar71xx-generic-cpe210-220-squashfs-sysupgrade.bin" > "lede-ar71xx-generic-tl-wdr4300-v1-squashfs-sysupgrade.bin" > "lede-ar71xx-generic-tl-wdr4310-v1-squashfs-sysupgrade.bin" > "lede-ar71xx-generic-archer-c7-v2-squashfs-sysupgrade.bin" > + "lede-ar71xx-generic-archer-c25-v1-squashfs-sysupgrade.bin" > ) > diff --git > a/build_patches/openwrt/0005-firmware-utils-tplink-safeloader-support-stri > ngs-as-.patch > b/build_patches/openwrt/0005-firmware-utils-tplink-safeloader-support-stri > ngs-as-.patch > new file mode 100644 > index 0000000..289322e > --- /dev/null > +++ > b/build_patches/openwrt/0005-firmware-utils-tplink-safeloader-support-stri > ngs-as-.patch > @@ -0,0 +1,162 @@ > +From e9ef329106fbf7e71718e73aee8b48315dd22a18 Mon Sep 17 00:00:00 > 2001 > +From: Jan Niehusmann <jan@gondor.com> > +Date: Fri, 19 May 2017 09:42:24 +0200 > +Subject: [PATCH 5/7] firmware-utils: tplink-safeloader: support strings > as > + soft_version > + > +Some TP-Link routers (C25, C59, C60) contain a version string instead > +of a binary structure in the soft_version partition. > + > +Flashing LEDE from the original firmware's GUI, this version string > +taken from the soft_ver partition of the firmware image is written to > +the router's config partition. > + > +When using tftp recovery to go back to the original Archer C25 > +firmware, a version check compares that version to the version of the > +firmware to be flashed. > + > +Without proper contents in the config partition, reverting to the > +original firmware fails. > + > +Therefore, write the string "soft_ver:1.0.0\n" to that soft_ver > +partition. > + > +Signed-off-by: Jan Niehusmann <jan@gondor.com> [Rebased on v17.01.2] > +Signed-off-by: Tim Niemeyer <tim@tnx-x.org> > +--- > + tools/firmware-utils/src/tplink-safeloader.c | 34 > +++++++++++++++++++++++++++- > + 1 file changed, 33 insertions(+), 1 deletion(-) > + > +diff --git a/tools/firmware-utils/src/tplink-safeloader.c > b/tools/firmware-utils/src/tplink-safeloader.c > +index 4e3d205..688cdac 100644 > +--- a/tools/firmware-utils/src/tplink-safeloader.c > ++++ b/tools/firmware-utils/src/tplink-safeloader.c > +@@ -75,6 +75,7 @@ struct device_info { > + const char *vendor; > + const char *support_list; > + char support_trail; > ++ const char *soft_ver; > + const struct flash_partition_entry partitions[MAX_PARTITIONS+1]; > + const char *first_sysupgrade_partition; > + const char *last_sysupgrade_partition; @@ -130,6 +131,7 @@ static > +struct device_info boards[] = { > + "CPE220(TP-LINK|US|N300-2):1.1\r\n" > + "CPE220(TP-LINK|EU|N300-2):1.1\r\n", > + .support_trail = '\xff', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x20000}, > +@@ -167,6 +169,7 @@ static struct device_info boards[] = { > + "CPE520(TP-LINK|US|N300-5):1.1\r\n" > + "CPE520(TP-LINK|EU|N300-5):1.1\r\n", > + .support_trail = '\xff', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x20000}, > +@@ -198,6 +201,7 @@ static struct device_info boards[] = { > + "WBS210(TP-LINK|US|N300-2):1.20\r\n" > + "WBS210(TP-LINK|EU|N300-2):1.20\r\n", > + .support_trail = '\xff', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x20000}, > +@@ -229,6 +233,7 @@ static struct device_info boards[] = { > + "WBS510(TP-LINK|US|N300-5):1.20\r\n" > + "WBS510(TP-LINK|EU|N300-5):1.20\r\n", > + .support_trail = '\xff', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x20000}, > +@@ -259,6 +264,7 @@ static struct device_info boards[] = { > + "SupportList:\r\n" > + "{product_name:Archer > C2600,product_ver:1.0.0,special_id:00000000}\r\n", > + .support_trail = '\x00', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"SBL1", 0x00000, 0x20000}, > +@@ -303,6 +309,7 @@ static struct device_info boards[] = { > + "product_ver:2.0.0," > + "special_id:00000000}\r\n", > + .support_trail = '\x00', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x40000}, > +@@ -337,6 +344,7 @@ static struct device_info boards[] = { > + "product_ver:1.0.0," > + "special_id:00000000}\n", > + .support_trail = '\x00', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x40000}, > +@@ -369,6 +377,7 @@ static struct device_info boards[] = { > + "SupportList:\r\n" > + "EAP120(TP-LINK|UN|N300-2):1.0\r\n", > + .support_trail = '\xff', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x20000}, > +@@ -398,6 +407,7 @@ static struct device_info boards[] = { > + "SupportList:\n" > + > "{product_name:TL-WR1043ND,product_ver:4.0.0,special_id:45550000}\n", > + .support_trail = '\x00', > ++ .soft_ver = NULL, > + > + /** > + We use a bigger os-image partition than the stock > images (and thus > +@@ -441,6 +451,7 @@ static struct device_info boards[] = { > + > "{product_name:RE450,product_ver:1.0.0,special_id:4B520000}\r\n" > + > "{product_name:RE450,product_ver:1.0.0,special_id:55534100}\r\n", > + .support_trail = '\x00', > ++ .soft_ver = NULL, > + > + /** > + The flash partition table for RE450; @@ -569,6 +580,23 @@ > static > +struct image_partition_entry > make_soft_version(uint32_t rev) { > + return entry; > + } > + > ++static struct image_partition_entry > ++make_soft_version_from_string(const > char *soft_ver) { > ++ /** String length _including_ the terminating zero byte */ > ++ uint32_t ver_len = strlen(soft_ver) + 1; > ++ /** Partition contains 64 bit header, the version string, and one > additional null byte */ > ++ size_t partition_len = 2*sizeof(uint32_t) + ver_len + 1; > ++ struct image_partition_entry entry = > alloc_image_partition("soft-version", partition_len); > ++ > ++ uint32_t *len = (uint32_t *)entry.data; > ++ len[0] = htonl(ver_len); > ++ len[1] = 0; > ++ memcpy(&len[2], soft_ver, ver_len); > ++ > ++ entry.data[partition_len - 1] = 0; > ++ > ++ return entry; > ++} > ++ > + /** Generates the support-list partition */ static struct > + image_partition_entry make_support_list(const struct > device_info *info) { > + size_t len = strlen(info->support_list); @@ -799,7 +827,11 @@ static > +void build_image(const char *output, > + struct image_partition_entry parts[6] = {}; > + > + parts[0] = make_partition_table(info->partitions); > +- parts[1] = make_soft_version(rev); > ++ if (info->soft_ver) > ++ parts[1] = make_soft_version_from_string(info->soft_ver); > ++ else > ++ parts[1] = make_soft_version(rev); > ++ > + parts[2] = make_support_list(info); > + parts[3] = read_file("os-image", kernel_image, false); > + parts[4] = read_file("file-system", rootfs_image, add_jffs2_eof); > +-- > +2.1.4 > + > diff --git > a/build_patches/openwrt/0006-ar71xx-add-support-for-TP-Link-Archer-C25- > v1. > patch > b/build_patches/openwrt/0006-ar71xx-add-support-for-TP-Link-Archer-C25- > v1. > patch > new file mode 100644 > index 0000000..aa0f9ce > --- /dev/null > +++ > b/build_patches/openwrt/0006-ar71xx-add-support-for-TP-Link-Archer-C25- > v1. > patch > @@ -0,0 +1,499 @@ > +From a5290bd7279f0aa4a7129ce103fec154239ddd86 Mon Sep 17 00:00:00 > 2001 > +From: Ludwig Thomeczek <ledesrc@wxorx.net> > +Date: Sat, 22 Apr 2017 18:21:47 +0200 > +Subject: [PATCH 6/7] ar71xx: add support for TP-Link Archer C25 v1 > + > +The TP-Link Archer C25 is a low-cost dual-band router. > + > +Specification: > + > +- CPU: Atheros QCA9561 775 MHz > +- RAM: 64 MB > +- Flash: 8 MB > +- Wifi: 3x3 2.4 GHz (integrated), 1x1 5 GHz QCA9887 > +- NET: 5x 10/100 Mbps Ethernet > + > +Some LEDs are controlled by an additional 74HC595 chip. > + > +Signed-off-by: Ludwig Thomeczek <ledesrc@wxorx.net> [minor code style > +fixes, boards alphabetical order fixes, reworked commit message] > +Signed-off-by: Piotr Dymacz <pepe2k@gmail.com> [Rebased on v17.01.2] > +Signed-off-by: Tim Niemeyer <tim@tnx-x.org> > +--- > + target/linux/ar71xx/base-files/etc/board.d/01_leds | 9 + > + .../linux/ar71xx/base-files/etc/board.d/02_network | 1 + > + target/linux/ar71xx/base-files/etc/diag.sh | 1 + > + .../etc/hotplug.d/firmware/11-ath10k-caldata | 1 + > + target/linux/ar71xx/base-files/lib/ar71xx.sh | 3 + > + .../ar71xx/base-files/lib/upgrade/platform.sh | 1 + > + target/linux/ar71xx/config-4.4 | 3 + > + .../ar71xx/files/arch/mips/ath79/Kconfig.openwrt | 11 + > + target/linux/ar71xx/files/arch/mips/ath79/Makefile | 1 + > + .../files/arch/mips/ath79/mach-archer-c25-v1.c | 227 > +++++++++++++++++++++ > + .../linux/ar71xx/files/arch/mips/ath79/machtypes.h | 1 + > + target/linux/ar71xx/image/tp-link.mk | 24 +++ > + target/linux/ar71xx/mikrotik/config-default | 1 + > + target/linux/ar71xx/nand/config-default | 1 + > + 14 files changed, 285 insertions(+) > + create mode 100644 > target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c > + > +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 0279dfc..3aa2bfb 100755 > +--- a/target/linux/ar71xx/base-files/etc/board.d/01_leds > ++++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds > +@@ -49,6 +49,15 @@ antrouter-r1) > + ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan" "phy0tpt" > + ucidef_set_led_default "btc" "BTC" "$board:green:btc" "0" > + ;; > ++archer-c25-v1) > ++ ucidef_set_led_netdev "wan" "WAN" "$board:green:wan" "eth0" > ++ ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan2g" > "phy1tpt" > ++ ucidef_set_led_wlan "wlan5g" "WLAN5G" "$board:green:wlan5g" > "phy0tpt" > ++ ucidef_set_led_switch "lan1" "LAN1" "$board:green:lan1" "switch0" > "0x10" > ++ ucidef_set_led_switch "lan2" "LAN2" "$board:green:lan2" "switch0" > "0x08" > ++ ucidef_set_led_switch "lan3" "LAN3" "$board:green:lan3" "switch0" > "0x04" > ++ ucidef_set_led_switch "lan4" "LAN4" "$board:green:lan4" "switch0" > "0x02" > ++ ;; > + arduino-yun) > + ucidef_set_led_wlan "wlan" "WLAN" "arduino:blue:wlan" "phy0tpt" > + ucidef_set_led_usbdev "usb" "USB" "arduino:white:usb" "1-1.1" > +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 c8c7827..4404e80 100755 > +--- a/target/linux/ar71xx/base-files/etc/board.d/02_network > ++++ b/target/linux/ar71xx/base-files/etc/board.d/02_network > +@@ -122,6 +122,7 @@ ar71xx_setup_interfaces() > + a60|\ > + alfa-ap96|\ > + alfa-nx|\ > ++ archer-c25-v1|\ > + dr344|\ > + gl-ar150|\ > + gl-ar300m|\ > +diff --git a/target/linux/ar71xx/base-files/etc/diag.sh > b/target/linux/ar71xx/base-files/etc/diag.sh > +index 7b8aac8..cf6278c 100644 > +--- a/target/linux/ar71xx/base-files/etc/diag.sh > ++++ b/target/linux/ar71xx/base-files/etc/diag.sh > +@@ -47,6 +47,7 @@ get_status_led() { > + ap135-020) > + status_led="ap135:green:status" > + ;; > ++ archer-c25-v1|\ > + mr12|\ > + mr16|\ > + nbg6616|\ > +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 b3e23c9..68f90de 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 > +@@ -92,6 +92,7 @@ case "$FIRMWARE" in > + ath10kcal_extract "art" 20480 2116 > + ath10kcal_patch_mac $(macaddr_add $(cat > /sys/class/net/eth0/address) -2) > + ;; > ++ archer-c25-v1|\ > + tl-wdr6500-v2) > + ath10kcal_extract "art" 20480 2116 > + ath10kcal_patch_mac $(macaddr_add $(cat > /sys/class/net/eth1/address) -2) > +diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh > b/target/linux/ar71xx/base-files/lib/ar71xx.sh > +index b035535..0d01c5e 100755 > +--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh > ++++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh > +@@ -457,6 +457,9 @@ ar71xx_board_detect() { > + *AP90Q) > + name="ap90q" > + ;; > ++ *"Archer C25 v1") > ++ name="archer-c25-v1" > ++ ;; > + *"Archer C5") > + name="archer-c5" > + ;; > +diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh > b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh > +index 580e09a..e2aaceb 100755 > +--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh > ++++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh > +@@ -205,6 +205,7 @@ platform_check_image() { > + airrouter|\ > + ap132|\ > + ap90q|\ > ++ archer-c25-v1|\ > + bullet-m|\ > + c-55|\ > + carambola2|\ > +diff --git a/target/linux/ar71xx/config-4.4 > b/target/linux/ar71xx/config-4.4 > +index ff6bb13..79308e8 100644 > +--- a/target/linux/ar71xx/config-4.4 > ++++ b/target/linux/ar71xx/config-4.4 > +@@ -50,6 +50,7 @@ CONFIG_ATH79_MACH_AP152=y # > CONFIG_ATH79_MACH_AP81 > +is not set CONFIG_ATH79_MACH_AP90Q=y > CONFIG_ATH79_MACH_AP96=y > ++CONFIG_ATH79_MACH_ARCHER_C25_V1=y > + CONFIG_ATH79_MACH_ARCHER_C7=y > + CONFIG_ATH79_MACH_ARDUINO_YUN=y > + CONFIG_ATH79_MACH_AW_NR580=y > +@@ -269,6 +270,7 @@ CONFIG_GENERIC_SMP_IDLE_THREAD=y > +CONFIG_GENERIC_TIME_VSYSCALL=y CONFIG_GPIOLIB=y > +CONFIG_GPIOLIB_IRQCHIP=y > ++CONFIG_GPIO_74X164=y > + CONFIG_GPIO_DEVRES=y > + # CONFIG_GPIO_LATCH is not set > + CONFIG_GPIO_NXP_74HC153=y > +@@ -335,6 +337,7 @@ CONFIG_LEDS_NU801=y CONFIG_LIBFDT=y > +CONFIG_MARVELL_PHY=y CONFIG_MDIO_BITBANG=y > ++CONFIG_SPI_GPIO=y > + CONFIG_MDIO_BOARDINFO=y > + CONFIG_MDIO_GPIO=y > + CONFIG_MICREL_PHY=y > +diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt > b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt > +index 76ba6fa..d49659c 100644 > +--- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt > ++++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt > +@@ -1224,6 +1224,17 @@ config ATH79_MACH_BSB > + select ATH79_DEV_USB > + select ATH79_DEV_WMAC > + > ++config ATH79_MACH_ARCHER_C25_V1 > ++ bool "TP-LINK Archer C25 v1 support" > ++ select SOC_QCA956X > ++ 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_WMAC > ++ > ++ > + config ATH79_MACH_ARCHER_C7 > + bool "TP-LINK Archer C5/C7/TL-WDR4900 v2 board support" > + select SOC_QCA955X > +diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Makefile > b/target/linux/ar71xx/files/arch/mips/ath79/Makefile > +index c91d03f..fc28716 100644 > +--- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile > ++++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile > +@@ -55,6 +55,7 @@ obj-$(CONFIG_ATH79_MACH_AP147) > += > mach-ap147.o > + obj-$(CONFIG_ATH79_MACH_AP152) += mach- > ap152.o > + obj-$(CONFIG_ATH79_MACH_AP90Q) += mach- > ap90q.o > + obj-$(CONFIG_ATH79_MACH_AP96) += mach- > ap96.o > ++obj-$(CONFIG_ATH79_MACH_ARCHER_C25_V1) += > mach-archer-c25-v1.o > + obj-$(CONFIG_ATH79_MACH_ARCHER_C7) += mach-archer-c7.o > + obj-$(CONFIG_ATH79_MACH_ARDUINO_YUN) += mach- > arduino-yun.o > + obj-$(CONFIG_ATH79_MACH_AW_NR580) += mach-aw-nr580.o > +diff --git > a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c > b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c > +new file mode 100644 > +index 0000000..a0f001c > +--- /dev/null > ++++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c > +@@ -0,0 +1,227 @@ > ++/* > ++ * TP-Link Archer C25 v1 board support > ++ * > ++ * Copyright (C) 2017 Ludwig Thomeczek <ledesrc@wxorx.net> > ++ * based on mach-archer-c60/C59-v1.c > ++ * Copyright (C) 2016 Henryk Heisig <hyniu@o2.pl> > ++ * > ++ * 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 <linux/platform_device.h> > ++#include <linux/ath9k_platform.h> > ++#include <linux/ar8216_platform.h> > ++#include <asm/mach-ath79/ar71xx_regs.h> #include <linux/gpio.h> > ++ > ++#include "common.h" > ++#include "dev-m25p80.h" > ++#include "machtypes.h" > ++#include "pci.h" > ++#include "dev-ap9x-pci.h" > ++#include "dev-eth.h" > ++#include "dev-gpio-buttons.h" > ++#include "dev-leds-gpio.h" > ++#include "dev-spi.h" > ++#include "dev-usb.h" > ++#include "dev-wmac.h" > ++#include <linux/spi/spi_gpio.h> > ++#include <linux/spi/74x164.h> > ++ > ++#define ARCHER_C25_GPIO_SHIFT_OE 21 /* OE, Output Enable */ > ++#define ARCHER_C25_GPIO_SHIFT_SER 14 /* DS, Data Serial Input */ > ++#define ARCHER_C25_GPIO_SHIFT_SRCLK 15 /* SHCP, Shift Reg Clock > Input > */ > ++#define ARCHER_C25_GPIO_SHIFT_SRCLR 19 /* MR, Master Reset */ > ++#define ARCHER_C25_GPIO_SHIFT_RCLK 16 /* STCP, Storage Reg Clock > Input */ > ++ > ++#define ARCHER_C25_74HC_GPIO_BASE > QCA956X_GPIO_COUNT > ++#define ARCHER_C25_74HC_GPIO_LED_WAN_AMBER 27 > ++#define ARCHER_C25_74HC_GPIO_LED_WAN_GREEN 28 > ++#define ARCHER_C25_74HC_GPIO_LED_WLAN2 29 > ++#define ARCHER_C25_74HC_GPIO_LED_WLAN5 30 > ++#define ARCHER_C25_74HC_GPIO_LED_LAN1 23 > ++#define ARCHER_C25_74HC_GPIO_LED_LAN2 24 > ++#define ARCHER_C25_74HC_GPIO_LED_LAN3 25 > ++#define ARCHER_C25_74HC_GPIO_LED_LAN4 26 > ++ > ++#define ARCHER_C25_V1_SSR_BIT_0 0 > ++#define ARCHER_C25_V1_SSR_BIT_1 1 > ++#define ARCHER_C25_V1_SSR_BIT_2 2 > ++#define ARCHER_C25_V1_SSR_BIT_3 3 > ++#define ARCHER_C25_V1_SSR_BIT_4 4 > ++#define ARCHER_C25_V1_SSR_BIT_5 5 > ++#define ARCHER_C25_V1_SSR_BIT_6 6 > ++#define ARCHER_C25_V1_SSR_BIT_7 7 > ++ > ++ > ++#define ARCHER_C25_V1_KEYS_POLL_INTERVAL 20 > ++#define ARCHER_C25_V1_KEYS_DEBOUNCE_INTERVAL \ > ++ (3 * > ARCHER_C25_V1_KEYS_POLL_INTERVAL) > ++ > ++#define ARCHER_C25_V1_GPIO_BTN_RESET 1 > ++#define ARCHER_C25_V1_GPIO_BTN_RFKILL 22 > ++ > ++#define ARCHER_C25_V1_GPIO_LED_POWER 17 > ++#define ARCHER_C25_V1_GPIO_LED_WPS 2 > ++ > ++#define ARCHER_C25_V1_WMAC_CALDATA_OFFSET 0x1000 > ++ > ++static struct spi_gpio_platform_data archer_c25_v1_spi_data = { > ++ .sck = ARCHER_C25_GPIO_SHIFT_SRCLK, > ++ .miso = SPI_GPIO_NO_MISO, > ++ .mosi = ARCHER_C25_GPIO_SHIFT_SER, > ++ .num_chipselect = 1, > ++}; > ++ > ++static u8 archer_c25_v1_ssr_initdata[] __initdata = { > ++ BIT(ARCHER_C25_V1_SSR_BIT_7) | > ++ BIT(ARCHER_C25_V1_SSR_BIT_6) | > ++ BIT(ARCHER_C25_V1_SSR_BIT_5) | > ++ BIT(ARCHER_C25_V1_SSR_BIT_4) | > ++ BIT(ARCHER_C25_V1_SSR_BIT_3) | > ++ BIT(ARCHER_C25_V1_SSR_BIT_2) | > ++ BIT(ARCHER_C25_V1_SSR_BIT_1) > ++}; > ++ > ++static struct gen_74x164_chip_platform_data archer_c25_v1_ssr_data = { > ++ .base = ARCHER_C25_74HC_GPIO_BASE, > ++ .num_registers = ARRAY_SIZE(archer_c25_v1_ssr_initdata), > ++ .init_data = archer_c25_v1_ssr_initdata, }; > ++ > ++static struct platform_device archer_c25_v1_spi_device = { > ++ .name = "spi_gpio", > ++ .id = 1, > ++ .dev = { > ++ .platform_data = &archer_c25_v1_spi_data, > ++ }, > ++}; > ++ > ++static struct spi_board_info archer_c25_v1_spi_info[] = { > ++ { > ++ .bus_num = 1, > ++ .chip_select = 0, > ++ .max_speed_hz = 10000000, > ++ .modalias = "74x164", > ++ .platform_data = &archer_c25_v1_ssr_data, > ++ .controller_data = (void *) > ARCHER_C25_GPIO_SHIFT_RCLK, > ++ }, > ++}; > ++ > ++static struct gpio_led archer_c25_v1_leds_gpio[] __initdata = { > ++ { > ++ .name = "archer-c25-v1:green:power", > ++ .gpio = ARCHER_C25_V1_GPIO_LED_POWER, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:wps", > ++ .gpio = ARCHER_C25_V1_GPIO_LED_WPS, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:wlan2g", > ++ .gpio = ARCHER_C25_74HC_GPIO_LED_WLAN2, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:wlan5g", > ++ .gpio = ARCHER_C25_74HC_GPIO_LED_WLAN5, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:lan1", > ++ .gpio = ARCHER_C25_74HC_GPIO_LED_LAN1, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:lan2", > ++ .gpio = ARCHER_C25_74HC_GPIO_LED_LAN2, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:lan3", > ++ .gpio = ARCHER_C25_74HC_GPIO_LED_LAN3, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:lan4", > ++ .gpio = ARCHER_C25_74HC_GPIO_LED_LAN4, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:wan", > ++ .gpio = > ARCHER_C25_74HC_GPIO_LED_WAN_GREEN, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:amber:wan", > ++ .gpio = > ARCHER_C25_74HC_GPIO_LED_WAN_AMBER, > ++ .active_low = 1, > ++ }, > ++}; > ++ > ++static struct gpio_keys_button archer_c25_v1_gpio_keys[] __initdata = { > ++ { > ++ .desc = "Reset button", > ++ .type = EV_KEY, > ++ .code = KEY_RESTART, > ++ .debounce_interval = > ARCHER_C25_V1_KEYS_DEBOUNCE_INTERVAL, > ++ .gpio = ARCHER_C25_V1_GPIO_BTN_RESET, > ++ .active_low = 1, > ++ }, { > ++ .desc = "RFKILL button", > ++ .type = EV_KEY, > ++ .code = KEY_RFKILL, > ++ .debounce_interval = > ARCHER_C25_V1_KEYS_DEBOUNCE_INTERVAL, > ++ .gpio = > ARCHER_C25_V1_GPIO_BTN_RFKILL, > ++ .active_low = 1, > ++ }, > ++}; > ++ > ++static void __init archer_c25_v1_setup(void) { > ++ u8 *mac = (u8 *) KSEG1ADDR(0x1f7e0008); > ++ u8 *art = (u8 *) KSEG1ADDR(0x1f7f0000); > ++ > ++ ath79_register_m25p80(NULL); > ++ > ++ spi_register_board_info(archer_c25_v1_spi_info, > ++ ARRAY_SIZE(archer_c25_v1_spi_info)); > ++ > ++ platform_device_register(&archer_c25_v1_spi_device); > ++ > ++ gpio_request_one(ARCHER_C25_GPIO_SHIFT_OE, > ++ GPIOF_OUT_INIT_LOW | > GPIOF_EXPORT_DIR_FIXED, > ++ "LED control"); > ++ > ++ gpio_request_one(ARCHER_C25_GPIO_SHIFT_SRCLR, > ++ GPIOF_OUT_INIT_HIGH | > GPIOF_EXPORT_DIR_FIXED, > ++ "LED reset"); > ++ > ++ ath79_register_leds_gpio(-1, > ARRAY_SIZE(archer_c25_v1_leds_gpio), > ++ archer_c25_v1_leds_gpio); > ++ > ++ ath79_register_gpio_keys_polled(-1, > ARCHER_C25_V1_KEYS_POLL_INTERVAL, > ++ > ARRAY_SIZE(archer_c25_v1_gpio_keys), > ++ archer_c25_v1_gpio_keys); > ++ > ++ ath79_register_mdio(0, 0x0); > ++ ath79_register_mdio(1, 0x0); > ++ > ++ ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0); > ++ ath79_init_mac(ath79_eth1_data.mac_addr, mac, 1); > ++ > ++ /* WAN port */ > ++ ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; > ++ ath79_eth0_data.speed = SPEED_100; > ++ ath79_eth0_data.duplex = DUPLEX_FULL; > ++ ath79_eth0_data.phy_mask = BIT(4); > ++ ath79_register_eth(0); > ++ > ++ /* LAN ports */ > ++ ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII; > ++ ath79_eth1_data.speed = SPEED_1000; > ++ ath79_eth1_data.duplex = DUPLEX_FULL; > ++ ath79_switch_data.phy_poll_mask |= BIT(4); > ++ ath79_switch_data.phy4_mii_en = 1; > ++ ath79_register_eth(1); > ++ > ++ ath79_register_wmac(art + > ARCHER_C25_V1_WMAC_CALDATA_OFFSET, mac); > ++ ap91_pci_init(NULL, NULL); > ++} > ++ > ++MIPS_MACHINE(ATH79_MACH_ARCHER_C25_V1, "ARCHER-C25-V1", "TP- > LINK > ++Archer > C25 v1", > ++ archer_c25_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 b9a8e3e..53f0d1c 100644 > +--- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h > ++++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h > +@@ -39,6 +39,7 @@ enum ath79_mach_type { > + ATH79_MACH_AP152, /* Atheros AP152 reference > board */ > + ATH79_MACH_AP90Q, /* YunCore AP90Q */ > + ATH79_MACH_AP96, /* Atheros AP96 */ > ++ ATH79_MACH_ARCHER_C25_V1, /* TP-LINK Archer C25 > V1 > board */ > + ATH79_MACH_ARCHER_C5, /* TP-LINK Archer C5 > board > */ > + ATH79_MACH_ARCHER_C7, /* TP-LINK Archer C7 > board > */ > + ATH79_MACH_ARCHER_C7_V2, /* TP-LINK Archer C7 > V2 > board */ > +diff --git a/target/linux/ar71xx/image/tp-link.mk > b/target/linux/ar71xx/image/tp-link.mk > +index 1c88f43..f70c12c 100644 > +--- a/target/linux/ar71xx/image/tp-link.mk > ++++ b/target/linux/ar71xx/image/tp-link.mk > +@@ -45,6 +45,14 @@ define Build/mktplinkfw-kernel > + @mv $@.new $@ > + endef > + > ++define Build/uImageArcher > ++ mkimage -A $(LINUX_KARCH) \ > ++ -O linux -T kernel \ > ++ -C $(1) -a $(KERNEL_LOADADDR) -e $(if > $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \ > ++ -n '$(call toupper,$(LINUX_KARCH)) LEDE > Linux-$(LINUX_VERSION)' -d $@ $@.new > ++ @mv $@.new $@ > ++endef > ++ > + define Device/tplink > + TPLINK_HWREV := 0x1 > + TPLINK_HEADER_VERSION := 1 > +@@ -95,6 +103,22 @@ $(Device/tplink) > + IMAGE_SIZE := 15872k > + endef > + > ++define Device/archer-c25-v1 > ++ DEVICE_TITLE := TP-LINK Archer C25 v1 > ++ DEVICE_PACKAGES := kmod-ath10k ath10k-firmware-qca9887 > ++ BOARDNAME := ARCHER-C25-V1 > ++ TPLINK_BOARD_NAME := ARCHER-C25-V1 > ++ DEVICE_PROFILE := ARCHERC25V1 > ++ IMAGE_SIZE := 7808k > ++ LOADER_TYPE := elf > ++ KERNEL := kernel-bin | patch-cmdline | lzma | uImageArcher lzma > ++ IMAGES := sysupgrade.bin factory.bin > ++ IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade > ++ IMAGE/factory.bin := append-rootfs | tplink-safeloader factory > ++ MTDPARTS := > spi0.0:128k(factory-uboot)ro,64k(u-boot)ro,1536k(kernel),6272k(rootfs),128 > k(config)ro,64k(art)ro,7808k@0x30000(firmware) > ++endef > ++TARGET_DEVICES += archer-c25-v1 > ++ > + define Device/cpe510-520 > + DEVICE_TITLE := TP-LINK CPE510/520 > + DEVICE_PACKAGES := rssileds > +diff --git a/target/linux/ar71xx/mikrotik/config-default > b/target/linux/ar71xx/mikrotik/config-default > +index 44ea327..3f11c23 100644 > +--- a/target/linux/ar71xx/mikrotik/config-default > ++++ b/target/linux/ar71xx/mikrotik/config-default > +@@ -15,6 +15,7 @@ > + # CONFIG_ATH79_MACH_AP152 is not set > + # CONFIG_ATH79_MACH_AP90Q is not set > + # CONFIG_ATH79_MACH_AP96 is not set > ++# CONFIG_ATH79_MACH_ARCHER_C25_V1 is not set > + # CONFIG_ATH79_MACH_ARCHER_C7 is not set # > +CONFIG_ATH79_MACH_ARDUINO_YUN is not set # > CONFIG_ATH79_MACH_AW_NR580 > +is not set diff --git a/target/linux/ar71xx/nand/config-default > b/target/linux/ar71xx/nand/config-default > +index 515266b..6357531 100644 > +--- a/target/linux/ar71xx/nand/config-default > ++++ b/target/linux/ar71xx/nand/config-default > +@@ -8,6 +8,7 @@ > + # CONFIG_ATH79_MACH_AP136 is not set > + # CONFIG_ATH79_MACH_AP147 is not set > + # CONFIG_ATH79_MACH_AP96 is not set > ++# CONFIG_ATH79_MACH_ARCHER_C25_V1 is not set > + # CONFIG_ATH79_MACH_ARCHER_C7 is not set # > CONFIG_ATH79_MACH_AW_NR580 > +is not set # CONFIG_ATH79_MACH_CAP324 is not set > +-- > +2.1.4 > + > diff --git > a/build_patches/openwrt/0007-firmware-utils-tplink-safeloader-add-TP- > Link- > Archer-.patch > b/build_patches/openwrt/0007-firmware-utils-tplink-safeloader-add-TP- > Link- > Archer-.patch > new file mode 100644 > index 0000000..861ccfd > --- /dev/null > +++ > b/build_patches/openwrt/0007-firmware-utils-tplink-safeloader-add-TP- > Link- > Archer-.patch > @@ -0,0 +1,112 @@ > +From ae91fb7f8cef0fbd9b0ee707ce577ac9c5cdf2f2 Mon Sep 17 00:00:00 > 2001 > +From: Ludwig Thomeczek <ledesrc@wxorx.net> > +Date: Sat, 13 May 2017 11:40:48 +0200 > +Subject: [PATCH 7/7] firmware-utils: tplink-safeloader: add TP-Link > Archer C25 > + v1 > + > +This adds the necessary firmware layout definitions for the Archer C25. > +It has an addtional partition containing some static data > +("extra-para") without which no factory flash is possible, therefore > +put_data() has been added. > + > +Signed-off-by: Ludwig Thomeczek <ledesrc@wxorx.net> [Rebased on > +v17.01.2] > +Signed-off-by: Tim Niemeyer <tim@tnx-x.org> > +--- > + tools/firmware-utils/src/tplink-safeloader.c | 59 > +++++++++++++++++++++++++++- > + 1 file changed, 58 insertions(+), 1 deletion(-) > + > +diff --git a/tools/firmware-utils/src/tplink-safeloader.c > b/tools/firmware-utils/src/tplink-safeloader.c > +index 688cdac..2468426 100644 > +--- a/tools/firmware-utils/src/tplink-safeloader.c > ++++ b/tools/firmware-utils/src/tplink-safeloader.c > +@@ -299,6 +299,48 @@ static struct device_info boards[] = { > + .last_sysupgrade_partition = "file-system" > + }, > + > ++ /** Firmware layout for the C25v1 */ > ++ { > ++ .id = "ARCHER-C25-V1", > ++ .support_list = > ++ "SupportList:\n" > ++ > "{product_name:ArcherC25,product_ver:1.0.0,special_id:00000000}\n" > ++ > "{product_name:ArcherC25,product_ver:1.0.0,special_id:55530000}\n" > ++ > "{product_name:ArcherC25,product_ver:1.0.0,special_id:45550000}\n", > ++ .support_trail = '\x00', > ++ .soft_ver = "soft_ver:1.0.0\n", > ++ > ++ /** > ++ We use a bigger os-image partition than the stock > images (and thus > ++ smaller file-system), as our kernel doesn't fit in the > stock firmware's > ++ 1MB os-image. > ++ */ > ++ .partitions = { > ++ {"factory-boot", 0x00000, 0x20000}, > ++ {"fs-uboot", 0x20000, 0x10000}, > ++ {"os-image", 0x30000, 0x180000}, /* Stock: > base 0x30000 size 0x100000 */ > ++ {"file-system", 0x1b0000, 0x620000}, /* Stock: > base 0x130000 size 0x6a0000 */ > ++ {"user-config", 0x7d0000, 0x04000}, > ++ {"default-mac", 0x7e0000, 0x00100}, > ++ {"device-id", 0x7e0100, 0x00100}, > ++ {"extra-para", 0x7e0200, 0x00100}, > ++ {"pin", 0x7e0300, 0x00100}, > ++ {"support-list", 0x7e0400, 0x00400}, > ++ {"soft-version", 0x7e0800, 0x00400}, > ++ {"product-info", 0x7e0c00, 0x01400}, > ++ {"partition-table", 0x7e2000, 0x01000}, > ++ {"profile", 0x7e3000, 0x01000}, > ++ {"default-config", 0x7e4000, 0x04000}, > ++ {"merge-config", 0x7ec000, 0x02000}, > ++ {"qos-db", 0x7ee000, 0x02000}, > ++ {"radio", 0x7f0000, 0x10000}, > ++ {NULL, 0, 0} > ++ }, > ++ > ++ .first_sysupgrade_partition = "os-image", > ++ .last_sysupgrade_partition = "file-system", > ++ }, > ++ > + /** Firmware layout for the C5 */ > + { > + .id = "ARCHER-C5-V2", > +@@ -643,6 +685,15 @@ static struct image_partition_entry > +read_file(const > char *part_name, const char > + return entry; > + } > + > ++/** Creates a new image partition from arbitrary data */ static struct > ++image_partition_entry put_data(const char *part_name, > const char *datain, size_t len) { > ++ > ++ struct image_partition_entry entry = > alloc_image_partition(part_name, len); > ++ > ++ memcpy(entry.data, datain, len); > ++ > ++ return entry; > ++} > + > + /** > + Copies a list of image partitions into an image buffer and > + generates > the image partition table while doing so > +@@ -824,7 +875,8 @@ static void build_image(const char *output, > + bool add_jffs2_eof, > + bool sysupgrade, > + const struct device_info *info) { > +- struct image_partition_entry parts[6] = {}; > ++ > ++ struct image_partition_entry parts[7] = {}; > + > + parts[0] = make_partition_table(info->partitions); > + if (info->soft_ver) > +@@ -836,6 +888,11 @@ static void build_image(const char *output, > + parts[3] = read_file("os-image", kernel_image, false); > + parts[4] = read_file("file-system", rootfs_image, add_jffs2_eof); > + > ++ if (strcasecmp(info->id, "ARCHER-C25-V1") == 0) { > ++ const char mdat[11] = {0x00, 0x00, 0x00, 0x02, 0x00, 0x00, > 0x00, 0x00, 0x01, 0x00, 0x00}; > ++ parts[5] = put_data("extra-para", mdat, 11); > ++ } > ++ > + size_t len; > + void *image; > + if (sysupgrade) > +-- > +2.1.4 > + > diff --git a/src/packages/fff/fff-network/Makefile > b/src/packages/fff/fff-network/Makefile > index fee3f98..d34016c 100644 > --- a/src/packages/fff/fff-network/Makefile > +++ b/src/packages/fff/fff-network/Makefile > @@ -1,7 +1,7 @@ > include $(TOPDIR)/rules.mk > > PKG_NAME:=fff-network > -PKG_VERSION:=0.0.6 > +PKG_VERSION:=0.0.7 > PKG_RELEASE:=1 > > PKG_BUILD_DIR:=$(BUILD_DIR)/fff-network > diff --git a/src/packages/fff/fff-network/ar71xx/network.archer-c25-v1 > b/src/packages/fff/fff-network/ar71xx/network.archer-c25-v1 > new file mode 100644 > index 0000000..e524545 > --- /dev/null > +++ b/src/packages/fff/fff-network/ar71xx/network.archer-c25-v1 > @@ -0,0 +1,8 @@ > +WANDEV=eth0 > +SWITCHDEV=eth1 > +CLIENT_PORTS="1 2 0t" > +WAN_PORTS="" > +BATMAN_PORTS="3 4 0t" > + > +ETHMESHMAC=eth1 > +ROUTERMAC=eth0 > -- > 2.1.4 > > -- > franken-dev mailing list > franken-dev@freifunk.net > http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net
Habe gerade versucht, den neueren Treiber aus der Gluon-Diskussion zu benutzen: https://github.com/freifunk-gluon/gluon/issues/1123 https://github.com/rotanid/source/commit/89c17b4699946b8ebf916ea2a008015e26b aaa89 Das Ergebnis ist dasselbe, sobald 5 Ghz aktiviert ist, erfolgt alle 2 min ein Neustart. -----Original Message----- From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf Of Adrian Schmutzler Sent: Donnerstag, 27. Juli 2017 13:31 To: 'Tim Niemeyer' <tim@tn-x.org>; franken-dev@freifunk.net Subject: RE: [PATCH v2 4/4] Add support for TP-Link C25 Hallo, > Reviewed-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> > Tested-by: Adrian Schmutzler <freifunk@adrianschmutzler.de> Beides gilt nur in Kombination mit meinem Patch "[5/5] Archer C25: Disable 5 GHz to provide working firmware", der 5 GHz vollständig deaktiviert. Ich bin dafür, das Paket C25 (Patches 1-5) jetzt erstmal zu applien, da er mit 2.4 GHz stabil läuft und somit als Alternative zum 1043 geeignet ist. Den Support für 5 GHz würde ich vorschlagen nachzureichen und nachzupatchen, sobald jemand dazu in der Lage ist (vll. gibts ja auch noch einen neuen Treiber). Wer 5 GHz testen will, bräuchte dann nur den uci set aus dem Patch 5 lokal wieder zu entfernen, die Treiber stehen ja weiterhin drin. Zum 5 GHz nochmal zusammenfassend: - Ich habe alle 2 min. Neustartloop, sobald auch nur ein Interface unter 5 GHz aktiviert ist (egal ob w5ap oder w5mesh) - Nehme ich nur die Treiber ohne -ct, erscheint bei mir der physische Adapter für 5 GHz gar nicht Grüße Adrian > -----Original Message----- > From: franken-dev [mailto:franken-dev-bounces@freifunk.net] On Behalf > Of Tim Niemeyer > Sent: Samstag, 8. Juli 2017 13:00 > To: franken-dev@freifunk.net > Subject: [PATCH v2 4/4] Add support for TP-Link C25 > > Signed-off-by: Tim Niemeyer <tim@tn-x.org> > --- > > Changes in v2: > - Added kernel config for LEDs > - Changed patch format > > bsp/ar71xx/.config | 3 + > bsp/board_ar71xx.bsp | 1 + > ...ils-tplink-safeloader-support-strings-as-.patch | 162 +++++++ ...1xx-add- > support-for-TP-Link-Archer-C25-v1.patch | 499 > +++++++++++++++++++++ > ...ils-tplink-safeloader-add-TP-Link-Archer-.patch | 112 +++++ > src/packages/fff/fff-network/Makefile | 2 +- > .../fff/fff-network/ar71xx/network.archer-c25-v1 | 8 + > 7 files changed, 786 insertions(+), 1 deletion(-) create mode 100644 > build_patches/openwrt/0005-firmware-utils-tplink-safeloader-support- > string > s-as-.patch > create mode 100644 > build_patches/openwrt/0006-ar71xx-add-support-for-TP-Link-Archer-C25- > v1.pa > tch > create mode 100644 > build_patches/openwrt/0007-firmware-utils-tplink-safeloader-add-TP-Lin > k- > Ar > cher-.patch > create mode 100644 > src/packages/fff/fff-network/ar71xx/network.archer-c25-v1 > > diff --git a/bsp/ar71xx/.config b/bsp/ar71xx/.config index 43d063c..b407f7d > 100644 > --- a/bsp/ar71xx/.config > +++ b/bsp/ar71xx/.config > @@ -6,6 +6,8 @@ CONFIG_TARGET_ar71xx_generic=y > CONFIG_TARGET_MULTI_PROFILE=y > CONFIG_TARGET_DEVICE_ar71xx_generic_DEVICE_gl-ar150=y > CONFIG_TARGET_DEVICE_PACKAGES_ar71xx_generic_DEVICE_gl-ar150="" > +CONFIG_TARGET_DEVICE_ar71xx_generic_DEVICE_archer-c25-v1=y > +CONFIG_TARGET_DEVICE_PACKAGES_ar71xx_generic_DEVICE_archer-c25- > v1="-kmo > +d- > ath10k kmod-ath10k-ct -ath10k-firmware-qca9887 > ath10k-firmware-qca9887- ct" > CONFIG_TARGET_DEVICE_ar71xx_generic_DEVICE_archer-c7-v2=y > > CONFIG_TARGET_DEVICE_PACKAGES_ar71xx_generic_DEVICE_archer-c7- > v2="-kmod-at > h10k kmod-ath10k-ct -ath10k-firmware-qca988x ath10k-firmware-qca988x- > ct" > CONFIG_TARGET_DEVICE_ar71xx_generic_DEVICE_cpe210-220=y > @@ -83,6 +85,7 @@ CONFIG_CLEAN_IPKG=y > # CONFIG_KERNEL_DEBUG_INFO is not set # CONFIG_KERNEL_DEBUG_KERNEL > is not set # CONFIG_PACKAGE_ALFRED_VIS is not set > +CONFIG_PACKAGE_ath10k-firmware-qca9887-ct=m > CONFIG_PACKAGE_ath10k-firmware-qca988x-ct=m > CONFIG_PACKAGE_kmod-ath10k-ct=m > CONFIG_PACKAGE_kmod-hwmon-core=m > diff --git a/bsp/board_ar71xx.bsp b/bsp/board_ar71xx.bsp index > 6c541cc..1137b0d 100644 > --- a/bsp/board_ar71xx.bsp > +++ b/bsp/board_ar71xx.bsp > @@ -31,4 +31,5 @@ > images=("lede-ar71xx-generic-cpe210-220-squashfs-sysupgrade.bin" > "lede-ar71xx-generic-tl-wdr4300-v1-squashfs-sysupgrade.bin" > "lede-ar71xx-generic-tl-wdr4310-v1-squashfs-sysupgrade.bin" > "lede-ar71xx-generic-archer-c7-v2-squashfs-sysupgrade.bin" > + "lede-ar71xx-generic-archer-c25-v1-squashfs-sysupgrade.bin" > ) > diff --git > a/build_patches/openwrt/0005-firmware-utils-tplink-safeloader-support-stri > ngs-as-.patch > b/build_patches/openwrt/0005-firmware-utils-tplink-safeloader-support-stri > ngs-as-.patch > new file mode 100644 > index 0000000..289322e > --- /dev/null > +++ > b/build_patches/openwrt/0005-firmware-utils-tplink-safeloader-support-stri > ngs-as-.patch > @@ -0,0 +1,162 @@ > +From e9ef329106fbf7e71718e73aee8b48315dd22a18 Mon Sep 17 00:00:00 > 2001 > +From: Jan Niehusmann <jan@gondor.com> > +Date: Fri, 19 May 2017 09:42:24 +0200 > +Subject: [PATCH 5/7] firmware-utils: tplink-safeloader: support > +strings > as > + soft_version > + > +Some TP-Link routers (C25, C59, C60) contain a version string instead > +of a binary structure in the soft_version partition. > + > +Flashing LEDE from the original firmware's GUI, this version string > +taken from the soft_ver partition of the firmware image is written to > +the router's config partition. > + > +When using tftp recovery to go back to the original Archer C25 > +firmware, a version check compares that version to the version of the > +firmware to be flashed. > + > +Without proper contents in the config partition, reverting to the > +original firmware fails. > + > +Therefore, write the string "soft_ver:1.0.0\n" to that soft_ver > +partition. > + > +Signed-off-by: Jan Niehusmann <jan@gondor.com> [Rebased on v17.01.2] > +Signed-off-by: Tim Niemeyer <tim@tnx-x.org> > +--- > + tools/firmware-utils/src/tplink-safeloader.c | 34 > +++++++++++++++++++++++++++- > + 1 file changed, 33 insertions(+), 1 deletion(-) > + > +diff --git a/tools/firmware-utils/src/tplink-safeloader.c > b/tools/firmware-utils/src/tplink-safeloader.c > +index 4e3d205..688cdac 100644 > +--- a/tools/firmware-utils/src/tplink-safeloader.c > ++++ b/tools/firmware-utils/src/tplink-safeloader.c > +@@ -75,6 +75,7 @@ struct device_info { > + const char *vendor; > + const char *support_list; > + char support_trail; > ++ const char *soft_ver; > + const struct flash_partition_entry partitions[MAX_PARTITIONS+1]; > + const char *first_sysupgrade_partition; > + const char *last_sysupgrade_partition; @@ -130,6 +131,7 @@ static > +struct device_info boards[] = { > + "CPE220(TP-LINK|US|N300-2):1.1\r\n" > + "CPE220(TP-LINK|EU|N300-2):1.1\r\n", > + .support_trail = '\xff', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x20000}, > +@@ -167,6 +169,7 @@ static struct device_info boards[] = { > + "CPE520(TP-LINK|US|N300-5):1.1\r\n" > + "CPE520(TP-LINK|EU|N300-5):1.1\r\n", > + .support_trail = '\xff', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x20000}, > +@@ -198,6 +201,7 @@ static struct device_info boards[] = { > + "WBS210(TP-LINK|US|N300-2):1.20\r\n" > + "WBS210(TP-LINK|EU|N300-2):1.20\r\n", > + .support_trail = '\xff', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x20000}, > +@@ -229,6 +233,7 @@ static struct device_info boards[] = { > + "WBS510(TP-LINK|US|N300-5):1.20\r\n" > + "WBS510(TP-LINK|EU|N300-5):1.20\r\n", > + .support_trail = '\xff', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x20000}, > +@@ -259,6 +264,7 @@ static struct device_info boards[] = { > + "SupportList:\r\n" > + "{product_name:Archer > C2600,product_ver:1.0.0,special_id:00000000}\r\n", > + .support_trail = '\x00', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"SBL1", 0x00000, 0x20000}, > +@@ -303,6 +309,7 @@ static struct device_info boards[] = { > + "product_ver:2.0.0," > + "special_id:00000000}\r\n", > + .support_trail = '\x00', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x40000}, > +@@ -337,6 +344,7 @@ static struct device_info boards[] = { > + "product_ver:1.0.0," > + "special_id:00000000}\n", > + .support_trail = '\x00', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x40000}, > +@@ -369,6 +377,7 @@ static struct device_info boards[] = { > + "SupportList:\r\n" > + "EAP120(TP-LINK|UN|N300-2):1.0\r\n", > + .support_trail = '\xff', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x20000}, > +@@ -398,6 +407,7 @@ static struct device_info boards[] = { > + "SupportList:\n" > + > "{product_name:TL-WR1043ND,product_ver:4.0.0,special_id:45550000}\n", > + .support_trail = '\x00', > ++ .soft_ver = NULL, > + > + /** > + We use a bigger os-image partition than the stock > images (and thus > +@@ -441,6 +451,7 @@ static struct device_info boards[] = { > + > "{product_name:RE450,product_ver:1.0.0,special_id:4B520000}\r\n" > + > "{product_name:RE450,product_ver:1.0.0,special_id:55534100}\r\n", > + .support_trail = '\x00', > ++ .soft_ver = NULL, > + > + /** > + The flash partition table for RE450; @@ -569,6 +580,23 @@ > static > +struct image_partition_entry > make_soft_version(uint32_t rev) { > + return entry; > + } > + > ++static struct image_partition_entry > ++make_soft_version_from_string(const > char *soft_ver) { > ++ /** String length _including_ the terminating zero byte */ > ++ uint32_t ver_len = strlen(soft_ver) + 1; > ++ /** Partition contains 64 bit header, the version string, and one > additional null byte */ > ++ size_t partition_len = 2*sizeof(uint32_t) + ver_len + 1; > ++ struct image_partition_entry entry = > alloc_image_partition("soft-version", partition_len); > ++ > ++ uint32_t *len = (uint32_t *)entry.data; > ++ len[0] = htonl(ver_len); > ++ len[1] = 0; > ++ memcpy(&len[2], soft_ver, ver_len); > ++ > ++ entry.data[partition_len - 1] = 0; > ++ > ++ return entry; > ++} > ++ > + /** Generates the support-list partition */ static struct > + image_partition_entry make_support_list(const struct > device_info *info) { > + size_t len = strlen(info->support_list); @@ -799,7 +827,11 @@ static > +void build_image(const char *output, > + struct image_partition_entry parts[6] = {}; > + > + parts[0] = make_partition_table(info->partitions); > +- parts[1] = make_soft_version(rev); > ++ if (info->soft_ver) > ++ parts[1] = make_soft_version_from_string(info->soft_ver); > ++ else > ++ parts[1] = make_soft_version(rev); > ++ > + parts[2] = make_support_list(info); > + parts[3] = read_file("os-image", kernel_image, false); > + parts[4] = read_file("file-system", rootfs_image, add_jffs2_eof); > +-- > +2.1.4 > + > diff --git > a/build_patches/openwrt/0006-ar71xx-add-support-for-TP-Link-Archer-C25 > - > v1. > patch > b/build_patches/openwrt/0006-ar71xx-add-support-for-TP-Link-Archer-C25 > - > v1. > patch > new file mode 100644 > index 0000000..aa0f9ce > --- /dev/null > +++ > b/build_patches/openwrt/0006-ar71xx-add-support-for-TP-Link-Archer-C25 > - > v1. > patch > @@ -0,0 +1,499 @@ > +From a5290bd7279f0aa4a7129ce103fec154239ddd86 Mon Sep 17 00:00:00 > 2001 > +From: Ludwig Thomeczek <ledesrc@wxorx.net> > +Date: Sat, 22 Apr 2017 18:21:47 +0200 > +Subject: [PATCH 6/7] ar71xx: add support for TP-Link Archer C25 v1 > + > +The TP-Link Archer C25 is a low-cost dual-band router. > + > +Specification: > + > +- CPU: Atheros QCA9561 775 MHz > +- RAM: 64 MB > +- Flash: 8 MB > +- Wifi: 3x3 2.4 GHz (integrated), 1x1 5 GHz QCA9887 > +- NET: 5x 10/100 Mbps Ethernet > + > +Some LEDs are controlled by an additional 74HC595 chip. > + > +Signed-off-by: Ludwig Thomeczek <ledesrc@wxorx.net> [minor code style > +fixes, boards alphabetical order fixes, reworked commit message] > +Signed-off-by: Piotr Dymacz <pepe2k@gmail.com> [Rebased on v17.01.2] > +Signed-off-by: Tim Niemeyer <tim@tnx-x.org> > +--- > + target/linux/ar71xx/base-files/etc/board.d/01_leds | 9 + > + .../linux/ar71xx/base-files/etc/board.d/02_network | 1 + > + target/linux/ar71xx/base-files/etc/diag.sh | 1 + > + .../etc/hotplug.d/firmware/11-ath10k-caldata | 1 + > + target/linux/ar71xx/base-files/lib/ar71xx.sh | 3 + > + .../ar71xx/base-files/lib/upgrade/platform.sh | 1 + > + target/linux/ar71xx/config-4.4 | 3 + > + .../ar71xx/files/arch/mips/ath79/Kconfig.openwrt | 11 + > + target/linux/ar71xx/files/arch/mips/ath79/Makefile | 1 + > + .../files/arch/mips/ath79/mach-archer-c25-v1.c | 227 > +++++++++++++++++++++ > + .../linux/ar71xx/files/arch/mips/ath79/machtypes.h | 1 + > + target/linux/ar71xx/image/tp-link.mk | 24 +++ > + target/linux/ar71xx/mikrotik/config-default | 1 + > + target/linux/ar71xx/nand/config-default | 1 + > + 14 files changed, 285 insertions(+) > + create mode 100644 > target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c > + > +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 0279dfc..3aa2bfb 100755 > +--- a/target/linux/ar71xx/base-files/etc/board.d/01_leds > ++++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds > +@@ -49,6 +49,15 @@ antrouter-r1) > + ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan" "phy0tpt" > + ucidef_set_led_default "btc" "BTC" "$board:green:btc" "0" > + ;; > ++archer-c25-v1) > ++ ucidef_set_led_netdev "wan" "WAN" "$board:green:wan" "eth0" > ++ ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan2g" > "phy1tpt" > ++ ucidef_set_led_wlan "wlan5g" "WLAN5G" "$board:green:wlan5g" > "phy0tpt" > ++ ucidef_set_led_switch "lan1" "LAN1" "$board:green:lan1" "switch0" > "0x10" > ++ ucidef_set_led_switch "lan2" "LAN2" "$board:green:lan2" "switch0" > "0x08" > ++ ucidef_set_led_switch "lan3" "LAN3" "$board:green:lan3" "switch0" > "0x04" > ++ ucidef_set_led_switch "lan4" "LAN4" "$board:green:lan4" "switch0" > "0x02" > ++ ;; > + arduino-yun) > + ucidef_set_led_wlan "wlan" "WLAN" "arduino:blue:wlan" "phy0tpt" > + ucidef_set_led_usbdev "usb" "USB" "arduino:white:usb" "1-1.1" > +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 c8c7827..4404e80 100755 > +--- a/target/linux/ar71xx/base-files/etc/board.d/02_network > ++++ b/target/linux/ar71xx/base-files/etc/board.d/02_network > +@@ -122,6 +122,7 @@ ar71xx_setup_interfaces() > + a60|\ > + alfa-ap96|\ > + alfa-nx|\ > ++ archer-c25-v1|\ > + dr344|\ > + gl-ar150|\ > + gl-ar300m|\ > +diff --git a/target/linux/ar71xx/base-files/etc/diag.sh > b/target/linux/ar71xx/base-files/etc/diag.sh > +index 7b8aac8..cf6278c 100644 > +--- a/target/linux/ar71xx/base-files/etc/diag.sh > ++++ b/target/linux/ar71xx/base-files/etc/diag.sh > +@@ -47,6 +47,7 @@ get_status_led() { > + ap135-020) > + status_led="ap135:green:status" > + ;; > ++ archer-c25-v1|\ > + mr12|\ > + mr16|\ > + nbg6616|\ > +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 b3e23c9..68f90de 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 > +@@ -92,6 +92,7 @@ case "$FIRMWARE" in > + ath10kcal_extract "art" 20480 2116 > + ath10kcal_patch_mac $(macaddr_add $(cat > /sys/class/net/eth0/address) -2) > + ;; > ++ archer-c25-v1|\ > + tl-wdr6500-v2) > + ath10kcal_extract "art" 20480 2116 > + ath10kcal_patch_mac $(macaddr_add $(cat > /sys/class/net/eth1/address) -2) > +diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh > b/target/linux/ar71xx/base-files/lib/ar71xx.sh > +index b035535..0d01c5e 100755 > +--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh > ++++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh > +@@ -457,6 +457,9 @@ ar71xx_board_detect() { > + *AP90Q) > + name="ap90q" > + ;; > ++ *"Archer C25 v1") > ++ name="archer-c25-v1" > ++ ;; > + *"Archer C5") > + name="archer-c5" > + ;; > +diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh > b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh > +index 580e09a..e2aaceb 100755 > +--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh > ++++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh > +@@ -205,6 +205,7 @@ platform_check_image() { > + airrouter|\ > + ap132|\ > + ap90q|\ > ++ archer-c25-v1|\ > + bullet-m|\ > + c-55|\ > + carambola2|\ > +diff --git a/target/linux/ar71xx/config-4.4 > b/target/linux/ar71xx/config-4.4 > +index ff6bb13..79308e8 100644 > +--- a/target/linux/ar71xx/config-4.4 > ++++ b/target/linux/ar71xx/config-4.4 > +@@ -50,6 +50,7 @@ CONFIG_ATH79_MACH_AP152=y # > CONFIG_ATH79_MACH_AP81 > +is not set CONFIG_ATH79_MACH_AP90Q=y > CONFIG_ATH79_MACH_AP96=y > ++CONFIG_ATH79_MACH_ARCHER_C25_V1=y > + CONFIG_ATH79_MACH_ARCHER_C7=y > + CONFIG_ATH79_MACH_ARDUINO_YUN=y > + CONFIG_ATH79_MACH_AW_NR580=y > +@@ -269,6 +270,7 @@ CONFIG_GENERIC_SMP_IDLE_THREAD=y > +CONFIG_GENERIC_TIME_VSYSCALL=y CONFIG_GPIOLIB=y > +CONFIG_GPIOLIB_IRQCHIP=y > ++CONFIG_GPIO_74X164=y > + CONFIG_GPIO_DEVRES=y > + # CONFIG_GPIO_LATCH is not set > + CONFIG_GPIO_NXP_74HC153=y > +@@ -335,6 +337,7 @@ CONFIG_LEDS_NU801=y CONFIG_LIBFDT=y > +CONFIG_MARVELL_PHY=y CONFIG_MDIO_BITBANG=y > ++CONFIG_SPI_GPIO=y > + CONFIG_MDIO_BOARDINFO=y > + CONFIG_MDIO_GPIO=y > + CONFIG_MICREL_PHY=y > +diff --git > +a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt > b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt > +index 76ba6fa..d49659c 100644 > +--- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt > ++++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt > +@@ -1224,6 +1224,17 @@ config ATH79_MACH_BSB > + select ATH79_DEV_USB > + select ATH79_DEV_WMAC > + > ++config ATH79_MACH_ARCHER_C25_V1 > ++ bool "TP-LINK Archer C25 v1 support" > ++ select SOC_QCA956X > ++ 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_WMAC > ++ > ++ > + config ATH79_MACH_ARCHER_C7 > + bool "TP-LINK Archer C5/C7/TL-WDR4900 v2 board support" > + select SOC_QCA955X > +diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Makefile > b/target/linux/ar71xx/files/arch/mips/ath79/Makefile > +index c91d03f..fc28716 100644 > +--- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile > ++++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile > +@@ -55,6 +55,7 @@ obj-$(CONFIG_ATH79_MACH_AP147) > += > mach-ap147.o > + obj-$(CONFIG_ATH79_MACH_AP152) += mach- > ap152.o > + obj-$(CONFIG_ATH79_MACH_AP90Q) += mach- > ap90q.o > + obj-$(CONFIG_ATH79_MACH_AP96) += mach- > ap96.o > ++obj-$(CONFIG_ATH79_MACH_ARCHER_C25_V1) += > mach-archer-c25-v1.o > + obj-$(CONFIG_ATH79_MACH_ARCHER_C7) += mach-archer-c7.o > + obj-$(CONFIG_ATH79_MACH_ARDUINO_YUN) += mach- > arduino-yun.o > + obj-$(CONFIG_ATH79_MACH_AW_NR580) += mach-aw-nr580.o > +diff --git > a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c > b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c > +new file mode 100644 > +index 0000000..a0f001c > +--- /dev/null > ++++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c > +@@ -0,0 +1,227 @@ > ++/* > ++ * TP-Link Archer C25 v1 board support > ++ * > ++ * Copyright (C) 2017 Ludwig Thomeczek <ledesrc@wxorx.net> > ++ * based on mach-archer-c60/C59-v1.c > ++ * Copyright (C) 2016 Henryk Heisig <hyniu@o2.pl> > ++ * > ++ * 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 <linux/platform_device.h> > ++#include <linux/ath9k_platform.h> > ++#include <linux/ar8216_platform.h> > ++#include <asm/mach-ath79/ar71xx_regs.h> #include <linux/gpio.h> > ++ > ++#include "common.h" > ++#include "dev-m25p80.h" > ++#include "machtypes.h" > ++#include "pci.h" > ++#include "dev-ap9x-pci.h" > ++#include "dev-eth.h" > ++#include "dev-gpio-buttons.h" > ++#include "dev-leds-gpio.h" > ++#include "dev-spi.h" > ++#include "dev-usb.h" > ++#include "dev-wmac.h" > ++#include <linux/spi/spi_gpio.h> > ++#include <linux/spi/74x164.h> > ++ > ++#define ARCHER_C25_GPIO_SHIFT_OE 21 /* OE, Output Enable */ > ++#define ARCHER_C25_GPIO_SHIFT_SER 14 /* DS, Data Serial Input */ > ++#define ARCHER_C25_GPIO_SHIFT_SRCLK 15 /* SHCP, Shift Reg Clock > Input > */ > ++#define ARCHER_C25_GPIO_SHIFT_SRCLR 19 /* MR, Master Reset */ > ++#define ARCHER_C25_GPIO_SHIFT_RCLK 16 /* STCP, Storage Reg Clock > Input */ > ++ > ++#define ARCHER_C25_74HC_GPIO_BASE > QCA956X_GPIO_COUNT > ++#define ARCHER_C25_74HC_GPIO_LED_WAN_AMBER 27 > ++#define ARCHER_C25_74HC_GPIO_LED_WAN_GREEN 28 > ++#define ARCHER_C25_74HC_GPIO_LED_WLAN2 29 > ++#define ARCHER_C25_74HC_GPIO_LED_WLAN5 30 > ++#define ARCHER_C25_74HC_GPIO_LED_LAN1 23 > ++#define ARCHER_C25_74HC_GPIO_LED_LAN2 24 > ++#define ARCHER_C25_74HC_GPIO_LED_LAN3 25 > ++#define ARCHER_C25_74HC_GPIO_LED_LAN4 26 > ++ > ++#define ARCHER_C25_V1_SSR_BIT_0 0 > ++#define ARCHER_C25_V1_SSR_BIT_1 1 > ++#define ARCHER_C25_V1_SSR_BIT_2 2 > ++#define ARCHER_C25_V1_SSR_BIT_3 3 > ++#define ARCHER_C25_V1_SSR_BIT_4 4 > ++#define ARCHER_C25_V1_SSR_BIT_5 5 > ++#define ARCHER_C25_V1_SSR_BIT_6 6 > ++#define ARCHER_C25_V1_SSR_BIT_7 7 > ++ > ++ > ++#define ARCHER_C25_V1_KEYS_POLL_INTERVAL 20 > ++#define ARCHER_C25_V1_KEYS_DEBOUNCE_INTERVAL \ > ++ (3 * > ARCHER_C25_V1_KEYS_POLL_INTERVAL) > ++ > ++#define ARCHER_C25_V1_GPIO_BTN_RESET 1 > ++#define ARCHER_C25_V1_GPIO_BTN_RFKILL 22 > ++ > ++#define ARCHER_C25_V1_GPIO_LED_POWER 17 > ++#define ARCHER_C25_V1_GPIO_LED_WPS 2 > ++ > ++#define ARCHER_C25_V1_WMAC_CALDATA_OFFSET 0x1000 > ++ > ++static struct spi_gpio_platform_data archer_c25_v1_spi_data = { > ++ .sck = ARCHER_C25_GPIO_SHIFT_SRCLK, > ++ .miso = SPI_GPIO_NO_MISO, > ++ .mosi = ARCHER_C25_GPIO_SHIFT_SER, > ++ .num_chipselect = 1, > ++}; > ++ > ++static u8 archer_c25_v1_ssr_initdata[] __initdata = { > ++ BIT(ARCHER_C25_V1_SSR_BIT_7) | > ++ BIT(ARCHER_C25_V1_SSR_BIT_6) | > ++ BIT(ARCHER_C25_V1_SSR_BIT_5) | > ++ BIT(ARCHER_C25_V1_SSR_BIT_4) | > ++ BIT(ARCHER_C25_V1_SSR_BIT_3) | > ++ BIT(ARCHER_C25_V1_SSR_BIT_2) | > ++ BIT(ARCHER_C25_V1_SSR_BIT_1) > ++}; > ++ > ++static struct gen_74x164_chip_platform_data archer_c25_v1_ssr_data = { > ++ .base = ARCHER_C25_74HC_GPIO_BASE, > ++ .num_registers = ARRAY_SIZE(archer_c25_v1_ssr_initdata), > ++ .init_data = archer_c25_v1_ssr_initdata, }; > ++ > ++static struct platform_device archer_c25_v1_spi_device = { > ++ .name = "spi_gpio", > ++ .id = 1, > ++ .dev = { > ++ .platform_data = &archer_c25_v1_spi_data, > ++ }, > ++}; > ++ > ++static struct spi_board_info archer_c25_v1_spi_info[] = { > ++ { > ++ .bus_num = 1, > ++ .chip_select = 0, > ++ .max_speed_hz = 10000000, > ++ .modalias = "74x164", > ++ .platform_data = &archer_c25_v1_ssr_data, > ++ .controller_data = (void *) > ARCHER_C25_GPIO_SHIFT_RCLK, > ++ }, > ++}; > ++ > ++static struct gpio_led archer_c25_v1_leds_gpio[] __initdata = { > ++ { > ++ .name = "archer-c25-v1:green:power", > ++ .gpio = ARCHER_C25_V1_GPIO_LED_POWER, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:wps", > ++ .gpio = ARCHER_C25_V1_GPIO_LED_WPS, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:wlan2g", > ++ .gpio = ARCHER_C25_74HC_GPIO_LED_WLAN2, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:wlan5g", > ++ .gpio = ARCHER_C25_74HC_GPIO_LED_WLAN5, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:lan1", > ++ .gpio = ARCHER_C25_74HC_GPIO_LED_LAN1, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:lan2", > ++ .gpio = ARCHER_C25_74HC_GPIO_LED_LAN2, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:lan3", > ++ .gpio = ARCHER_C25_74HC_GPIO_LED_LAN3, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:lan4", > ++ .gpio = ARCHER_C25_74HC_GPIO_LED_LAN4, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:wan", > ++ .gpio = > ARCHER_C25_74HC_GPIO_LED_WAN_GREEN, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:amber:wan", > ++ .gpio = > ARCHER_C25_74HC_GPIO_LED_WAN_AMBER, > ++ .active_low = 1, > ++ }, > ++}; > ++ > ++static struct gpio_keys_button archer_c25_v1_gpio_keys[] __initdata > ++= { > ++ { > ++ .desc = "Reset button", > ++ .type = EV_KEY, > ++ .code = KEY_RESTART, > ++ .debounce_interval = > ARCHER_C25_V1_KEYS_DEBOUNCE_INTERVAL, > ++ .gpio = ARCHER_C25_V1_GPIO_BTN_RESET, > ++ .active_low = 1, > ++ }, { > ++ .desc = "RFKILL button", > ++ .type = EV_KEY, > ++ .code = KEY_RFKILL, > ++ .debounce_interval = > ARCHER_C25_V1_KEYS_DEBOUNCE_INTERVAL, > ++ .gpio = > ARCHER_C25_V1_GPIO_BTN_RFKILL, > ++ .active_low = 1, > ++ }, > ++}; > ++ > ++static void __init archer_c25_v1_setup(void) { > ++ u8 *mac = (u8 *) KSEG1ADDR(0x1f7e0008); > ++ u8 *art = (u8 *) KSEG1ADDR(0x1f7f0000); > ++ > ++ ath79_register_m25p80(NULL); > ++ > ++ spi_register_board_info(archer_c25_v1_spi_info, > ++ ARRAY_SIZE(archer_c25_v1_spi_info)); > ++ > ++ platform_device_register(&archer_c25_v1_spi_device); > ++ > ++ gpio_request_one(ARCHER_C25_GPIO_SHIFT_OE, > ++ GPIOF_OUT_INIT_LOW | > GPIOF_EXPORT_DIR_FIXED, > ++ "LED control"); > ++ > ++ gpio_request_one(ARCHER_C25_GPIO_SHIFT_SRCLR, > ++ GPIOF_OUT_INIT_HIGH | > GPIOF_EXPORT_DIR_FIXED, > ++ "LED reset"); > ++ > ++ ath79_register_leds_gpio(-1, > ARRAY_SIZE(archer_c25_v1_leds_gpio), > ++ archer_c25_v1_leds_gpio); > ++ > ++ ath79_register_gpio_keys_polled(-1, > ARCHER_C25_V1_KEYS_POLL_INTERVAL, > ++ > ARRAY_SIZE(archer_c25_v1_gpio_keys), > ++ archer_c25_v1_gpio_keys); > ++ > ++ ath79_register_mdio(0, 0x0); > ++ ath79_register_mdio(1, 0x0); > ++ > ++ ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0); > ++ ath79_init_mac(ath79_eth1_data.mac_addr, mac, 1); > ++ > ++ /* WAN port */ > ++ ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; > ++ ath79_eth0_data.speed = SPEED_100; > ++ ath79_eth0_data.duplex = DUPLEX_FULL; > ++ ath79_eth0_data.phy_mask = BIT(4); > ++ ath79_register_eth(0); > ++ > ++ /* LAN ports */ > ++ ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII; > ++ ath79_eth1_data.speed = SPEED_1000; > ++ ath79_eth1_data.duplex = DUPLEX_FULL; > ++ ath79_switch_data.phy_poll_mask |= BIT(4); > ++ ath79_switch_data.phy4_mii_en = 1; > ++ ath79_register_eth(1); > ++ > ++ ath79_register_wmac(art + > ARCHER_C25_V1_WMAC_CALDATA_OFFSET, mac); > ++ ap91_pci_init(NULL, NULL); > ++} > ++ > ++MIPS_MACHINE(ATH79_MACH_ARCHER_C25_V1, "ARCHER-C25-V1", "TP- > LINK > ++Archer > C25 v1", > ++ archer_c25_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 b9a8e3e..53f0d1c 100644 > +--- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h > ++++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h > +@@ -39,6 +39,7 @@ enum ath79_mach_type { > + ATH79_MACH_AP152, /* Atheros AP152 reference > board */ > + ATH79_MACH_AP90Q, /* YunCore AP90Q */ > + ATH79_MACH_AP96, /* Atheros AP96 */ > ++ ATH79_MACH_ARCHER_C25_V1, /* TP-LINK Archer C25 > V1 > board */ > + ATH79_MACH_ARCHER_C5, /* TP-LINK Archer C5 > board > */ > + ATH79_MACH_ARCHER_C7, /* TP-LINK Archer C7 > board > */ > + ATH79_MACH_ARCHER_C7_V2, /* TP-LINK Archer C7 > V2 > board */ > +diff --git a/target/linux/ar71xx/image/tp-link.mk > b/target/linux/ar71xx/image/tp-link.mk > +index 1c88f43..f70c12c 100644 > +--- a/target/linux/ar71xx/image/tp-link.mk > ++++ b/target/linux/ar71xx/image/tp-link.mk > +@@ -45,6 +45,14 @@ define Build/mktplinkfw-kernel > + @mv $@.new $@ > + endef > + > ++define Build/uImageArcher > ++ mkimage -A $(LINUX_KARCH) \ > ++ -O linux -T kernel \ > ++ -C $(1) -a $(KERNEL_LOADADDR) -e $(if > $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \ > ++ -n '$(call toupper,$(LINUX_KARCH)) LEDE > Linux-$(LINUX_VERSION)' -d $@ $@.new > ++ @mv $@.new $@ > ++endef > ++ > + define Device/tplink > + TPLINK_HWREV := 0x1 > + TPLINK_HEADER_VERSION := 1 > +@@ -95,6 +103,22 @@ $(Device/tplink) > + IMAGE_SIZE := 15872k > + endef > + > ++define Device/archer-c25-v1 > ++ DEVICE_TITLE := TP-LINK Archer C25 v1 > ++ DEVICE_PACKAGES := kmod-ath10k ath10k-firmware-qca9887 > ++ BOARDNAME := ARCHER-C25-V1 > ++ TPLINK_BOARD_NAME := ARCHER-C25-V1 > ++ DEVICE_PROFILE := ARCHERC25V1 > ++ IMAGE_SIZE := 7808k > ++ LOADER_TYPE := elf > ++ KERNEL := kernel-bin | patch-cmdline | lzma | uImageArcher lzma > ++ IMAGES := sysupgrade.bin factory.bin > ++ IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader > ++sysupgrade > ++ IMAGE/factory.bin := append-rootfs | tplink-safeloader factory > ++ MTDPARTS := > spi0.0:128k(factory-uboot)ro,64k(u-boot)ro,1536k(kernel),6272k(rootfs),128 > k(config)ro,64k(art)ro,7808k@0x30000(firmware) > ++endef > ++TARGET_DEVICES += archer-c25-v1 > ++ > + define Device/cpe510-520 > + DEVICE_TITLE := TP-LINK CPE510/520 > + DEVICE_PACKAGES := rssileds > +diff --git a/target/linux/ar71xx/mikrotik/config-default > b/target/linux/ar71xx/mikrotik/config-default > +index 44ea327..3f11c23 100644 > +--- a/target/linux/ar71xx/mikrotik/config-default > ++++ b/target/linux/ar71xx/mikrotik/config-default > +@@ -15,6 +15,7 @@ > + # CONFIG_ATH79_MACH_AP152 is not set # CONFIG_ATH79_MACH_AP90Q is > +not set # CONFIG_ATH79_MACH_AP96 is not set > ++# CONFIG_ATH79_MACH_ARCHER_C25_V1 is not set > + # CONFIG_ATH79_MACH_ARCHER_C7 is not set # > +CONFIG_ATH79_MACH_ARDUINO_YUN is not set # > CONFIG_ATH79_MACH_AW_NR580 > +is not set diff --git a/target/linux/ar71xx/nand/config-default > b/target/linux/ar71xx/nand/config-default > +index 515266b..6357531 100644 > +--- a/target/linux/ar71xx/nand/config-default > ++++ b/target/linux/ar71xx/nand/config-default > +@@ -8,6 +8,7 @@ > + # CONFIG_ATH79_MACH_AP136 is not set # CONFIG_ATH79_MACH_AP147 is > +not set # CONFIG_ATH79_MACH_AP96 is not set > ++# CONFIG_ATH79_MACH_ARCHER_C25_V1 is not set > + # CONFIG_ATH79_MACH_ARCHER_C7 is not set # > CONFIG_ATH79_MACH_AW_NR580 > +is not set # CONFIG_ATH79_MACH_CAP324 is not set > +-- > +2.1.4 > + > diff --git > a/build_patches/openwrt/0007-firmware-utils-tplink-safeloader-add-TP- > Link- > Archer-.patch > b/build_patches/openwrt/0007-firmware-utils-tplink-safeloader-add-TP- > Link- > Archer-.patch > new file mode 100644 > index 0000000..861ccfd > --- /dev/null > +++ > b/build_patches/openwrt/0007-firmware-utils-tplink-safeloader-add-TP- > Link- > Archer-.patch > @@ -0,0 +1,112 @@ > +From ae91fb7f8cef0fbd9b0ee707ce577ac9c5cdf2f2 Mon Sep 17 00:00:00 > 2001 > +From: Ludwig Thomeczek <ledesrc@wxorx.net> > +Date: Sat, 13 May 2017 11:40:48 +0200 > +Subject: [PATCH 7/7] firmware-utils: tplink-safeloader: add TP-Link > Archer C25 > + v1 > + > +This adds the necessary firmware layout definitions for the Archer C25. > +It has an addtional partition containing some static data > +("extra-para") without which no factory flash is possible, therefore > +put_data() has been added. > + > +Signed-off-by: Ludwig Thomeczek <ledesrc@wxorx.net> [Rebased on > +v17.01.2] > +Signed-off-by: Tim Niemeyer <tim@tnx-x.org> > +--- > + tools/firmware-utils/src/tplink-safeloader.c | 59 > +++++++++++++++++++++++++++- > + 1 file changed, 58 insertions(+), 1 deletion(-) > + > +diff --git a/tools/firmware-utils/src/tplink-safeloader.c > b/tools/firmware-utils/src/tplink-safeloader.c > +index 688cdac..2468426 100644 > +--- a/tools/firmware-utils/src/tplink-safeloader.c > ++++ b/tools/firmware-utils/src/tplink-safeloader.c > +@@ -299,6 +299,48 @@ static struct device_info boards[] = { > + .last_sysupgrade_partition = "file-system" > + }, > + > ++ /** Firmware layout for the C25v1 */ > ++ { > ++ .id = "ARCHER-C25-V1", > ++ .support_list = > ++ "SupportList:\n" > ++ > "{product_name:ArcherC25,product_ver:1.0.0,special_id:00000000}\n" > ++ > "{product_name:ArcherC25,product_ver:1.0.0,special_id:55530000}\n" > ++ > "{product_name:ArcherC25,product_ver:1.0.0,special_id:45550000}\n", > ++ .support_trail = '\x00', > ++ .soft_ver = "soft_ver:1.0.0\n", > ++ > ++ /** > ++ We use a bigger os-image partition than the stock > images (and thus > ++ smaller file-system), as our kernel doesn't fit in the > stock firmware's > ++ 1MB os-image. > ++ */ > ++ .partitions = { > ++ {"factory-boot", 0x00000, 0x20000}, > ++ {"fs-uboot", 0x20000, 0x10000}, > ++ {"os-image", 0x30000, 0x180000}, /* Stock: > base 0x30000 size 0x100000 */ > ++ {"file-system", 0x1b0000, 0x620000}, /* Stock: > base 0x130000 size 0x6a0000 */ > ++ {"user-config", 0x7d0000, 0x04000}, > ++ {"default-mac", 0x7e0000, 0x00100}, > ++ {"device-id", 0x7e0100, 0x00100}, > ++ {"extra-para", 0x7e0200, 0x00100}, > ++ {"pin", 0x7e0300, 0x00100}, > ++ {"support-list", 0x7e0400, 0x00400}, > ++ {"soft-version", 0x7e0800, 0x00400}, > ++ {"product-info", 0x7e0c00, 0x01400}, > ++ {"partition-table", 0x7e2000, 0x01000}, > ++ {"profile", 0x7e3000, 0x01000}, > ++ {"default-config", 0x7e4000, 0x04000}, > ++ {"merge-config", 0x7ec000, 0x02000}, > ++ {"qos-db", 0x7ee000, 0x02000}, > ++ {"radio", 0x7f0000, 0x10000}, > ++ {NULL, 0, 0} > ++ }, > ++ > ++ .first_sysupgrade_partition = "os-image", > ++ .last_sysupgrade_partition = "file-system", > ++ }, > ++ > + /** Firmware layout for the C5 */ > + { > + .id = "ARCHER-C5-V2", > +@@ -643,6 +685,15 @@ static struct image_partition_entry > +read_file(const > char *part_name, const char > + return entry; > + } > + > ++/** Creates a new image partition from arbitrary data */ static > ++struct image_partition_entry put_data(const char *part_name, > const char *datain, size_t len) { > ++ > ++ struct image_partition_entry entry = > alloc_image_partition(part_name, len); > ++ > ++ memcpy(entry.data, datain, len); > ++ > ++ return entry; > ++} > + > + /** > + Copies a list of image partitions into an image buffer and > + generates > the image partition table while doing so > +@@ -824,7 +875,8 @@ static void build_image(const char *output, > + bool add_jffs2_eof, > + bool sysupgrade, > + const struct device_info *info) { > +- struct image_partition_entry parts[6] = {}; > ++ > ++ struct image_partition_entry parts[7] = {}; > + > + parts[0] = make_partition_table(info->partitions); > + if (info->soft_ver) > +@@ -836,6 +888,11 @@ static void build_image(const char *output, > + parts[3] = read_file("os-image", kernel_image, false); > + parts[4] = read_file("file-system", rootfs_image, add_jffs2_eof); > + > ++ if (strcasecmp(info->id, "ARCHER-C25-V1") == 0) { > ++ const char mdat[11] = {0x00, 0x00, 0x00, 0x02, 0x00, 0x00, > 0x00, 0x00, 0x01, 0x00, 0x00}; > ++ parts[5] = put_data("extra-para", mdat, 11); > ++ } > ++ > + size_t len; > + void *image; > + if (sysupgrade) > +-- > +2.1.4 > + > diff --git a/src/packages/fff/fff-network/Makefile > b/src/packages/fff/fff-network/Makefile > index fee3f98..d34016c 100644 > --- a/src/packages/fff/fff-network/Makefile > +++ b/src/packages/fff/fff-network/Makefile > @@ -1,7 +1,7 @@ > include $(TOPDIR)/rules.mk > > PKG_NAME:=fff-network > -PKG_VERSION:=0.0.6 > +PKG_VERSION:=0.0.7 > PKG_RELEASE:=1 > > PKG_BUILD_DIR:=$(BUILD_DIR)/fff-network > diff --git a/src/packages/fff/fff-network/ar71xx/network.archer-c25-v1 > b/src/packages/fff/fff-network/ar71xx/network.archer-c25-v1 > new file mode 100644 > index 0000000..e524545 > --- /dev/null > +++ b/src/packages/fff/fff-network/ar71xx/network.archer-c25-v1 > @@ -0,0 +1,8 @@ > +WANDEV=eth0 > +SWITCHDEV=eth1 > +CLIENT_PORTS="1 2 0t" > +WAN_PORTS="" > +BATMAN_PORTS="3 4 0t" > + > +ETHMESHMAC=eth1 > +ROUTERMAC=eth0 > -- > 2.1.4 > > -- > franken-dev mailing list > franken-dev@freifunk.net > http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net -- franken-dev mailing list franken-dev@freifunk.net http://lists.freifunk.net/mailman/listinfo/franken-dev-freifunk.net
Und applied Tim Am Samstag, den 08.07.2017, 13:00 +0200 schrieb Tim Niemeyer: > Signed-off-by: Tim Niemeyer <tim@tn-x.org> > --- > > Changes in v2: > - Added kernel config for LEDs > - Changed patch format > > bsp/ar71xx/.config | 3 + > bsp/board_ar71xx.bsp | 1 + > ...ils-tplink-safeloader-support-strings-as-.patch | 162 +++++++ > ...1xx-add-support-for-TP-Link-Archer-C25-v1.patch | 499 > +++++++++++++++++++++ > ...ils-tplink-safeloader-add-TP-Link-Archer-.patch | 112 +++++ > src/packages/fff/fff-network/Makefile | 2 +- > .../fff/fff-network/ar71xx/network.archer-c25-v1 | 8 + > 7 files changed, 786 insertions(+), 1 deletion(-) > create mode 100644 build_patches/openwrt/0005-firmware-utils-tplink- > safeloader-support-strings-as-.patch > create mode 100644 build_patches/openwrt/0006-ar71xx-add-support- > for-TP-Link-Archer-C25-v1.patch > create mode 100644 build_patches/openwrt/0007-firmware-utils-tplink- > safeloader-add-TP-Link-Archer-.patch > create mode 100644 src/packages/fff/fff- > network/ar71xx/network.archer-c25-v1 > > diff --git a/bsp/ar71xx/.config b/bsp/ar71xx/.config > index 43d063c..b407f7d 100644 > --- a/bsp/ar71xx/.config > +++ b/bsp/ar71xx/.config > @@ -6,6 +6,8 @@ CONFIG_TARGET_ar71xx_generic=y > CONFIG_TARGET_MULTI_PROFILE=y > CONFIG_TARGET_DEVICE_ar71xx_generic_DEVICE_gl-ar150=y > CONFIG_TARGET_DEVICE_PACKAGES_ar71xx_generic_DEVICE_gl-ar150="" > +CONFIG_TARGET_DEVICE_ar71xx_generic_DEVICE_archer-c25-v1=y > +CONFIG_TARGET_DEVICE_PACKAGES_ar71xx_generic_DEVICE_archer-c25-v1="- > kmod-ath10k kmod-ath10k-ct -ath10k-firmware-qca9887 ath10k-firmware- > qca9887-ct" > CONFIG_TARGET_DEVICE_ar71xx_generic_DEVICE_archer-c7-v2=y > CONFIG_TARGET_DEVICE_PACKAGES_ar71xx_generic_DEVICE_archer-c7-v2="- > kmod-ath10k kmod-ath10k-ct -ath10k-firmware-qca988x ath10k-firmware- > qca988x-ct" > CONFIG_TARGET_DEVICE_ar71xx_generic_DEVICE_cpe210-220=y > @@ -83,6 +85,7 @@ CONFIG_CLEAN_IPKG=y > # CONFIG_KERNEL_DEBUG_INFO is not set > # CONFIG_KERNEL_DEBUG_KERNEL is not set > # CONFIG_PACKAGE_ALFRED_VIS is not set > +CONFIG_PACKAGE_ath10k-firmware-qca9887-ct=m > CONFIG_PACKAGE_ath10k-firmware-qca988x-ct=m > CONFIG_PACKAGE_kmod-ath10k-ct=m > CONFIG_PACKAGE_kmod-hwmon-core=m > diff --git a/bsp/board_ar71xx.bsp b/bsp/board_ar71xx.bsp > index 6c541cc..1137b0d 100644 > --- a/bsp/board_ar71xx.bsp > +++ b/bsp/board_ar71xx.bsp > @@ -31,4 +31,5 @@ images=("lede-ar71xx-generic-cpe210-220-squashfs- > sysupgrade.bin" > "lede-ar71xx-generic-tl-wdr4300-v1-squashfs-sysupgrade.bin" > "lede-ar71xx-generic-tl-wdr4310-v1-squashfs-sysupgrade.bin" > "lede-ar71xx-generic-archer-c7-v2-squashfs-sysupgrade.bin" > + "lede-ar71xx-generic-archer-c25-v1-squashfs-sysupgrade.bin" > ) > diff --git a/build_patches/openwrt/0005-firmware-utils-tplink- > safeloader-support-strings-as-.patch b/build_patches/openwrt/0005- > firmware-utils-tplink-safeloader-support-strings-as-.patch > new file mode 100644 > index 0000000..289322e > --- /dev/null > +++ b/build_patches/openwrt/0005-firmware-utils-tplink-safeloader- > support-strings-as-.patch > @@ -0,0 +1,162 @@ > +From e9ef329106fbf7e71718e73aee8b48315dd22a18 Mon Sep 17 00:00:00 > 2001 > +From: Jan Niehusmann <jan@gondor.com> > +Date: Fri, 19 May 2017 09:42:24 +0200 > +Subject: [PATCH 5/7] firmware-utils: tplink-safeloader: support > strings as > + soft_version > + > +Some TP-Link routers (C25, C59, C60) contain a version string > instead > +of a binary structure in the soft_version partition. > + > +Flashing LEDE from the original firmware's GUI, this version string > +taken from the soft_ver partition of the firmware image is written > to > +the router's config partition. > + > +When using tftp recovery to go back to the original Archer C25 > firmware, > +a version check compares that version to the version of the firmware > to > +be flashed. > + > +Without proper contents in the config partition, reverting to the > +original firmware fails. > + > +Therefore, write the string "soft_ver:1.0.0\n" to that soft_ver > +partition. > + > +Signed-off-by: Jan Niehusmann <jan@gondor.com> > +[Rebased on v17.01.2] > +Signed-off-by: Tim Niemeyer <tim@tnx-x.org> > +--- > + tools/firmware-utils/src/tplink-safeloader.c | 34 > +++++++++++++++++++++++++++- > + 1 file changed, 33 insertions(+), 1 deletion(-) > + > +diff --git a/tools/firmware-utils/src/tplink-safeloader.c > b/tools/firmware-utils/src/tplink-safeloader.c > +index 4e3d205..688cdac 100644 > +--- a/tools/firmware-utils/src/tplink-safeloader.c > ++++ b/tools/firmware-utils/src/tplink-safeloader.c > +@@ -75,6 +75,7 @@ struct device_info { > + const char *vendor; > + const char *support_list; > + char support_trail; > ++ const char *soft_ver; > + const struct flash_partition_entry > partitions[MAX_PARTITIONS+1]; > + const char *first_sysupgrade_partition; > + const char *last_sysupgrade_partition; > +@@ -130,6 +131,7 @@ static struct device_info boards[] = { > + "CPE220(TP-LINK|US|N300-2):1.1\r\n" > + "CPE220(TP-LINK|EU|N300-2):1.1\r\n", > + .support_trail = '\xff', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x20000}, > +@@ -167,6 +169,7 @@ static struct device_info boards[] = { > + "CPE520(TP-LINK|US|N300-5):1.1\r\n" > + "CPE520(TP-LINK|EU|N300-5):1.1\r\n", > + .support_trail = '\xff', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x20000}, > +@@ -198,6 +201,7 @@ static struct device_info boards[] = { > + "WBS210(TP-LINK|US|N300-2):1.20\r\n" > + "WBS210(TP-LINK|EU|N300-2):1.20\r\n", > + .support_trail = '\xff', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x20000}, > +@@ -229,6 +233,7 @@ static struct device_info boards[] = { > + "WBS510(TP-LINK|US|N300-5):1.20\r\n" > + "WBS510(TP-LINK|EU|N300-5):1.20\r\n", > + .support_trail = '\xff', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x20000}, > +@@ -259,6 +264,7 @@ static struct device_info boards[] = { > + "SupportList:\r\n" > + "{product_name:Archer > C2600,product_ver:1.0.0,special_id:00000000}\r\n", > + .support_trail = '\x00', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"SBL1", 0x00000, 0x20000}, > +@@ -303,6 +309,7 @@ static struct device_info boards[] = { > + "product_ver:2.0.0," > + "special_id:00000000}\r\n", > + .support_trail = '\x00', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x40000}, > +@@ -337,6 +344,7 @@ static struct device_info boards[] = { > + "product_ver:1.0.0," > + "special_id:00000000}\n", > + .support_trail = '\x00', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x40000}, > +@@ -369,6 +377,7 @@ static struct device_info boards[] = { > + "SupportList:\r\n" > + "EAP120(TP-LINK|UN|N300-2):1.0\r\n", > + .support_trail = '\xff', > ++ .soft_ver = NULL, > + > + .partitions = { > + {"fs-uboot", 0x00000, 0x20000}, > +@@ -398,6 +407,7 @@ static struct device_info boards[] = { > + "SupportList:\n" > + "{product_name:TL- > WR1043ND,product_ver:4.0.0,special_id:45550000}\n", > + .support_trail = '\x00', > ++ .soft_ver = NULL, > + > + /** > + We use a bigger os-image partition than the > stock images (and thus > +@@ -441,6 +451,7 @@ static struct device_info boards[] = { > + "{product_name:RE450,product_ver:1.0.0,spec > ial_id:4B520000}\r\n" > + "{product_name:RE450,product_ver:1.0.0,spec > ial_id:55534100}\r\n", > + .support_trail = '\x00', > ++ .soft_ver = NULL, > + > + /** > + The flash partition table for RE450; > +@@ -569,6 +580,23 @@ static struct image_partition_entry > make_soft_version(uint32_t rev) { > + return entry; > + } > + > ++static struct image_partition_entry > make_soft_version_from_string(const char *soft_ver) { > ++ /** String length _including_ the terminating zero byte */ > ++ uint32_t ver_len = strlen(soft_ver) + 1; > ++ /** Partition contains 64 bit header, the version string, > and one additional null byte */ > ++ size_t partition_len = 2*sizeof(uint32_t) + ver_len + 1; > ++ struct image_partition_entry entry = > alloc_image_partition("soft-version", partition_len); > ++ > ++ uint32_t *len = (uint32_t *)entry.data; > ++ len[0] = htonl(ver_len); > ++ len[1] = 0; > ++ memcpy(&len[2], soft_ver, ver_len); > ++ > ++ entry.data[partition_len - 1] = 0; > ++ > ++ return entry; > ++} > ++ > + /** Generates the support-list partition */ > + static struct image_partition_entry make_support_list(const struct > device_info *info) { > + size_t len = strlen(info->support_list); > +@@ -799,7 +827,11 @@ static void build_image(const char *output, > + struct image_partition_entry parts[6] = {}; > + > + parts[0] = make_partition_table(info->partitions); > +- parts[1] = make_soft_version(rev); > ++ if (info->soft_ver) > ++ parts[1] = make_soft_version_from_string(info- > >soft_ver); > ++ else > ++ parts[1] = make_soft_version(rev); > ++ > + parts[2] = make_support_list(info); > + parts[3] = read_file("os-image", kernel_image, false); > + parts[4] = read_file("file-system", rootfs_image, > add_jffs2_eof); > +-- > +2.1.4 > + > diff --git a/build_patches/openwrt/0006-ar71xx-add-support-for-TP- > Link-Archer-C25-v1.patch b/build_patches/openwrt/0006-ar71xx-add- > support-for-TP-Link-Archer-C25-v1.patch > new file mode 100644 > index 0000000..aa0f9ce > --- /dev/null > +++ b/build_patches/openwrt/0006-ar71xx-add-support-for-TP-Link- > Archer-C25-v1.patch > @@ -0,0 +1,499 @@ > +From a5290bd7279f0aa4a7129ce103fec154239ddd86 Mon Sep 17 00:00:00 > 2001 > +From: Ludwig Thomeczek <ledesrc@wxorx.net> > +Date: Sat, 22 Apr 2017 18:21:47 +0200 > +Subject: [PATCH 6/7] ar71xx: add support for TP-Link Archer C25 v1 > + > +The TP-Link Archer C25 is a low-cost dual-band router. > + > +Specification: > + > +- CPU: Atheros QCA9561 775 MHz > +- RAM: 64 MB > +- Flash: 8 MB > +- Wifi: 3x3 2.4 GHz (integrated), 1x1 5 GHz QCA9887 > +- NET: 5x 10/100 Mbps Ethernet > + > +Some LEDs are controlled by an additional 74HC595 chip. > + > +Signed-off-by: Ludwig Thomeczek <ledesrc@wxorx.net> > +[minor code style fixes, boards alphabetical order fixes, > +reworked commit message] > +Signed-off-by: Piotr Dymacz <pepe2k@gmail.com> > +[Rebased on v17.01.2] > +Signed-off-by: Tim Niemeyer <tim@tnx-x.org> > +--- > + target/linux/ar71xx/base-files/etc/board.d/01_leds | 9 + > + .../linux/ar71xx/base-files/etc/board.d/02_network | 1 + > + target/linux/ar71xx/base-files/etc/diag.sh | 1 + > + .../etc/hotplug.d/firmware/11-ath10k-caldata | 1 + > + target/linux/ar71xx/base-files/lib/ar71xx.sh | 3 + > + .../ar71xx/base-files/lib/upgrade/platform.sh | 1 + > + target/linux/ar71xx/config-4.4 | 3 + > + .../ar71xx/files/arch/mips/ath79/Kconfig.openwrt | 11 + > + target/linux/ar71xx/files/arch/mips/ath79/Makefile | 1 + > + .../files/arch/mips/ath79/mach-archer-c25-v1.c | 227 > +++++++++++++++++++++ > + .../linux/ar71xx/files/arch/mips/ath79/machtypes.h | 1 + > + target/linux/ar71xx/image/tp-link.mk | 24 +++ > + target/linux/ar71xx/mikrotik/config-default | 1 + > + target/linux/ar71xx/nand/config-default | 1 + > + 14 files changed, 285 insertions(+) > + create mode 100644 target/linux/ar71xx/files/arch/mips/ath79/mach- > archer-c25-v1.c > + > +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 0279dfc..3aa2bfb 100755 > +--- a/target/linux/ar71xx/base-files/etc/board.d/01_leds > ++++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds > +@@ -49,6 +49,15 @@ antrouter-r1) > + ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan" > "phy0tpt" > + ucidef_set_led_default "btc" "BTC" "$board:green:btc" "0" > + ;; > ++archer-c25-v1) > ++ ucidef_set_led_netdev "wan" "WAN" "$board:green:wan" "eth0" > ++ ucidef_set_led_wlan "wlan" "WLAN" "$board:green:wlan2g" > "phy1tpt" > ++ ucidef_set_led_wlan "wlan5g" "WLAN5G" "$board:green:wlan5g" > "phy0tpt" > ++ ucidef_set_led_switch "lan1" "LAN1" "$board:green:lan1" > "switch0" "0x10" > ++ ucidef_set_led_switch "lan2" "LAN2" "$board:green:lan2" > "switch0" "0x08" > ++ ucidef_set_led_switch "lan3" "LAN3" "$board:green:lan3" > "switch0" "0x04" > ++ ucidef_set_led_switch "lan4" "LAN4" "$board:green:lan4" > "switch0" "0x02" > ++ ;; > + arduino-yun) > + ucidef_set_led_wlan "wlan" "WLAN" "arduino:blue:wlan" > "phy0tpt" > + ucidef_set_led_usbdev "usb" "USB" "arduino:white:usb" "1- > 1.1" > +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 c8c7827..4404e80 100755 > +--- a/target/linux/ar71xx/base-files/etc/board.d/02_network > ++++ b/target/linux/ar71xx/base-files/etc/board.d/02_network > +@@ -122,6 +122,7 @@ ar71xx_setup_interfaces() > + a60|\ > + alfa-ap96|\ > + alfa-nx|\ > ++ archer-c25-v1|\ > + dr344|\ > + gl-ar150|\ > + gl-ar300m|\ > +diff --git a/target/linux/ar71xx/base-files/etc/diag.sh > b/target/linux/ar71xx/base-files/etc/diag.sh > +index 7b8aac8..cf6278c 100644 > +--- a/target/linux/ar71xx/base-files/etc/diag.sh > ++++ b/target/linux/ar71xx/base-files/etc/diag.sh > +@@ -47,6 +47,7 @@ get_status_led() { > + ap135-020) > + status_led="ap135:green:status" > + ;; > ++ archer-c25-v1|\ > + mr12|\ > + mr16|\ > + nbg6616|\ > +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 b3e23c9..68f90de 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 > +@@ -92,6 +92,7 @@ case "$FIRMWARE" in > + ath10kcal_extract "art" 20480 2116 > + ath10kcal_patch_mac $(macaddr_add $(cat > /sys/class/net/eth0/address) -2) > + ;; > ++ archer-c25-v1|\ > + tl-wdr6500-v2) > + ath10kcal_extract "art" 20480 2116 > + ath10kcal_patch_mac $(macaddr_add $(cat > /sys/class/net/eth1/address) -2) > +diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh > b/target/linux/ar71xx/base-files/lib/ar71xx.sh > +index b035535..0d01c5e 100755 > +--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh > ++++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh > +@@ -457,6 +457,9 @@ ar71xx_board_detect() { > + *AP90Q) > + name="ap90q" > + ;; > ++ *"Archer C25 v1") > ++ name="archer-c25-v1" > ++ ;; > + *"Archer C5") > + name="archer-c5" > + ;; > +diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh > b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh > +index 580e09a..e2aaceb 100755 > +--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh > ++++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh > +@@ -205,6 +205,7 @@ platform_check_image() { > + airrouter|\ > + ap132|\ > + ap90q|\ > ++ archer-c25-v1|\ > + bullet-m|\ > + c-55|\ > + carambola2|\ > +diff --git a/target/linux/ar71xx/config-4.4 > b/target/linux/ar71xx/config-4.4 > +index ff6bb13..79308e8 100644 > +--- a/target/linux/ar71xx/config-4.4 > ++++ b/target/linux/ar71xx/config-4.4 > +@@ -50,6 +50,7 @@ CONFIG_ATH79_MACH_AP152=y > + # CONFIG_ATH79_MACH_AP81 is not set > + CONFIG_ATH79_MACH_AP90Q=y > + CONFIG_ATH79_MACH_AP96=y > ++CONFIG_ATH79_MACH_ARCHER_C25_V1=y > + CONFIG_ATH79_MACH_ARCHER_C7=y > + CONFIG_ATH79_MACH_ARDUINO_YUN=y > + CONFIG_ATH79_MACH_AW_NR580=y > +@@ -269,6 +270,7 @@ CONFIG_GENERIC_SMP_IDLE_THREAD=y > + CONFIG_GENERIC_TIME_VSYSCALL=y > + CONFIG_GPIOLIB=y > + CONFIG_GPIOLIB_IRQCHIP=y > ++CONFIG_GPIO_74X164=y > + CONFIG_GPIO_DEVRES=y > + # CONFIG_GPIO_LATCH is not set > + CONFIG_GPIO_NXP_74HC153=y > +@@ -335,6 +337,7 @@ CONFIG_LEDS_NU801=y > + CONFIG_LIBFDT=y > + CONFIG_MARVELL_PHY=y > + CONFIG_MDIO_BITBANG=y > ++CONFIG_SPI_GPIO=y > + CONFIG_MDIO_BOARDINFO=y > + CONFIG_MDIO_GPIO=y > + CONFIG_MICREL_PHY=y > +diff --git > a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt > b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt > +index 76ba6fa..d49659c 100644 > +--- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt > ++++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt > +@@ -1224,6 +1224,17 @@ config ATH79_MACH_BSB > + select ATH79_DEV_USB > + select ATH79_DEV_WMAC > + > ++config ATH79_MACH_ARCHER_C25_V1 > ++ bool "TP-LINK Archer C25 v1 support" > ++ select SOC_QCA956X > ++ 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_WMAC > ++ > ++ > + config ATH79_MACH_ARCHER_C7 > + bool "TP-LINK Archer C5/C7/TL-WDR4900 v2 board support" > + select SOC_QCA955X > +diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Makefile > b/target/linux/ar71xx/files/arch/mips/ath79/Makefile > +index c91d03f..fc28716 100644 > +--- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile > ++++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile > +@@ -55,6 +55,7 @@ obj-$(CONFIG_ATH79_MACH_AP147) > += mach-ap147.o > + obj-$(CONFIG_ATH79_MACH_AP152) += mach- > ap152.o > + obj-$(CONFIG_ATH79_MACH_AP90Q) += mach- > ap90q.o > + obj-$(CONFIG_ATH79_MACH_AP96) += mach-ap96.o > ++obj-$(CONFIG_ATH79_MACH_ARCHER_C25_V1) += mach- > archer-c25-v1.o > + obj-$(CONFIG_ATH79_MACH_ARCHER_C7) += mach-archer- > c7.o > + obj-$(CONFIG_ATH79_MACH_ARDUINO_YUN) += mach- > arduino-yun.o > + obj-$(CONFIG_ATH79_MACH_AW_NR580) += mach-aw-nr580.o > +diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-archer- > c25-v1.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25- > v1.c > +new file mode 100644 > +index 0000000..a0f001c > +--- /dev/null > ++++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c > +@@ -0,0 +1,227 @@ > ++/* > ++ * TP-Link Archer C25 v1 board support > ++ * > ++ * Copyright (C) 2017 Ludwig Thomeczek <ledesrc@wxorx.net> > ++ * based on mach-archer-c60/C59-v1.c > ++ * Copyright (C) 2016 Henryk Heisig <hyniu@o2.pl> > ++ * > ++ * 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 <linux/platform_device.h> > ++#include <linux/ath9k_platform.h> > ++#include <linux/ar8216_platform.h> > ++#include <asm/mach-ath79/ar71xx_regs.h> > ++#include <linux/gpio.h> > ++ > ++#include "common.h" > ++#include "dev-m25p80.h" > ++#include "machtypes.h" > ++#include "pci.h" > ++#include "dev-ap9x-pci.h" > ++#include "dev-eth.h" > ++#include "dev-gpio-buttons.h" > ++#include "dev-leds-gpio.h" > ++#include "dev-spi.h" > ++#include "dev-usb.h" > ++#include "dev-wmac.h" > ++#include <linux/spi/spi_gpio.h> > ++#include <linux/spi/74x164.h> > ++ > ++#define ARCHER_C25_GPIO_SHIFT_OE 21 /* OE, Output Enable > */ > ++#define ARCHER_C25_GPIO_SHIFT_SER 14 /* DS, Data Serial > Input */ > ++#define ARCHER_C25_GPIO_SHIFT_SRCLK 15 /* SHCP, Shift Reg > Clock Input */ > ++#define ARCHER_C25_GPIO_SHIFT_SRCLR 19 /* MR, Master Reset > */ > ++#define ARCHER_C25_GPIO_SHIFT_RCLK 16 /* STCP, Storage Reg > Clock Input */ > ++ > ++#define ARCHER_C25_74HC_GPIO_BASE QCA956X_GPIO_COUNT > ++#define ARCHER_C25_74HC_GPIO_LED_WAN_AMBER 27 > ++#define ARCHER_C25_74HC_GPIO_LED_WAN_GREEN 28 > ++#define ARCHER_C25_74HC_GPIO_LED_WLAN2 29 > ++#define ARCHER_C25_74HC_GPIO_LED_WLAN5 30 > ++#define ARCHER_C25_74HC_GPIO_LED_LAN1 23 > ++#define ARCHER_C25_74HC_GPIO_LED_LAN2 24 > ++#define ARCHER_C25_74HC_GPIO_LED_LAN3 25 > ++#define ARCHER_C25_74HC_GPIO_LED_LAN4 26 > ++ > ++#define ARCHER_C25_V1_SSR_BIT_0 0 > ++#define ARCHER_C25_V1_SSR_BIT_1 1 > ++#define ARCHER_C25_V1_SSR_BIT_2 2 > ++#define ARCHER_C25_V1_SSR_BIT_3 3 > ++#define ARCHER_C25_V1_SSR_BIT_4 4 > ++#define ARCHER_C25_V1_SSR_BIT_5 5 > ++#define ARCHER_C25_V1_SSR_BIT_6 6 > ++#define ARCHER_C25_V1_SSR_BIT_7 7 > ++ > ++ > ++#define ARCHER_C25_V1_KEYS_POLL_INTERVAL 20 > ++#define ARCHER_C25_V1_KEYS_DEBOUNCE_INTERVAL \ > ++ (3 * > ARCHER_C25_V1_KEYS_POLL_INTERVAL) > ++ > ++#define ARCHER_C25_V1_GPIO_BTN_RESET 1 > ++#define ARCHER_C25_V1_GPIO_BTN_RFKILL 22 > ++ > ++#define ARCHER_C25_V1_GPIO_LED_POWER 17 > ++#define ARCHER_C25_V1_GPIO_LED_WPS 2 > ++ > ++#define ARCHER_C25_V1_WMAC_CALDATA_OFFSET 0x1000 > ++ > ++static struct spi_gpio_platform_data archer_c25_v1_spi_data = { > ++ .sck = ARCHER_C25_GPIO_SHIFT_SRCLK, > ++ .miso = SPI_GPIO_NO_MISO, > ++ .mosi = ARCHER_C25_GPIO_SHIFT_SER, > ++ .num_chipselect = 1, > ++}; > ++ > ++static u8 archer_c25_v1_ssr_initdata[] __initdata = { > ++ BIT(ARCHER_C25_V1_SSR_BIT_7) | > ++ BIT(ARCHER_C25_V1_SSR_BIT_6) | > ++ BIT(ARCHER_C25_V1_SSR_BIT_5) | > ++ BIT(ARCHER_C25_V1_SSR_BIT_4) | > ++ BIT(ARCHER_C25_V1_SSR_BIT_3) | > ++ BIT(ARCHER_C25_V1_SSR_BIT_2) | > ++ BIT(ARCHER_C25_V1_SSR_BIT_1) > ++}; > ++ > ++static struct gen_74x164_chip_platform_data archer_c25_v1_ssr_data > = { > ++ .base = ARCHER_C25_74HC_GPIO_BASE, > ++ .num_registers = ARRAY_SIZE(archer_c25_v1_ssr_initdata), > ++ .init_data = archer_c25_v1_ssr_initdata, > ++}; > ++ > ++static struct platform_device archer_c25_v1_spi_device = { > ++ .name = "spi_gpio", > ++ .id = 1, > ++ .dev = { > ++ .platform_data = &archer_c25_v1_spi_data, > ++ }, > ++}; > ++ > ++static struct spi_board_info archer_c25_v1_spi_info[] = { > ++ { > ++ .bus_num = 1, > ++ .chip_select = 0, > ++ .max_speed_hz = 10000000, > ++ .modalias = "74x164", > ++ .platform_data = > &archer_c25_v1_ssr_data, > ++ .controller_data = (void *) > ARCHER_C25_GPIO_SHIFT_RCLK, > ++ }, > ++}; > ++ > ++static struct gpio_led archer_c25_v1_leds_gpio[] __initdata = { > ++ { > ++ .name = "archer-c25-v1:green:power", > ++ .gpio = > ARCHER_C25_V1_GPIO_LED_POWER, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:wps", > ++ .gpio = ARCHER_C25_V1_GPIO_LED_WPS, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25- > v1:green:wlan2g", > ++ .gpio = > ARCHER_C25_74HC_GPIO_LED_WLAN2, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25- > v1:green:wlan5g", > ++ .gpio = > ARCHER_C25_74HC_GPIO_LED_WLAN5, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:lan1", > ++ .gpio = > ARCHER_C25_74HC_GPIO_LED_LAN1, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:lan2", > ++ .gpio = > ARCHER_C25_74HC_GPIO_LED_LAN2, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:lan3", > ++ .gpio = > ARCHER_C25_74HC_GPIO_LED_LAN3, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:lan4", > ++ .gpio = > ARCHER_C25_74HC_GPIO_LED_LAN4, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:green:wan", > ++ .gpio = ARCHER_C25_74HC_GPIO_LED_WA > N_GREEN, > ++ .active_low = 1, > ++ }, { > ++ .name = "archer-c25-v1:amber:wan", > ++ .gpio = ARCHER_C25_74HC_GPIO_LED_WA > N_AMBER, > ++ .active_low = 1, > ++ }, > ++}; > ++ > ++static struct gpio_keys_button archer_c25_v1_gpio_keys[] __initdata > = { > ++ { > ++ .desc = "Reset button", > ++ .type = EV_KEY, > ++ .code = KEY_RESTART, > ++ .debounce_interval = > ARCHER_C25_V1_KEYS_DEBOUNCE_INTERVAL, > ++ .gpio = > ARCHER_C25_V1_GPIO_BTN_RESET, > ++ .active_low = 1, > ++ }, { > ++ .desc = "RFKILL button", > ++ .type = EV_KEY, > ++ .code = KEY_RFKILL, > ++ .debounce_interval = > ARCHER_C25_V1_KEYS_DEBOUNCE_INTERVAL, > ++ .gpio = > ARCHER_C25_V1_GPIO_BTN_RFKILL, > ++ .active_low = 1, > ++ }, > ++}; > ++ > ++static void __init archer_c25_v1_setup(void) > ++{ > ++ u8 *mac = (u8 *) KSEG1ADDR(0x1f7e0008); > ++ u8 *art = (u8 *) KSEG1ADDR(0x1f7f0000); > ++ > ++ ath79_register_m25p80(NULL); > ++ > ++ spi_register_board_info(archer_c25_v1_spi_info, > ++ ARRAY_SIZE(archer_c25_v1_spi_info)) > ; > ++ > ++ platform_device_register(&archer_c25_v1_spi_device); > ++ > ++ gpio_request_one(ARCHER_C25_GPIO_SHIFT_OE, > ++ GPIOF_OUT_INIT_LOW | > GPIOF_EXPORT_DIR_FIXED, > ++ "LED control"); > ++ > ++ gpio_request_one(ARCHER_C25_GPIO_SHIFT_SRCLR, > ++ GPIOF_OUT_INIT_HIGH | > GPIOF_EXPORT_DIR_FIXED, > ++ "LED reset"); > ++ > ++ ath79_register_leds_gpio(-1, > ARRAY_SIZE(archer_c25_v1_leds_gpio), > ++ archer_c25_v1_leds_gpio); > ++ > ++ ath79_register_gpio_keys_polled(-1, > ARCHER_C25_V1_KEYS_POLL_INTERVAL, > ++ ARRAY_SIZE(archer_c25_v1_gp > io_keys), > ++ archer_c25_v1_gpio_keys); > ++ > ++ ath79_register_mdio(0, 0x0); > ++ ath79_register_mdio(1, 0x0); > ++ > ++ ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0); > ++ ath79_init_mac(ath79_eth1_data.mac_addr, mac, 1); > ++ > ++ /* WAN port */ > ++ ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_MII; > ++ ath79_eth0_data.speed = SPEED_100; > ++ ath79_eth0_data.duplex = DUPLEX_FULL; > ++ ath79_eth0_data.phy_mask = BIT(4); > ++ ath79_register_eth(0); > ++ > ++ /* LAN ports */ > ++ ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_GMII; > ++ ath79_eth1_data.speed = SPEED_1000; > ++ ath79_eth1_data.duplex = DUPLEX_FULL; > ++ ath79_switch_data.phy_poll_mask |= BIT(4); > ++ ath79_switch_data.phy4_mii_en = 1; > ++ ath79_register_eth(1); > ++ > ++ ath79_register_wmac(art + > ARCHER_C25_V1_WMAC_CALDATA_OFFSET, mac); > ++ ap91_pci_init(NULL, NULL); > ++} > ++ > ++MIPS_MACHINE(ATH79_MACH_ARCHER_C25_V1, "ARCHER-C25-V1", "TP-LINK > Archer C25 v1", > ++ archer_c25_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 b9a8e3e..53f0d1c 100644 > +--- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h > ++++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h > +@@ -39,6 +39,7 @@ enum ath79_mach_type { > + ATH79_MACH_AP152, /* Atheros AP152 > reference board */ > + ATH79_MACH_AP90Q, /* YunCore AP90Q > */ > + ATH79_MACH_AP96, /* Atheros AP96 */ > ++ ATH79_MACH_ARCHER_C25_V1, /* TP-LINK Archer > C25 V1 board */ > + ATH79_MACH_ARCHER_C5, /* TP-LINK > Archer C5 board */ > + ATH79_MACH_ARCHER_C7, /* TP-LINK > Archer C7 board */ > + ATH79_MACH_ARCHER_C7_V2, /* TP-LINK Archer > C7 V2 board */ > +diff --git a/target/linux/ar71xx/image/tp-link.mk > b/target/linux/ar71xx/image/tp-link.mk > +index 1c88f43..f70c12c 100644 > +--- a/target/linux/ar71xx/image/tp-link.mk > ++++ b/target/linux/ar71xx/image/tp-link.mk > +@@ -45,6 +45,14 @@ define Build/mktplinkfw-kernel > + @mv $@.new $@ > + endef > + > ++define Build/uImageArcher > ++ mkimage -A $(LINUX_KARCH) \ > ++ -O linux -T kernel \ > ++ -C $(1) -a $(KERNEL_LOADADDR) -e $(if > $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \ > ++ -n '$(call toupper,$(LINUX_KARCH)) LEDE > Linux-$(LINUX_VERSION)' -d $@ $@.new > ++ @mv $@.new $@ > ++endef > ++ > + define Device/tplink > + TPLINK_HWREV := 0x1 > + TPLINK_HEADER_VERSION := 1 > +@@ -95,6 +103,22 @@ $(Device/tplink) > + IMAGE_SIZE := 15872k > + endef > + > ++define Device/archer-c25-v1 > ++ DEVICE_TITLE := TP-LINK Archer C25 v1 > ++ DEVICE_PACKAGES := kmod-ath10k ath10k-firmware-qca9887 > ++ BOARDNAME := ARCHER-C25-V1 > ++ TPLINK_BOARD_NAME := ARCHER-C25-V1 > ++ DEVICE_PROFILE := ARCHERC25V1 > ++ IMAGE_SIZE := 7808k > ++ LOADER_TYPE := elf > ++ KERNEL := kernel-bin | patch-cmdline | lzma | uImageArcher lzma > ++ IMAGES := sysupgrade.bin factory.bin > ++ IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader > sysupgrade > ++ IMAGE/factory.bin := append-rootfs | tplink-safeloader factory > ++ MTDPARTS := spi0.0:128k(factory-uboot)ro,64k(u- > boot)ro,1536k(kernel),6272k(rootfs),128k(config)ro,64k(art)ro,7808k@0 > x30000(firmware) > ++endef > ++TARGET_DEVICES += archer-c25-v1 > ++ > + define Device/cpe510-520 > + DEVICE_TITLE := TP-LINK CPE510/520 > + DEVICE_PACKAGES := rssileds > +diff --git a/target/linux/ar71xx/mikrotik/config-default > b/target/linux/ar71xx/mikrotik/config-default > +index 44ea327..3f11c23 100644 > +--- a/target/linux/ar71xx/mikrotik/config-default > ++++ b/target/linux/ar71xx/mikrotik/config-default > +@@ -15,6 +15,7 @@ > + # CONFIG_ATH79_MACH_AP152 is not set > + # CONFIG_ATH79_MACH_AP90Q is not set > + # CONFIG_ATH79_MACH_AP96 is not set > ++# CONFIG_ATH79_MACH_ARCHER_C25_V1 is not set > + # CONFIG_ATH79_MACH_ARCHER_C7 is not set > + # CONFIG_ATH79_MACH_ARDUINO_YUN is not set > + # CONFIG_ATH79_MACH_AW_NR580 is not set > +diff --git a/target/linux/ar71xx/nand/config-default > b/target/linux/ar71xx/nand/config-default > +index 515266b..6357531 100644 > +--- a/target/linux/ar71xx/nand/config-default > ++++ b/target/linux/ar71xx/nand/config-default > +@@ -8,6 +8,7 @@ > + # CONFIG_ATH79_MACH_AP136 is not set > + # CONFIG_ATH79_MACH_AP147 is not set > + # CONFIG_ATH79_MACH_AP96 is not set > ++# CONFIG_ATH79_MACH_ARCHER_C25_V1 is not set > + # CONFIG_ATH79_MACH_ARCHER_C7 is not set > + # CONFIG_ATH79_MACH_AW_NR580 is not set > + # CONFIG_ATH79_MACH_CAP324 is not set > +-- > +2.1.4 > + > diff --git a/build_patches/openwrt/0007-firmware-utils-tplink- > safeloader-add-TP-Link-Archer-.patch b/build_patches/openwrt/0007- > firmware-utils-tplink-safeloader-add-TP-Link-Archer-.patch > new file mode 100644 > index 0000000..861ccfd > --- /dev/null > +++ b/build_patches/openwrt/0007-firmware-utils-tplink-safeloader- > add-TP-Link-Archer-.patch > @@ -0,0 +1,112 @@ > +From ae91fb7f8cef0fbd9b0ee707ce577ac9c5cdf2f2 Mon Sep 17 00:00:00 > 2001 > +From: Ludwig Thomeczek <ledesrc@wxorx.net> > +Date: Sat, 13 May 2017 11:40:48 +0200 > +Subject: [PATCH 7/7] firmware-utils: tplink-safeloader: add TP-Link > Archer C25 > + v1 > + > +This adds the necessary firmware layout definitions for the Archer > C25. > +It has an addtional partition containing some static data ("extra- > para") > +without which no factory flash is possible, therefore put_data() has > been > +added. > + > +Signed-off-by: Ludwig Thomeczek <ledesrc@wxorx.net> > +[Rebased on v17.01.2] > +Signed-off-by: Tim Niemeyer <tim@tnx-x.org> > +--- > + tools/firmware-utils/src/tplink-safeloader.c | 59 > +++++++++++++++++++++++++++- > + 1 file changed, 58 insertions(+), 1 deletion(-) > + > +diff --git a/tools/firmware-utils/src/tplink-safeloader.c > b/tools/firmware-utils/src/tplink-safeloader.c > +index 688cdac..2468426 100644 > +--- a/tools/firmware-utils/src/tplink-safeloader.c > ++++ b/tools/firmware-utils/src/tplink-safeloader.c > +@@ -299,6 +299,48 @@ static struct device_info boards[] = { > + .last_sysupgrade_partition = "file-system" > + }, > + > ++ /** Firmware layout for the C25v1 */ > ++ { > ++ .id = "ARCHER-C25-V1", > ++ .support_list = > ++ "SupportList:\n" > ++ "{product_name:ArcherC25,product_ver:1.0.0, > special_id:00000000}\n" > ++ "{product_name:ArcherC25,product_ver:1.0.0, > special_id:55530000}\n" > ++ "{product_name:ArcherC25,product_ver:1.0.0, > special_id:45550000}\n", > ++ .support_trail = '\x00', > ++ .soft_ver = "soft_ver:1.0.0\n", > ++ > ++ /** > ++ We use a bigger os-image partition than the > stock images (and thus > ++ smaller file-system), as our kernel doesn't fit > in the stock firmware's > ++ 1MB os-image. > ++ */ > ++ .partitions = { > ++ {"factory-boot", 0x00000, 0x20000}, > ++ {"fs-uboot", 0x20000, 0x10000}, > ++ {"os-image", 0x30000, 0x180000}, /* > Stock: base 0x30000 size 0x100000 */ > ++ {"file-system", 0x1b0000, 0x620000}, > /* Stock: base 0x130000 size 0x6a0000 */ > ++ {"user-config", 0x7d0000, 0x04000}, > ++ {"default-mac", 0x7e0000, 0x00100}, > ++ {"device-id", 0x7e0100, 0x00100}, > ++ {"extra-para", 0x7e0200, 0x00100}, > ++ {"pin", 0x7e0300, 0x00100}, > ++ {"support-list", 0x7e0400, 0x00400}, > ++ {"soft-version", 0x7e0800, 0x00400}, > ++ {"product-info", 0x7e0c00, 0x01400}, > ++ {"partition-table", 0x7e2000, 0x01000}, > ++ {"profile", 0x7e3000, 0x01000}, > ++ {"default-config", 0x7e4000, 0x04000}, > ++ {"merge-config", 0x7ec000, 0x02000}, > ++ {"qos-db", 0x7ee000, 0x02000}, > ++ {"radio", 0x7f0000, 0x10000}, > ++ {NULL, 0, 0} > ++ }, > ++ > ++ .first_sysupgrade_partition = "os-image", > ++ .last_sysupgrade_partition = "file-system", > ++ }, > ++ > + /** Firmware layout for the C5 */ > + { > + .id = "ARCHER-C5-V2", > +@@ -643,6 +685,15 @@ static struct image_partition_entry > read_file(const char *part_name, const char > + return entry; > + } > + > ++/** Creates a new image partition from arbitrary data */ > ++static struct image_partition_entry put_data(const char *part_name, > const char *datain, size_t len) { > ++ > ++ struct image_partition_entry entry = > alloc_image_partition(part_name, len); > ++ > ++ memcpy(entry.data, datain, len); > ++ > ++ return entry; > ++} > + > + /** > + Copies a list of image partitions into an image buffer and > generates the image partition table while doing so > +@@ -824,7 +875,8 @@ static void build_image(const char *output, > + bool add_jffs2_eof, > + bool sysupgrade, > + const struct device_info *info) { > +- struct image_partition_entry parts[6] = {}; > ++ > ++ struct image_partition_entry parts[7] = {}; > + > + parts[0] = make_partition_table(info->partitions); > + if (info->soft_ver) > +@@ -836,6 +888,11 @@ static void build_image(const char *output, > + parts[3] = read_file("os-image", kernel_image, false); > + parts[4] = read_file("file-system", rootfs_image, > add_jffs2_eof); > + > ++ if (strcasecmp(info->id, "ARCHER-C25-V1") == 0) { > ++ const char mdat[11] = {0x00, 0x00, 0x00, 0x02, > 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00}; > ++ parts[5] = put_data("extra-para", mdat, 11); > ++ } > ++ > + size_t len; > + void *image; > + if (sysupgrade) > +-- > +2.1.4 > + > diff --git a/src/packages/fff/fff-network/Makefile > b/src/packages/fff/fff-network/Makefile > index fee3f98..d34016c 100644 > --- a/src/packages/fff/fff-network/Makefile > +++ b/src/packages/fff/fff-network/Makefile > @@ -1,7 +1,7 @@ > include $(TOPDIR)/rules.mk > > PKG_NAME:=fff-network > -PKG_VERSION:=0.0.6 > +PKG_VERSION:=0.0.7 > PKG_RELEASE:=1 > > PKG_BUILD_DIR:=$(BUILD_DIR)/fff-network > diff --git a/src/packages/fff/fff-network/ar71xx/network.archer-c25- > v1 b/src/packages/fff/fff-network/ar71xx/network.archer-c25-v1 > new file mode 100644 > index 0000000..e524545 > --- /dev/null > +++ b/src/packages/fff/fff-network/ar71xx/network.archer-c25-v1 > @@ -0,0 +1,8 @@ > +WANDEV=eth0 > +SWITCHDEV=eth1 > +CLIENT_PORTS="1 2 0t" > +WAN_PORTS="" > +BATMAN_PORTS="3 4 0t" > + > +ETHMESHMAC=eth1 > +ROUTERMAC=eth0
Signed-off-by: Tim Niemeyer <tim@tn-x.org> --- Changes in v2: - Added kernel config for LEDs - Changed patch format bsp/ar71xx/.config | 3 + bsp/board_ar71xx.bsp | 1 + ...ils-tplink-safeloader-support-strings-as-.patch | 162 +++++++ ...1xx-add-support-for-TP-Link-Archer-C25-v1.patch | 499 +++++++++++++++++++++ ...ils-tplink-safeloader-add-TP-Link-Archer-.patch | 112 +++++ src/packages/fff/fff-network/Makefile | 2 +- .../fff/fff-network/ar71xx/network.archer-c25-v1 | 8 + 7 files changed, 786 insertions(+), 1 deletion(-) create mode 100644 build_patches/openwrt/0005-firmware-utils-tplink-safeloader-support-strings-as-.patch create mode 100644 build_patches/openwrt/0006-ar71xx-add-support-for-TP-Link-Archer-C25-v1.patch create mode 100644 build_patches/openwrt/0007-firmware-utils-tplink-safeloader-add-TP-Link-Archer-.patch create mode 100644 src/packages/fff/fff-network/ar71xx/network.archer-c25-v1