From patchwork Thu Dec 17 12:34:26 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Bendavid X-Patchwork-Id: 558322 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from arrakis.dune.hu (arrakis.dune.hu [78.24.191.176]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 402421401DE for ; Thu, 17 Dec 2015 23:35:38 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=zcPBRzSY; dkim-atps=neutral Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 769EC2804AF; Thu, 17 Dec 2015 13:35:01 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on arrakis.dune.hu X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,FREEMAIL_FROM, T_DKIM_INVALID autolearn=unavailable version=3.3.2 Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 448FE2800EA for ; Thu, 17 Dec 2015 13:34:43 +0100 (CET) X-policyd-weight: using cached result; rate: -8.5 Received: from mail-wm0-f51.google.com (mail-wm0-f51.google.com [74.125.82.51]) by arrakis.dune.hu (Postfix) with ESMTPS for ; Thu, 17 Dec 2015 13:34:42 +0100 (CET) Received: by mail-wm0-f51.google.com with SMTP id p187so19091976wmp.1 for ; Thu, 17 Dec 2015 04:34:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=6DSK2hIoR3eifp8otRCAXJbe7c/ZZvgUUDbCk5Vv2qU=; b=zcPBRzSYQByzWcAxY9pQPXRvJG4+UHKtvghx5GRLMQTosuXrp5Qd8wlVnd2pTVEa1G R5wdnSaPMHeUlb/g+OxzItPbdsx7D5kzY4Ekf/z+DqhmHl8c0qOCQkchETryw1A3GCa9 7oHIdJLoGydhihQ5fsil/AE53axN78HtfH6vi0ScEy8PWwukzpca0vU668IHKGqwvs1d Iov6X0DAOy3L4tEP84UZwkfkYEI4ARyBGhznwOeZLl6pM93x1CPyRbYEV0dA+sGN1n3E v5djfj8Y9K6WKtxKgmEYwx1PhbbaXICmcZBWsKX8wUtdMEAk5GWUfqNX6qb/tBIS3/0Z I/0A== X-Received: by 10.194.114.34 with SMTP id jd2mr57164983wjb.12.1450355698059; Thu, 17 Dec 2015 04:34:58 -0800 (PST) Received: from theMuleDesktop.lan ([2001:1620:bed:0:5604:a6ff:fed9:355c]) by smtp.gmail.com with ESMTPSA id z1sm10275049wje.35.2015.12.17.04.34.56 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 17 Dec 2015 04:34:57 -0800 (PST) From: Josh Bendavid To: openwrt-devel@lists.openwrt.org Date: Thu, 17 Dec 2015 13:34:26 +0100 Message-Id: <1450355666-6230-1-git-send-email-joshbendavid@gmail.com> X-Mailer: git-send-email 2.6.4 Subject: [OpenWrt-Devel] [PATCH 1/3] initial support for TP-Link Archer C2600 X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: openwrt-devel-bounces@lists.openwrt.org Sender: "openwrt-devel" 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 --- 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))