(Sorry, missed the changes to tplink-safeloader in firmware tools here, have submitted a separate patch with just those)
On 17 December 2015 at 13:34, Josh Bendavid <joshbenda...@gmail.com> wrote: > Add initial support for Archer C2600 to Makefiles and profiles along with > needed modifications to tplink-safeloader in firmware-tools. This is > sufficient to build a working factory image flashable both from stock web ui > and bootloader tftp recovery. Sysupgrade is working as well. > > Working: Wired network, wireless (both bands), power/status/lan/wan/usb led's > > Not working: wireless status led's (these are not controlled through gpio, > but rather through the QCA9980 pcie chips). Also there is no way to set the > wan led to orange, which is possible in the stock firmware. Kernel 4.1 build > does not boot currently. > > Not tested: Hardware buttons. > > Signed-off-by: Josh Bendavid <joshbenda...@gmail.com> > > --- > include/image.mk | 11 ++++ > .../linux/ipq806x/base-files/etc/board.d/01_leds | 7 +++ > .../ipq806x/base-files/etc/board.d/02_network | 3 +- > .../etc/hotplug.d/firmware/11-ath10k-caldata | 66 > ++++++++++++++++++++++ > target/linux/ipq806x/base-files/lib/ipq806x.sh | 3 + > .../ipq806x/base-files/lib/upgrade/platform.sh | 34 ++++++++++- > target/linux/ipq806x/image/Makefile | 24 +++++++- > target/linux/ipq806x/profiles/tplink.mk | 20 +++++++ > 8 files changed, 165 insertions(+), 3 deletions(-) > create mode 100644 > target/linux/ipq806x/base-files/etc/hotplug.d/firmware/11-ath10k-caldata > create mode 100644 target/linux/ipq806x/profiles/tplink.mk > > diff --git a/include/image.mk b/include/image.mk > index 6b2fb1a..70b7f4f 100644 > --- a/include/image.mk > +++ b/include/image.mk > @@ -327,6 +327,17 @@ define Build/netgear-dni > mv $@.new $@ > endef > > +define Build/tplink-safe > + $(STAGING_DIR_HOST)/bin/tplink-safeloader \ > + -B $(TPLINK_BOARD_ID) -V OpenWrt.$(REVISION) \ > + -k $(word 1,$^) \ > + -r $(word 2,$^) \ > + -j \ > + $(if $(findstring sysupgrade,$1),-S) \ > + -o $@.new > + mv $@.new $@ > +endef > + > define Build/fit > $(TOPDIR)/scripts/mkits.sh \ > -D $(DEVICE_NAME) -o $@.its -k $@ \ > diff --git a/target/linux/ipq806x/base-files/etc/board.d/01_leds > b/target/linux/ipq806x/base-files/etc/board.d/01_leds > index 07b5b06..46070ad6 100755 > --- a/target/linux/ipq806x/base-files/etc/board.d/01_leds > +++ b/target/linux/ipq806x/base-files/etc/board.d/01_leds > @@ -19,6 +19,13 @@ r7500) > ucidef_set_led_default "wps" "WPS" "r7500:white:wps" "0" > ucidef_set_led_default "rfkill" "rfkill" "r7500:white:rfkill" "0" > ;; > +c2600) > + ucidef_set_led_usbdev "usb1" "USB 1" "usb_2:blue" "2-1" > + ucidef_set_led_usbdev "usb2" "USB 2" "usb_4:blue" "4-1" > + ucidef_set_led_netdev "wan" "WAN" "wan:blue" "eth0" > + ucidef_set_led_netdev "lan" "LAN" "lan:blue" "br-lan" > + ucidef_set_led_default "general" "general" "ledgnr:blue" "1" > + ;; > *) > ;; > esac > diff --git a/target/linux/ipq806x/base-files/etc/board.d/02_network > b/target/linux/ipq806x/base-files/etc/board.d/02_network > index 1302a55..9f061e4 100755 > --- a/target/linux/ipq806x/base-files/etc/board.d/02_network > +++ b/target/linux/ipq806x/base-files/etc/board.d/02_network > @@ -13,7 +13,8 @@ board=$(ipq806x_board_name) > > case "$board" in > ap148 |\ > -r7500) > +r7500 |\ > +c2600) > ucidef_add_switch "switch0" \ > "1:lan" "2:lan" "3:lan" "4:lan" "6@eth1" "5:wan" "0@eth0" > ;; > diff --git > a/target/linux/ipq806x/base-files/etc/hotplug.d/firmware/11-ath10k-caldata > b/target/linux/ipq806x/base-files/etc/hotplug.d/firmware/11-ath10k-caldata > new file mode 100644 > index 0000000..7a423de > --- /dev/null > +++ b/target/linux/ipq806x/base-files/etc/hotplug.d/firmware/11-ath10k-caldata > @@ -0,0 +1,66 @@ > +#!/bin/sh > + > +ath10kcal_die() { > + echo "ath10cal: " "$*" > + exit 1 > +} > + > +ath10kcal_from_file() { > + local source=$1 > + local offset=$2 > + local count=$3 > + > + dd if=$source of=/lib/firmware/$FIRMWARE bs=1 skip=$offset > count=$count 2>/dev/null || \ > + ath10kcal_die "failed to extract calibration data from > $source" > +} > + > +ath10kcal_extract() { > + local part=$1 > + local offset=$2 > + local count=$3 > + local mtd > + > + mtd=$(find_mtd_chardev $part) > + [ -n "$mtd" ] || \ > + ath10kcal_die "no mtd device found for partition $part" > + > + dd if=$mtd of=/lib/firmware/$FIRMWARE bs=1 skip=$offset count=$count > 2>/dev/null || \ > + ath10kcal_die "failed to extract calibration data from $mtd" > +} > + > +ath10kcal_patch_mac() { > + local mac=$1 > + > + [ -z "$mac" ] && return > + > + macaddr_2bin $mac | dd of=/lib/firmware/$FIRMWARE conv=notrunc bs=1 > seek=6 count=6 > +} > + > +[ -e /lib/firmware/$FIRMWARE ] && exit 0 > + > +. /lib/ipq806x.sh > +. /lib/functions.sh > +. /lib/functions/system.sh > + > +board=$(ipq806x_board_name) > + > + > +case "$FIRMWARE" in > +"ath10k/cal-pci-0000:01:00.0.bin") > + case $board in > + c2600) > + ath10kcal_extract "0:ART" 4096 12064 > + ;; > + esac > + ;; > +"ath10k/cal-pci-0001:01:00.0.bin") > + case $board in > + c2600) > + ath10kcal_extract "0:ART" 20480 12064 > + ;; > + esac > + ;; > +*) > + exit 1 > + ;; > +esac > diff --git a/target/linux/ipq806x/base-files/lib/ipq806x.sh > b/target/linux/ipq806x/base-files/lib/ipq806x.sh > index 5b27bde..262183f 100644 > --- a/target/linux/ipq806x/base-files/lib/ipq806x.sh > +++ b/target/linux/ipq806x/base-files/lib/ipq806x.sh > @@ -23,6 +23,9 @@ ipq806x_board_detect() { > *"R7500") > name="r7500" > ;; > + *"C2600") > + name="c2600" > + ;; > esac > > [ -z "$name" ] && name="unknown" > diff --git a/target/linux/ipq806x/base-files/lib/upgrade/platform.sh > b/target/linux/ipq806x/base-files/lib/upgrade/platform.sh > index c0e19a1..7fc08bb 100644 > --- a/target/linux/ipq806x/base-files/lib/upgrade/platform.sh > +++ b/target/linux/ipq806x/base-files/lib/upgrade/platform.sh > @@ -11,6 +11,14 @@ platform_check_image() { > nand_do_platform_check $board $1 > return $?; > ;; > + c2600) > + local magic_long="$(get_magic_long "$1")" > + [ "$magic_long" != "27051956" ] && { > + echo "Invalid image, bad magic: $magic_long" > + return 1 > + } > + return 0; > + ;; > *) > return 1; > esac > @@ -27,4 +35,28 @@ platform_pre_upgrade() { > esac > } > > -# use default for platform_do_upgrade() > +platform_do_upgrade() { > + local board=$(ipq806x_board_name) > + > + case "$board" in > + c2600) > + platform_do_upgrade_c2600 "$ARGV" > + ;; > + esac > +} > + > +platform_do_upgrade_c2600() { > + local kernpart="0:HLOS" > + local rootfspart="rootfs" > + > + local kernel_mtd="$(find_mtd_index $kernpart)" > + > + local kerndev="/dev/mtd${kernel_mtd}" > + local rootfsdev=$rootfspart > + > + PART_NAME="${kerndev}:${rootfsdev}" > + MTD_CONFIG_ARGS="-s 0x200000" > + > + default_do_upgrade "$ARGV" > + > +} > diff --git a/target/linux/ipq806x/image/Makefile > b/target/linux/ipq806x/image/Makefile > index 14cf442..956d724 100644 > --- a/target/linux/ipq806x/image/Makefile > +++ b/target/linux/ipq806x/image/Makefile > @@ -85,6 +85,19 @@ define Device/DniImage > endef > DEVICE_VARS += KERNEL_SIZE NETGEAR_BOARD_ID NETGEAR_HW_ID DEVICE_BLOCK_SIZE > DEVICE_PAGE_SIZE > > +define Device/TpSafeImage > + PROFILES += $$(DEVICE_NAME) > + FILESYSTEMS := squashfs > + KERNEL_SUFFIX := -uImage > + KERNEL = kernel-bin | append-dtb | uImage none > + KERNEL_NAME := zImage > + TPLINK_BOARD_ID := > + IMAGES := factory.bin sysupgrade.bin > + IMAGE/factory.bin := tplink-safe factory > + IMAGE/sysupgrade.bin := tplink-safe sysupgrade > +endef > +DEVICE_VARS += TPLINK_BOARD_ID > + > define Device/AP148 > $(call Device/FitImage) > $(call Device/UbiFit) > @@ -103,6 +116,15 @@ define Device/AP148-legacy > BOARD_NAME := ap148 > endef > > +define Device/C2600 > + $(call Device/TpSafeImage) > + DEVICE_DTS := qcom-ipq8064-c2600 > + BLOCKSIZE := 128KiB > + PAGESIZE := 2048 > + BOARD_NAME := c2600 > + TPLINK_BOARD_ID := C2600 > +endef > + > define Device/DB149 > $(call Device/FitImage) > DEVICE_DTS := qcom-ipq8064-db149 > @@ -121,6 +143,6 @@ define Device/R7500 > BOARD_NAME := r7500 > endef > > -TARGET_DEVICES += AP148 AP148-legacy DB149 R7500 > +TARGET_DEVICES += AP148 AP148-legacy C2600 DB149 R7500 > > $(eval $(call BuildImage)) > diff --git a/target/linux/ipq806x/profiles/tplink.mk > b/target/linux/ipq806x/profiles/tplink.mk > new file mode 100644 > index 0000000..d3f5a6c > --- /dev/null > +++ b/target/linux/ipq806x/profiles/tplink.mk > @@ -0,0 +1,20 @@ > +# > +# Copyright (c) 2014 The Linux Foundation. All rights reserved. > +# Copyright (C) 2009 OpenWrt.org > +# > +# This is free software, licensed under the GNU General Public License v2. > +# See /LICENSE for more information. > +# > + > +define Profile/C2600 > + NAME:=TP-Link Archer C2600 > + PACKAGES:= \ > + kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-ledtrig-usbdev \ > + kmod-usb3 kmod-usb-dwc3-qcom kmod-usb-phy-qcom-dwc3 \ > + kmod-ath10k ath10k-firmware-qca99x0 wpad-mini > +endef > + > +define Profile/C2600/Description > + Package set for the TP-Link Archer C2600. > +endef > +$(eval $(call Profile,C2600)) > -- > 2.6.4 > _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel