Hi, comments inline
On 04/01/2016 02:16, Josh Bendavid wrote: > Add initial support for Archer C2600 to Makefiles, profiles, led/network > config, and hotplug script. Together with firmware-utils and mac80211 > patches this is sufficient to build a working factory image flashable both > from stock web ui and bootloader tftp recovery. Sysupgrade is working as > well. Added hotplug script is adapted from existing script for ar71xx which > copies wireless calibration data from ART partition in flash to appropriate > place in /lib/firmware. The device tree file is similar to the current ap148 > dts, with sata and nand removed, and buttons/led's added. > > 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> > > > --- > .../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 +- > ...qcom-add-TP-Link-Archer-C2600-device-tree.patch | 300 > +++++++++++++++++++++ > ...qcom-add-TP-Link-Archer-C2600-device-tree.patch | 300 > +++++++++++++++++++++ > target/linux/ipq806x/profiles/tplink.mk | 20 ++ > 9 files changed, 754 insertions(+), 3 deletions(-) > create mode 100644 > target/linux/ipq806x/base-files/etc/hotplug.d/firmware/11-ath10k-caldata > create mode 100644 > target/linux/ipq806x/patches-3.18/711-ARM-qcom-add-TP-Link-Archer-C2600-device-tree.patch > create mode 100644 > target/linux/ipq806x/patches-4.1/711-ARM-qcom-add-TP-Link-Archer-C2600-device-tree.patch > create mode 100644 target/linux/ipq806x/profiles/tplink.mk > > 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" > + ;; > alphabetical ordering please *) > ;; > 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) alphabetical ordering please > 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 @@ i missed this one before. it should really go into its own patch aswell > +#!/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 alphabetical ordering please > > [ -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; > + ;; alphabetical ordering please > *) > 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/patches-3.18/711-ARM-qcom-add-TP-Link-Archer-C2600-device-tree.patch > > b/target/linux/ipq806x/patches-3.18/711-ARM-qcom-add-TP-Link-Archer-C2600-device-tree.patch > new file mode 100644 > index 0000000..536ae57 > --- /dev/null > +++ > b/target/linux/ipq806x/patches-3.18/711-ARM-qcom-add-TP-Link-Archer-C2600-device-tree.patch > @@ -0,0 +1,300 @@ > +diff -urN a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile > +--- a/arch/arm/boot/dts/Makefile 2015-11-25 22:51:15.148899604 +0100 > ++++ b/arch/arm/boot/dts/Makefile 2015-12-06 14:33:31.092396982 +0100 > +@@ -362,6 +362,7 @@ > + qcom-ipq8064-ap148.dtb \ > + qcom-ipq8064-db149.dtb \ > + qcom-ipq8064-r7500.dtb \ > ++ qcom-ipq8064-c2600.dtb \ alphabetical ordering please > + qcom-msm8660-surf.dtb \ > + qcom-msm8960-cdp.dtb \ > + qcom-msm8974-sony-xperia-honami.dtb > +diff -urN a/arch/arm/boot/dts/qcom-ipq8064-c2600.dts > b/arch/arm/boot/dts/qcom-ipq8064-c2600.dts > +--- a/arch/arm/boot/dts/qcom-ipq8064-c2600.dts 1970-01-01 > 01:00:00.000000000 +0100 > ++++ b/arch/arm/boot/dts/qcom-ipq8064-c2600.dts 2015-12-06 > 14:20:05.152365670 +0100 > +@@ -0,0 +1,285 @@ > ++#include "qcom-ipq8064-v1.0.dtsi" > ++#include <dt-bindings/input/input.h> > ++ > ++/ { > ++ model = "TP-Link Archer C2600"; > ++ compatible = "tplink,c2600", "qcom,ipq8064"; > ++ > ++ memory@0 { > ++ reg = <0x42000000 0x1e000000>; > ++ device_type = "memory"; > ++ }; > ++ > ++ reserved-memory { > ++ #address-cells = <1>; > ++ #size-cells = <1>; > ++ ranges; > ++ rsvd@41200000 { > ++ reg = <0x41200000 0x300000>; > ++ no-map; > ++ }; > ++ }; > ++ > ++ aliases { > ++ serial0 = &uart4; > ++ mdio-gpio0 = &mdio0; > ++ }; > ++ > ++ chosen { > ++ linux,stdout-path = "serial0:115200n8"; > ++ }; > ++ > ++ soc { > ++ pinmux@800000 { > ++ i2c4_pins: i2c4_pinmux { > ++ pins = "gpio12", "gpio13"; > ++ function = "gsbi4"; > ++ bias-disable; > ++ }; > ++ > ++ spi_pins: spi_pins { > ++ mux { > ++ pins = "gpio18", "gpio19", "gpio21"; > ++ function = "gsbi5"; > ++ drive-strength = <10>; > ++ bias-none; > ++ }; > ++ }; > ++ > ++ nand_pins: nand_pins { > ++ mux { > ++ pins = "gpio34", "gpio35", "gpio36", > ++ "gpio37", "gpio38", "gpio39", > ++ "gpio40", "gpio41", "gpio42", > ++ "gpio43", "gpio44", "gpio45", > ++ "gpio46", "gpio47"; > ++ function = "nand"; > ++ drive-strength = <10>; > ++ bias-disable; > ++ }; > ++ > ++ pullups { > ++ pins = "gpio39"; > ++ bias-pull-up; > ++ }; > ++ > ++ hold { > ++ pins = "gpio40", "gpio41", "gpio42", > ++ "gpio43", "gpio44", "gpio45", > ++ "gpio46", "gpio47"; > ++ bias-bus-hold; > ++ }; > ++ }; > ++ > ++ mdio0_pins: mdio0_pins { > ++ mux { > ++ pins = "gpio0", "gpio1"; > ++ function = "gpio"; > ++ drive-strength = <8>; > ++ bias-disable; > ++ }; > ++ }; > ++ > ++ rgmii2_pins: rgmii2_pins { > ++ mux { > ++ pins = "gpio27", "gpio28", "gpio29", > "gpio30", "gpio31", "gpio32", > ++ "gpio51", "gpio52", "gpio59", > "gpio60", "gpio61", "gpio62" ; > ++ function = "rgmii2"; > ++ drive-strength = <8>; > ++ bias-disable; > ++ }; > ++ }; > ++ }; > ++ > ++ gsbi@16300000 { > ++ qcom,mode = <GSBI_PROT_I2C_UART>; > ++ status = "ok"; > ++ serial@16340000 { > ++ status = "ok"; > ++ }; > ++ /* > ++ * The i2c device on gsbi4 should not be enabled. > ++ * On ipq806x designs gsbi4 i2c is meant for exclusive > ++ * RPM usage. Turning this on in kernel manifests as > ++ * i2c failure for the RPM. > ++ */ > ++ }; > ++ > ++ gsbi5: gsbi@1a200000 { > ++ qcom,mode = <GSBI_PROT_SPI>; > ++ status = "ok"; > ++ > ++ spi4: spi@1a280000 { > ++ status = "ok"; > ++ spi-max-frequency = <50000000>; > ++ > ++ pinctrl-0 = <&spi_pins>; > ++ pinctrl-names = "default"; > ++ > ++ cs-gpios = <&qcom_pinmux 20 0>; > ++ > ++ flash: m25p80@0 { > ++ compatible = "s25fl256s1"; > ++ #address-cells = <1>; > ++ #size-cells = <1>; > ++ spi-max-frequency = <50000000>; > ++ reg = <0>; > ++ > ++ linux,part-probe = "qcom-smem"; > ++ }; > ++ }; > ++ }; > ++ > ++ phy@100f8800 { /* USB3 port 1 HS phy */ > ++ status = "ok"; > ++ }; > ++ > ++ phy@100f8830 { /* USB3 port 1 SS phy */ > ++ status = "ok"; > ++ }; > ++ > ++ phy@110f8800 { /* USB3 port 0 HS phy */ > ++ status = "ok"; > ++ }; > ++ > ++ phy@110f8830 { /* USB3 port 0 SS phy */ > ++ status = "ok"; > ++ }; > ++ > ++ usb30@0 { > ++ status = "ok"; > ++ }; > ++ > ++ usb30@1 { > ++ status = "ok"; > ++ }; > ++ > ++ pcie0: pci@1b500000 { > ++ status = "ok"; > ++ phy-tx0-term-offset = <7>; > ++ }; > ++ > ++ pcie1: pci@1b700000 { > ++ status = "ok"; > ++ phy-tx0-term-offset = <7>; > ++ }; > ++ > ++ mdio0: mdio { > ++ compatible = "virtual,mdio-gpio"; > ++ #address-cells = <1>; > ++ #size-cells = <0>; > ++ gpios = <&qcom_pinmux 1 0 &qcom_pinmux 0 0>; > ++ pinctrl-0 = <&mdio0_pins>; > ++ pinctrl-names = "default"; > ++ > ++ phy0: ethernet-phy@0 { > ++ device_type = "ethernet-phy"; > ++ reg = <0>; > ++ qca,ar8327-initvals = < > ++ 0x00004 0x7600000 /* PAD0_MODE */ > ++ 0x00008 0x1000000 /* PAD5_MODE */ > ++ 0x0000c 0x80 /* PAD6_MODE */ > ++ 0x000e4 0xaa545 /* MAC_POWER_SEL */ > ++ 0x000e0 0xc74164de /* SGMII_CTRL */ > ++ 0x0007c 0x4e /* PORT0_STATUS */ > ++ 0x00094 0x4e /* PORT6_STATUS */ > ++ >; > ++ }; > ++ > ++ phy4: ethernet-phy@4 { > ++ device_type = "ethernet-phy"; > ++ reg = <4>; > ++ }; > ++ }; > ++ > ++ gmac1: ethernet@37200000 { > ++ status = "ok"; > ++ phy-mode = "rgmii"; > ++ qcom,id = <1>; > ++ > ++ pinctrl-0 = <&rgmii2_pins>; > ++ pinctrl-names = "default"; > ++ > ++ fixed-link { > ++ speed = <1000>; > ++ full-duplex; > ++ }; > ++ }; > ++ > ++ gmac2: ethernet@37400000 { > ++ status = "ok"; > ++ phy-mode = "sgmii"; > ++ qcom,id = <2>; > ++ > ++ fixed-link { > ++ speed = <1000>; > ++ full-duplex; > ++ }; > ++ }; > ++ }; > ++ > ++ gpio-keys { > ++ compatible = "gpio-keys"; > ++ > ++ wifi { > ++ label = "wifi"; > ++ gpios = <&qcom_pinmux 49 1>; > ++ linux,code = <KEY_WLAN>; > ++ }; > ++ > ++ reset { > ++ label = "reset"; > ++ gpios = <&qcom_pinmux 64 1>; > ++ linux,code = <KEY_RESTART>; > ++ }; > ++ > ++ wps { > ++ label = "wps"; > ++ gpios = <&qcom_pinmux 65 1>; > ++ linux,code = <KEY_WPS_BUTTON>; > ++ }; > ++ ledgeneral { > ++ label = "ledgeneral"; > ++ gpios = <&qcom_pinmux 16 1>; > ++ linux,code = <KEY_DOLLAR>; > ++ }; > ++ }; > ++ > ++ gpio-leds { > ++ compatible = "gpio-leds"; > ++ > ++ lan { > ++ label = "lan:blue"; > ++ gpios = <&qcom_pinmux 6 0>; > ++ }; > ++ usb4 { > ++ label = "usb_4:blue"; > ++ gpios = <&qcom_pinmux 7 0>; > ++ }; > ++ usb2 { > ++ label = "usb_2:blue"; > ++ gpios = <&qcom_pinmux 8 0>; > ++ }; > ++ wps { > ++ label = "wps:blue"; > ++ gpios = <&qcom_pinmux 9 0>; > ++ }; > ++ wan_blue { > ++ label = "wan:blue"; > ++ gpios = <&qcom_pinmux 33 1>; > ++ }; > ++ status { > ++ label = "status:blue"; > ++ gpios = <&qcom_pinmux 53 0>; > ++ default-state = "on"; > ++ }; > ++ ledgnr { > ++ label = "ledgnr:blue"; > ++ gpios = <&qcom_pinmux 66 0>; > ++ }; > ++ }; > ++}; > ++ > ++&adm_dma { > ++ status = "ok"; > ++}; > diff --git > a/target/linux/ipq806x/patches-4.1/711-ARM-qcom-add-TP-Link-Archer-C2600-device-tree.patch > > b/target/linux/ipq806x/patches-4.1/711-ARM-qcom-add-TP-Link-Archer-C2600-device-tree.patch > new file mode 100644 > index 0000000..ada5254 > --- /dev/null > +++ > b/target/linux/ipq806x/patches-4.1/711-ARM-qcom-add-TP-Link-Archer-C2600-device-tree.patch > @@ -0,0 +1,300 @@ > +diff -urN a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile > +--- a/arch/arm/boot/dts/Makefile 2015-11-25 22:51:15.148899604 +0100 > ++++ b/arch/arm/boot/dts/Makefile 2015-12-06 14:33:31.092396982 +0100 > +@@ -453,6 +453,7 @@ > + qcom-ipq8064-ap148.dtb \ > + qcom-ipq8064-db149.dtb \ > + qcom-ipq8064-r7500.dtb \ > ++ qcom-ipq8064-c2600.dtb \ > + qcom-msm8660-surf.dtb \ > + qcom-msm8960-cdp.dtb \ > + qcom-msm8974-sony-xperia-honami.dtb > +diff -urN a/arch/arm/boot/dts/qcom-ipq8064-c2600.dts > b/arch/arm/boot/dts/qcom-ipq8064-c2600.dts > +--- a/arch/arm/boot/dts/qcom-ipq8064-c2600.dts 1970-01-01 > 01:00:00.000000000 +0100 > ++++ b/arch/arm/boot/dts/qcom-ipq8064-c2600.dts 2015-12-06 > 14:20:05.152365670 +0100 > +@@ -0,0 +1,285 @@ > ++#include "qcom-ipq8064-v1.0.dtsi" > ++#include <dt-bindings/input/input.h> > ++ > ++/ { > ++ model = "TP-Link Archer C2600"; > ++ compatible = "tplink,c2600", "qcom,ipq8064"; > ++ > ++ memory@0 { > ++ reg = <0x42000000 0x1e000000>; > ++ device_type = "memory"; > ++ }; > ++ > ++ reserved-memory { > ++ #address-cells = <1>; > ++ #size-cells = <1>; > ++ ranges; > ++ rsvd@41200000 { > ++ reg = <0x41200000 0x300000>; > ++ no-map; > ++ }; > ++ }; > ++ > ++ aliases { > ++ serial0 = &uart4; > ++ mdio-gpio0 = &mdio0; > ++ }; > ++ > ++ chosen { > ++ linux,stdout-path = "serial0:115200n8"; > ++ }; > ++ > ++ soc { > ++ pinmux@800000 { > ++ i2c4_pins: i2c4_pinmux { > ++ pins = "gpio12", "gpio13"; > ++ function = "gsbi4"; > ++ bias-disable; > ++ }; > ++ > ++ spi_pins: spi_pins { > ++ mux { > ++ pins = "gpio18", "gpio19", "gpio21"; > ++ function = "gsbi5"; > ++ drive-strength = <10>; > ++ bias-none; > ++ }; > ++ }; > ++ > ++ nand_pins: nand_pins { > ++ mux { > ++ pins = "gpio34", "gpio35", "gpio36", > ++ "gpio37", "gpio38", "gpio39", > ++ "gpio40", "gpio41", "gpio42", > ++ "gpio43", "gpio44", "gpio45", > ++ "gpio46", "gpio47"; > ++ function = "nand"; > ++ drive-strength = <10>; > ++ bias-disable; > ++ }; > ++ > ++ pullups { > ++ pins = "gpio39"; > ++ bias-pull-up; > ++ }; > ++ > ++ hold { > ++ pins = "gpio40", "gpio41", "gpio42", > ++ "gpio43", "gpio44", "gpio45", > ++ "gpio46", "gpio47"; > ++ bias-bus-hold; > ++ }; > ++ }; > ++ > ++ mdio0_pins: mdio0_pins { > ++ mux { > ++ pins = "gpio0", "gpio1"; > ++ function = "gpio"; > ++ drive-strength = <8>; > ++ bias-disable; > ++ }; > ++ }; > ++ > ++ rgmii2_pins: rgmii2_pins { > ++ mux { > ++ pins = "gpio27", "gpio28", "gpio29", > "gpio30", "gpio31", "gpio32", > ++ "gpio51", "gpio52", "gpio59", > "gpio60", "gpio61", "gpio62" ; > ++ function = "rgmii2"; > ++ drive-strength = <8>; > ++ bias-disable; > ++ }; > ++ }; > ++ }; > ++ > ++ gsbi@16300000 { > ++ qcom,mode = <GSBI_PROT_I2C_UART>; > ++ status = "ok"; > ++ serial@16340000 { > ++ status = "ok"; > ++ }; > ++ /* > ++ * The i2c device on gsbi4 should not be enabled. > ++ * On ipq806x designs gsbi4 i2c is meant for exclusive > ++ * RPM usage. Turning this on in kernel manifests as > ++ * i2c failure for the RPM. > ++ */ > ++ }; > ++ > ++ gsbi5: gsbi@1a200000 { > ++ qcom,mode = <GSBI_PROT_SPI>; > ++ status = "ok"; > ++ > ++ spi4: spi@1a280000 { > ++ status = "ok"; > ++ spi-max-frequency = <50000000>; > ++ > ++ pinctrl-0 = <&spi_pins>; > ++ pinctrl-names = "default"; > ++ > ++ cs-gpios = <&qcom_pinmux 20 0>; > ++ > ++ flash: m25p80@0 { > ++ compatible = "s25fl256s1"; > ++ #address-cells = <1>; > ++ #size-cells = <1>; > ++ spi-max-frequency = <50000000>; > ++ reg = <0>; > ++ > ++ linux,part-probe = "qcom-smem"; > ++ }; > ++ }; > ++ }; > ++ > ++ phy@100f8800 { /* USB3 port 1 HS phy */ > ++ status = "ok"; > ++ }; > ++ > ++ phy@100f8830 { /* USB3 port 1 SS phy */ > ++ status = "ok"; > ++ }; > ++ > ++ phy@110f8800 { /* USB3 port 0 HS phy */ > ++ status = "ok"; > ++ }; > ++ > ++ phy@110f8830 { /* USB3 port 0 SS phy */ > ++ status = "ok"; > ++ }; > ++ > ++ usb30@0 { > ++ status = "ok"; > ++ }; > ++ > ++ usb30@1 { > ++ status = "ok"; > ++ }; > ++ > ++ pcie0: pci@1b500000 { > ++ status = "ok"; > ++ phy-tx0-term-offset = <7>; > ++ }; > ++ > ++ pcie1: pci@1b700000 { > ++ status = "ok"; > ++ phy-tx0-term-offset = <7>; > ++ }; > ++ > ++ mdio0: mdio { > ++ compatible = "virtual,mdio-gpio"; > ++ #address-cells = <1>; > ++ #size-cells = <0>; > ++ gpios = <&qcom_pinmux 1 0 &qcom_pinmux 0 0>; > ++ pinctrl-0 = <&mdio0_pins>; > ++ pinctrl-names = "default"; > ++ > ++ phy0: ethernet-phy@0 { > ++ device_type = "ethernet-phy"; > ++ reg = <0>; > ++ qca,ar8327-initvals = < > ++ 0x00004 0x7600000 /* PAD0_MODE */ > ++ 0x00008 0x1000000 /* PAD5_MODE */ > ++ 0x0000c 0x80 /* PAD6_MODE */ > ++ 0x000e4 0xaa545 /* MAC_POWER_SEL */ > ++ 0x000e0 0xc74164de /* SGMII_CTRL */ > ++ 0x0007c 0x4e /* PORT0_STATUS */ > ++ 0x00094 0x4e /* PORT6_STATUS */ > ++ >; > ++ }; > ++ > ++ phy4: ethernet-phy@4 { > ++ device_type = "ethernet-phy"; > ++ reg = <4>; > ++ }; > ++ }; > ++ > ++ gmac1: ethernet@37200000 { > ++ status = "ok"; > ++ phy-mode = "rgmii"; > ++ qcom,id = <1>; > ++ > ++ pinctrl-0 = <&rgmii2_pins>; > ++ pinctrl-names = "default"; > ++ > ++ fixed-link { > ++ speed = <1000>; > ++ full-duplex; > ++ }; > ++ }; > ++ > ++ gmac2: ethernet@37400000 { > ++ status = "ok"; > ++ phy-mode = "sgmii"; > ++ qcom,id = <2>; > ++ > ++ fixed-link { > ++ speed = <1000>; > ++ full-duplex; > ++ }; > ++ }; > ++ }; > ++ > ++ gpio-keys { > ++ compatible = "gpio-keys"; > ++ > ++ wifi { > ++ label = "wifi"; > ++ gpios = <&qcom_pinmux 49 1>; > ++ linux,code = <KEY_WLAN>; > ++ }; > ++ > ++ reset { > ++ label = "reset"; > ++ gpios = <&qcom_pinmux 64 1>; > ++ linux,code = <KEY_RESTART>; > ++ }; > ++ > ++ wps { > ++ label = "wps"; > ++ gpios = <&qcom_pinmux 65 1>; > ++ linux,code = <KEY_WPS_BUTTON>; > ++ }; > ++ ledgeneral { > ++ label = "ledgeneral"; > ++ gpios = <&qcom_pinmux 16 1>; > ++ linux,code = <KEY_DOLLAR>; > ++ }; > ++ }; > ++ > ++ gpio-leds { > ++ compatible = "gpio-leds"; > ++ > ++ lan { > ++ label = "lan:blue"; > ++ gpios = <&qcom_pinmux 6 0>; > ++ }; > ++ usb4 { > ++ label = "usb_4:blue"; > ++ gpios = <&qcom_pinmux 7 0>; > ++ }; > ++ usb2 { > ++ label = "usb_2:blue"; > ++ gpios = <&qcom_pinmux 8 0>; > ++ }; > ++ wps { > ++ label = "wps:blue"; > ++ gpios = <&qcom_pinmux 9 0>; > ++ }; > ++ wan_blue { > ++ label = "wan:blue"; > ++ gpios = <&qcom_pinmux 33 1>; > ++ }; > ++ status { > ++ label = "status:blue"; > ++ gpios = <&qcom_pinmux 53 0>; > ++ default-state = "on"; > ++ }; > ++ ledgnr { > ++ label = "ledgnr:blue"; > ++ gpios = <&qcom_pinmux 66 0>; > ++ }; > ++ }; > ++}; > ++ > ++&adm_dma { > ++ status = "ok"; > ++}; > 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)) > _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel