Message ID | 1498928816-12109-3-git-send-email-tim@tn-x.org |
---|---|
State | Superseded |
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..78dee3d --- /dev/null +++ b/build_patches/openwrt/0005-firmware-utils-tplink-safeloader-support-strings-as-.patch @@ -0,0 +1,162 @@ +From d0828f2bc391e0eff5240eb50de2d8eb0c9c1909 Mon Sep 17 00:00:00 2001 +From: Jan Niehusmann <jan@gondor.com> +Date: Fri, 19 May 2017 09:42:24 +0200 +Subject: [PATCH 1/3] 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 tools/firmware-utils/src/tplink-safeloader.c tools/firmware-utils/src/tplink-safeloader.c +index 4e3d205..688cdac 100644 +--- tools/firmware-utils/src/tplink-safeloader.c ++++ 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..eaddb36 --- /dev/null +++ b/build_patches/openwrt/0006-ar71xx-add-support-for-TP-Link-Archer-C25-v1.patch @@ -0,0 +1,483 @@ +From 205e86e9b8492136a5283fa895220b4f3e05c6d3 Mon Sep 17 00:00:00 2001 +From: Ludwig Thomeczek <ledesrc@wxorx.net> +Date: Sat, 22 Apr 2017 18:21:47 +0200 +Subject: [PATCH 2/3] 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 | 1 + + .../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, 283 insertions(+) + create mode 100644 target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c + +diff --git target/linux/ar71xx/base-files/etc/board.d/01_leds target/linux/ar71xx/base-files/etc/board.d/01_leds +index 0279dfc..3aa2bfb 100755 +--- target/linux/ar71xx/base-files/etc/board.d/01_leds ++++ 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 target/linux/ar71xx/base-files/etc/board.d/02_network target/linux/ar71xx/base-files/etc/board.d/02_network +index c8c7827..4404e80 100755 +--- target/linux/ar71xx/base-files/etc/board.d/02_network ++++ 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 target/linux/ar71xx/base-files/etc/diag.sh target/linux/ar71xx/base-files/etc/diag.sh +index 7b8aac8..cf6278c 100644 +--- target/linux/ar71xx/base-files/etc/diag.sh ++++ 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 target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata +index b3e23c9..68f90de 100644 +--- target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata ++++ 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 target/linux/ar71xx/base-files/lib/ar71xx.sh target/linux/ar71xx/base-files/lib/ar71xx.sh +index b035535..0d01c5e 100755 +--- target/linux/ar71xx/base-files/lib/ar71xx.sh ++++ 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 target/linux/ar71xx/base-files/lib/upgrade/platform.sh target/linux/ar71xx/base-files/lib/upgrade/platform.sh +index 580e09a..e2aaceb 100755 +--- target/linux/ar71xx/base-files/lib/upgrade/platform.sh ++++ 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 target/linux/ar71xx/config-4.4 target/linux/ar71xx/config-4.4 +index ff6bb13..d9c7885 100644 +--- target/linux/ar71xx/config-4.4 ++++ 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 +diff --git target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt +index 76ba6fa..d49659c 100644 +--- target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt ++++ 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 target/linux/ar71xx/files/arch/mips/ath79/Makefile target/linux/ar71xx/files/arch/mips/ath79/Makefile +index c91d03f..fc28716 100644 +--- target/linux/ar71xx/files/arch/mips/ath79/Makefile ++++ 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 target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c +new file mode 100644 +index 0000000..a0f001c +--- /dev/null ++++ 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 target/linux/ar71xx/files/arch/mips/ath79/machtypes.h target/linux/ar71xx/files/arch/mips/ath79/machtypes.h +index b9a8e3e..53f0d1c 100644 +--- target/linux/ar71xx/files/arch/mips/ath79/machtypes.h ++++ 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 target/linux/ar71xx/image/tp-link.mk target/linux/ar71xx/image/tp-link.mk +index 1c88f43..f70c12c 100644 +--- target/linux/ar71xx/image/tp-link.mk ++++ 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 target/linux/ar71xx/mikrotik/config-default target/linux/ar71xx/mikrotik/config-default +index 44ea327..3f11c23 100644 +--- target/linux/ar71xx/mikrotik/config-default ++++ 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 target/linux/ar71xx/nand/config-default target/linux/ar71xx/nand/config-default +index 515266b..6357531 100644 +--- target/linux/ar71xx/nand/config-default ++++ 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..a9345bc --- /dev/null +++ b/build_patches/openwrt/0007-firmware-utils-tplink-safeloader-add-TP-Link-Archer-.patch @@ -0,0 +1,112 @@ +From a0183cdf40fdb7e136c9ca8c74542e62f1f17278 Mon Sep 17 00:00:00 2001 +From: Ludwig Thomeczek <ledesrc@wxorx.net> +Date: Sat, 13 May 2017 11:40:48 +0200 +Subject: [PATCH 3/3] 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 tools/firmware-utils/src/tplink-safeloader.c tools/firmware-utils/src/tplink-safeloader.c +index 688cdac..2468426 100644 +--- tools/firmware-utils/src/tplink-safeloader.c ++++ 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
Hi danke für deine Arbeit. Ich hab das ganze mal überflogen, unser internes Zeug soweit verstanden und ist ok. Das ganze LEDE C bin ich aber wirklich nur ganz grob durchgegangen und testen kann ich es aus Mangel an Hardware auch nicht. Ich setzt dennoch mal ein Reviewed-by: Christian Dresel <fff@chrisi01.de> darunter mit den oben genannten Einschränkungen. mfg Christian On 01.07.2017 19:06, Tim Niemeyer wrote: > Signed-off-by: Tim Niemeyer <tim@tn-x.org> > --- > > 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 | 483 +++++++++++++++++++++ > ...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, 770 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..78dee3d > --- /dev/null > +++ b/build_patches/openwrt/0005-firmware-utils-tplink-safeloader-support-strings-as-.patch > @@ -0,0 +1,162 @@ > +From d0828f2bc391e0eff5240eb50de2d8eb0c9c1909 Mon Sep 17 00:00:00 2001 > +From: Jan Niehusmann <jan@gondor.com> > +Date: Fri, 19 May 2017 09:42:24 +0200 > +Subject: [PATCH 1/3] 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 tools/firmware-utils/src/tplink-safeloader.c tools/firmware-utils/src/tplink-safeloader.c > +index 4e3d205..688cdac 100644 > +--- tools/firmware-utils/src/tplink-safeloader.c > ++++ 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..eaddb36 > --- /dev/null > +++ b/build_patches/openwrt/0006-ar71xx-add-support-for-TP-Link-Archer-C25-v1.patch > @@ -0,0 +1,483 @@ > +From 205e86e9b8492136a5283fa895220b4f3e05c6d3 Mon Sep 17 00:00:00 2001 > +From: Ludwig Thomeczek <ledesrc@wxorx.net> > +Date: Sat, 22 Apr 2017 18:21:47 +0200 > +Subject: [PATCH 2/3] 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 | 1 + > + .../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, 283 insertions(+) > + create mode 100644 target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c > + > +diff --git target/linux/ar71xx/base-files/etc/board.d/01_leds target/linux/ar71xx/base-files/etc/board.d/01_leds > +index 0279dfc..3aa2bfb 100755 > +--- target/linux/ar71xx/base-files/etc/board.d/01_leds > ++++ 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 target/linux/ar71xx/base-files/etc/board.d/02_network target/linux/ar71xx/base-files/etc/board.d/02_network > +index c8c7827..4404e80 100755 > +--- target/linux/ar71xx/base-files/etc/board.d/02_network > ++++ 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 target/linux/ar71xx/base-files/etc/diag.sh target/linux/ar71xx/base-files/etc/diag.sh > +index 7b8aac8..cf6278c 100644 > +--- target/linux/ar71xx/base-files/etc/diag.sh > ++++ 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 target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata > +index b3e23c9..68f90de 100644 > +--- target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata > ++++ 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 target/linux/ar71xx/base-files/lib/ar71xx.sh target/linux/ar71xx/base-files/lib/ar71xx.sh > +index b035535..0d01c5e 100755 > +--- target/linux/ar71xx/base-files/lib/ar71xx.sh > ++++ 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 target/linux/ar71xx/base-files/lib/upgrade/platform.sh target/linux/ar71xx/base-files/lib/upgrade/platform.sh > +index 580e09a..e2aaceb 100755 > +--- target/linux/ar71xx/base-files/lib/upgrade/platform.sh > ++++ 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 target/linux/ar71xx/config-4.4 target/linux/ar71xx/config-4.4 > +index ff6bb13..d9c7885 100644 > +--- target/linux/ar71xx/config-4.4 > ++++ 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 > +diff --git target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt > +index 76ba6fa..d49659c 100644 > +--- target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt > ++++ 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 target/linux/ar71xx/files/arch/mips/ath79/Makefile target/linux/ar71xx/files/arch/mips/ath79/Makefile > +index c91d03f..fc28716 100644 > +--- target/linux/ar71xx/files/arch/mips/ath79/Makefile > ++++ 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 target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c > +new file mode 100644 > +index 0000000..a0f001c > +--- /dev/null > ++++ 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 target/linux/ar71xx/files/arch/mips/ath79/machtypes.h target/linux/ar71xx/files/arch/mips/ath79/machtypes.h > +index b9a8e3e..53f0d1c 100644 > +--- target/linux/ar71xx/files/arch/mips/ath79/machtypes.h > ++++ 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 target/linux/ar71xx/image/tp-link.mk target/linux/ar71xx/image/tp-link.mk > +index 1c88f43..f70c12c 100644 > +--- target/linux/ar71xx/image/tp-link.mk > ++++ 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 target/linux/ar71xx/mikrotik/config-default target/linux/ar71xx/mikrotik/config-default > +index 44ea327..3f11c23 100644 > +--- target/linux/ar71xx/mikrotik/config-default > ++++ 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 target/linux/ar71xx/nand/config-default target/linux/ar71xx/nand/config-default > +index 515266b..6357531 100644 > +--- target/linux/ar71xx/nand/config-default > ++++ 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..a9345bc > --- /dev/null > +++ b/build_patches/openwrt/0007-firmware-utils-tplink-safeloader-add-TP-Link-Archer-.patch > @@ -0,0 +1,112 @@ > +From a0183cdf40fdb7e136c9ca8c74542e62f1f17278 Mon Sep 17 00:00:00 2001 > +From: Ludwig Thomeczek <ledesrc@wxorx.net> > +Date: Sat, 13 May 2017 11:40:48 +0200 > +Subject: [PATCH 3/3] 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 tools/firmware-utils/src/tplink-safeloader.c tools/firmware-utils/src/tplink-safeloader.c > +index 688cdac..2468426 100644 > +--- tools/firmware-utils/src/tplink-safeloader.c > ++++ 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 >
hi ich habs nuna uch getestet und noch 2 Anmerkungen: - Die LEDs leuchten alle (bis auf Power) dauerhaft. Nach meinen Infos sollten sie im LEDE Master aber gehen. - Batman scheint auf den w5mesh Interface nicht zu gehen. Ich kann zwar über das AdHoc pingen und sogar per SSH von einen Router auf den anderen zugreifen (fe80::MAC%w5mesh geht) aber Batman selbst geht nicht (sobald ich w2mesh ausschalte und das Batmankabel ziehe ist der Router isoliert man kommt nur noch direkt per AdHoc drauf und ein batctl o sagt dann "no nodes in Range"). batctl if sagt aber das Batman auf den Interface liegt. Wieso/weshalb muss man mal gucken. mfg Christian On 02.07.2017 18:20, Christian Dresel wrote: > Hi > > danke für deine Arbeit. Ich hab das ganze mal überflogen, unser internes > Zeug soweit verstanden und ist ok. Das ganze LEDE C bin ich aber > wirklich nur ganz grob durchgegangen und testen kann ich es aus Mangel > an Hardware auch nicht. > > Ich setzt dennoch mal ein > > Reviewed-by: Christian Dresel <fff@chrisi01.de> > > darunter mit den oben genannten Einschränkungen. > > mfg > > Christian > > On 01.07.2017 19:06, Tim Niemeyer wrote: >> Signed-off-by: Tim Niemeyer <tim@tn-x.org> >> --- >> >> 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 | 483 +++++++++++++++++++++ >> ...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, 770 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..78dee3d >> --- /dev/null >> +++ b/build_patches/openwrt/0005-firmware-utils-tplink-safeloader-support-strings-as-.patch >> @@ -0,0 +1,162 @@ >> +From d0828f2bc391e0eff5240eb50de2d8eb0c9c1909 Mon Sep 17 00:00:00 2001 >> +From: Jan Niehusmann <jan@gondor.com> >> +Date: Fri, 19 May 2017 09:42:24 +0200 >> +Subject: [PATCH 1/3] 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 tools/firmware-utils/src/tplink-safeloader.c tools/firmware-utils/src/tplink-safeloader.c >> +index 4e3d205..688cdac 100644 >> +--- tools/firmware-utils/src/tplink-safeloader.c >> ++++ 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..eaddb36 >> --- /dev/null >> +++ b/build_patches/openwrt/0006-ar71xx-add-support-for-TP-Link-Archer-C25-v1.patch >> @@ -0,0 +1,483 @@ >> +From 205e86e9b8492136a5283fa895220b4f3e05c6d3 Mon Sep 17 00:00:00 2001 >> +From: Ludwig Thomeczek <ledesrc@wxorx.net> >> +Date: Sat, 22 Apr 2017 18:21:47 +0200 >> +Subject: [PATCH 2/3] 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 | 1 + >> + .../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, 283 insertions(+) >> + create mode 100644 target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c >> + >> +diff --git target/linux/ar71xx/base-files/etc/board.d/01_leds target/linux/ar71xx/base-files/etc/board.d/01_leds >> +index 0279dfc..3aa2bfb 100755 >> +--- target/linux/ar71xx/base-files/etc/board.d/01_leds >> ++++ 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 target/linux/ar71xx/base-files/etc/board.d/02_network target/linux/ar71xx/base-files/etc/board.d/02_network >> +index c8c7827..4404e80 100755 >> +--- target/linux/ar71xx/base-files/etc/board.d/02_network >> ++++ 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 target/linux/ar71xx/base-files/etc/diag.sh target/linux/ar71xx/base-files/etc/diag.sh >> +index 7b8aac8..cf6278c 100644 >> +--- target/linux/ar71xx/base-files/etc/diag.sh >> ++++ 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 target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata >> +index b3e23c9..68f90de 100644 >> +--- target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata >> ++++ 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 target/linux/ar71xx/base-files/lib/ar71xx.sh target/linux/ar71xx/base-files/lib/ar71xx.sh >> +index b035535..0d01c5e 100755 >> +--- target/linux/ar71xx/base-files/lib/ar71xx.sh >> ++++ 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 target/linux/ar71xx/base-files/lib/upgrade/platform.sh target/linux/ar71xx/base-files/lib/upgrade/platform.sh >> +index 580e09a..e2aaceb 100755 >> +--- target/linux/ar71xx/base-files/lib/upgrade/platform.sh >> ++++ 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 target/linux/ar71xx/config-4.4 target/linux/ar71xx/config-4.4 >> +index ff6bb13..d9c7885 100644 >> +--- target/linux/ar71xx/config-4.4 >> ++++ 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 >> +diff --git target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt >> +index 76ba6fa..d49659c 100644 >> +--- target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt >> ++++ 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 target/linux/ar71xx/files/arch/mips/ath79/Makefile target/linux/ar71xx/files/arch/mips/ath79/Makefile >> +index c91d03f..fc28716 100644 >> +--- target/linux/ar71xx/files/arch/mips/ath79/Makefile >> ++++ 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 target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c >> +new file mode 100644 >> +index 0000000..a0f001c >> +--- /dev/null >> ++++ 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 target/linux/ar71xx/files/arch/mips/ath79/machtypes.h target/linux/ar71xx/files/arch/mips/ath79/machtypes.h >> +index b9a8e3e..53f0d1c 100644 >> +--- target/linux/ar71xx/files/arch/mips/ath79/machtypes.h >> ++++ 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 target/linux/ar71xx/image/tp-link.mk target/linux/ar71xx/image/tp-link.mk >> +index 1c88f43..f70c12c 100644 >> +--- target/linux/ar71xx/image/tp-link.mk >> ++++ 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 target/linux/ar71xx/mikrotik/config-default target/linux/ar71xx/mikrotik/config-default >> +index 44ea327..3f11c23 100644 >> +--- target/linux/ar71xx/mikrotik/config-default >> ++++ 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 target/linux/ar71xx/nand/config-default target/linux/ar71xx/nand/config-default >> +index 515266b..6357531 100644 >> +--- target/linux/ar71xx/nand/config-default >> ++++ 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..a9345bc >> --- /dev/null >> +++ b/build_patches/openwrt/0007-firmware-utils-tplink-safeloader-add-TP-Link-Archer-.patch >> @@ -0,0 +1,112 @@ >> +From a0183cdf40fdb7e136c9ca8c74542e62f1f17278 Mon Sep 17 00:00:00 2001 >> +From: Ludwig Thomeczek <ledesrc@wxorx.net> >> +Date: Sat, 13 May 2017 11:40:48 +0200 >> +Subject: [PATCH 3/3] 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 tools/firmware-utils/src/tplink-safeloader.c tools/firmware-utils/src/tplink-safeloader.c >> +index 688cdac..2468426 100644 >> +--- tools/firmware-utils/src/tplink-safeloader.c >> ++++ 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 >> > > >
Am Freitag, den 07.07.2017, 12:33 +0200 schrieb Christian Dresel: > hi > > ich habs nuna uch getestet und noch 2 Anmerkungen: > > - Die LEDs leuchten alle (bis auf Power) dauerhaft. Nach meinen Infos > sollten sie im LEDE Master aber gehen. Ja, v2 hab ich geschickt, da sollte das behoben sein. > - Batman scheint auf den w5mesh Interface nicht zu gehen. Ich kann zwar > über das AdHoc pingen und sogar per SSH von einen Router auf den anderen > zugreifen (fe80::MAC%w5mesh geht) aber Batman selbst geht nicht (sobald > ich w2mesh ausschalte und das Batmankabel ziehe ist der Router isoliert > man kommt nur noch direkt per AdHoc drauf und ein batctl o sagt dann "no > nodes in Range"). batctl if sagt aber das Batman auf den Interface > liegt. Wieso/weshalb muss man mal gucken. Ich befürchte bei dem 5 GHz Thema können wir grad nicht so viel machen. Mir fehlt da jedenfalls die Zeit. Tim > mfg > > Christian > > On 02.07.2017 18:20, Christian Dresel wrote: > > Hi > > > > danke für deine Arbeit. Ich hab das ganze mal überflogen, unser internes > > Zeug soweit verstanden und ist ok. Das ganze LEDE C bin ich aber > > wirklich nur ganz grob durchgegangen und testen kann ich es aus Mangel > > an Hardware auch nicht. > > > > Ich setzt dennoch mal ein > > > > Reviewed-by: Christian Dresel <fff@chrisi01.de> > > > > darunter mit den oben genannten Einschränkungen. > > > > mfg > > > > Christian > > > > On 01.07.2017 19:06, Tim Niemeyer wrote: > >> Signed-off-by: Tim Niemeyer <tim@tn-x.org> > >> --- > >> > >> 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 | 483 +++++++++++++++++++++ > >> ...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, 770 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..78dee3d > >> --- /dev/null > >> +++ b/build_patches/openwrt/0005-firmware-utils-tplink-safeloader-support-strings-as-.patch > >> @@ -0,0 +1,162 @@ > >> +From d0828f2bc391e0eff5240eb50de2d8eb0c9c1909 Mon Sep 17 00:00:00 2001 > >> +From: Jan Niehusmann <jan@gondor.com> > >> +Date: Fri, 19 May 2017 09:42:24 +0200 > >> +Subject: [PATCH 1/3] 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 tools/firmware-utils/src/tplink-safeloader.c tools/firmware-utils/src/tplink-safeloader.c > >> +index 4e3d205..688cdac 100644 > >> +--- tools/firmware-utils/src/tplink-safeloader.c > >> ++++ 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..eaddb36 > >> --- /dev/null > >> +++ b/build_patches/openwrt/0006-ar71xx-add-support-for-TP-Link-Archer-C25-v1.patch > >> @@ -0,0 +1,483 @@ > >> +From 205e86e9b8492136a5283fa895220b4f3e05c6d3 Mon Sep 17 00:00:00 2001 > >> +From: Ludwig Thomeczek <ledesrc@wxorx.net> > >> +Date: Sat, 22 Apr 2017 18:21:47 +0200 > >> +Subject: [PATCH 2/3] 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 | 1 + > >> + .../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, 283 insertions(+) > >> + create mode 100644 target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c > >> + > >> +diff --git target/linux/ar71xx/base-files/etc/board.d/01_leds target/linux/ar71xx/base-files/etc/board.d/01_leds > >> +index 0279dfc..3aa2bfb 100755 > >> +--- target/linux/ar71xx/base-files/etc/board.d/01_leds > >> ++++ 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 target/linux/ar71xx/base-files/etc/board.d/02_network target/linux/ar71xx/base-files/etc/board.d/02_network > >> +index c8c7827..4404e80 100755 > >> +--- target/linux/ar71xx/base-files/etc/board.d/02_network > >> ++++ 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 target/linux/ar71xx/base-files/etc/diag.sh target/linux/ar71xx/base-files/etc/diag.sh > >> +index 7b8aac8..cf6278c 100644 > >> +--- target/linux/ar71xx/base-files/etc/diag.sh > >> ++++ 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 target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata > >> +index b3e23c9..68f90de 100644 > >> +--- target/linux/ar71xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata > >> ++++ 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 target/linux/ar71xx/base-files/lib/ar71xx.sh target/linux/ar71xx/base-files/lib/ar71xx.sh > >> +index b035535..0d01c5e 100755 > >> +--- target/linux/ar71xx/base-files/lib/ar71xx.sh > >> ++++ 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 target/linux/ar71xx/base-files/lib/upgrade/platform.sh target/linux/ar71xx/base-files/lib/upgrade/platform.sh > >> +index 580e09a..e2aaceb 100755 > >> +--- target/linux/ar71xx/base-files/lib/upgrade/platform.sh > >> ++++ 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 target/linux/ar71xx/config-4.4 target/linux/ar71xx/config-4.4 > >> +index ff6bb13..d9c7885 100644 > >> +--- target/linux/ar71xx/config-4.4 > >> ++++ 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 > >> +diff --git target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt > >> +index 76ba6fa..d49659c 100644 > >> +--- target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt > >> ++++ 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 target/linux/ar71xx/files/arch/mips/ath79/Makefile target/linux/ar71xx/files/arch/mips/ath79/Makefile > >> +index c91d03f..fc28716 100644 > >> +--- target/linux/ar71xx/files/arch/mips/ath79/Makefile > >> ++++ 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 target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c target/linux/ar71xx/files/arch/mips/ath79/mach-archer-c25-v1.c > >> +new file mode 100644 > >> +index 0000000..a0f001c > >> +--- /dev/null > >> ++++ 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 target/linux/ar71xx/files/arch/mips/ath79/machtypes.h target/linux/ar71xx/files/arch/mips/ath79/machtypes.h > >> +index b9a8e3e..53f0d1c 100644 > >> +--- target/linux/ar71xx/files/arch/mips/ath79/machtypes.h > >> ++++ 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 target/linux/ar71xx/image/tp-link.mk target/linux/ar71xx/image/tp-link.mk > >> +index 1c88f43..f70c12c 100644 > >> +--- target/linux/ar71xx/image/tp-link.mk > >> ++++ 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 target/linux/ar71xx/mikrotik/config-default target/linux/ar71xx/mikrotik/config-default > >> +index 44ea327..3f11c23 100644 > >> +--- target/linux/ar71xx/mikrotik/config-default > >> ++++ 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 target/linux/ar71xx/nand/config-default target/linux/ar71xx/nand/config-default > >> +index 515266b..6357531 100644 > >> +--- target/linux/ar71xx/nand/config-default > >> ++++ 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..a9345bc > >> --- /dev/null > >> +++ b/build_patches/openwrt/0007-firmware-utils-tplink-safeloader-add-TP-Link-Archer-.patch > >> @@ -0,0 +1,112 @@ > >> +From a0183cdf40fdb7e136c9ca8c74542e62f1f17278 Mon Sep 17 00:00:00 2001 > >> +From: Ludwig Thomeczek <ledesrc@wxorx.net> > >> +Date: Sat, 13 May 2017 11:40:48 +0200 > >> +Subject: [PATCH 3/3] 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 tools/firmware-utils/src/tplink-safeloader.c tools/firmware-utils/src/tplink-safeloader.c > >> +index 688cdac..2468426 100644 > >> +--- tools/firmware-utils/src/tplink-safeloader.c > >> ++++ 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> --- 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 | 483 +++++++++++++++++++++ ...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, 770 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