diff mbox

[OpenWrt-Devel,ipq806x] Add initial support for TP-Link Archer C2600

Message ID CAD1MEwfxU+pVUBHxFdvMGuHyKnOXvZaPQWu2__FUd2VxBXoJvg@mail.gmail.com
State Changes Requested
Headers show

Commit Message

Josh Bendavid Dec. 6, 2015, 2:20 p.m. UTC
From: Josh Bendavid <joshbendavid@gmail.com>

Add initial support for Archer C2600 to Makefiles and profiles.  This is
sufficient to build a working factory image.  Sysupgrade image is not
implemented yet.  Currently wired network is working, but
LED's/buttons/wireless are not.  Updated to create a separate dts file for
c2600, which is currently identical to the ap148 aside that the
sata-related sections have been removed.

Signed-off-by: Josh Bendavid <joshbendavid@gmail.com>
---



On 5 December 2015 at 15:08, Jonas Gorski <jogo@openwrt.org> wrote:

> Hi,
>
> On Sat, Dec 5, 2015 at 5:13 AM, Josh Bendavid <Josh.Bendavid@cern.ch>
> wrote:
> > From: Josh Bendavid <joshbendavid@gmail.com>
> >
> > Add initial support for Archer C2600 to Makefiles and profiles.  This is
> > sufficient to build a working factory image.  Sysupgrade image is not
> > implemented yet.  Currently wired network is working, but
> > LED's/buttons/wireless are not.
> >
> > Signed-off-by: Josh Bendavid <joshbendavid@gmail.com>
> > ---
> >
> > diff --git a/include/image.mk b/include/image.mk
> > index fd5e3f4..9ad2d43 100644
> > --- a/include/image.mk
> > +++ b/include/image.mk
> > @@ -327,6 +327,16 @@ 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 \
> > + -o $@.new
> > + mv $@.new $@
> > +endef
> > +
> >  define Build/fit
> >   $(TOPDIR)/scripts/mkits.sh \
> >   -D $(DEVICE_NAME) -o $@.its -k $@ \
> > diff --git a/target/linux/ipq806x/image/Makefile
> > b/target/linux/ipq806x/image/Makefile
> > index 14cf442..8e6a174 100644
> > --- a/target/linux/ipq806x/image/Makefile
> > +++ b/target/linux/ipq806x/image/Makefile
> > @@ -85,6 +85,18 @@ 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
> > + IMAGE/factory.bin := tplink-safe
> > +endef
> > +DEVICE_VARS += TPLINK_BOARD_ID
> > +
> >  define Device/AP148
> >   $(call Device/FitImage)
> >   $(call Device/UbiFit)
> > @@ -103,6 +115,15 @@ define Device/AP148-legacy
> >   BOARD_NAME := ap148
> >  endef
> >
> > +define Device/C2600
> > + $(call Device/TpSafeImage)
> > + DEVICE_DTS := qcom-ipq8064-ap148
>
> The TP-Link doesn't have a eSATA port, so please create its own dts file
> for it.
>
>
> Jonas
>

Comments

Jonas Gorski Dec. 7, 2015, 3:46 p.m. UTC | #1
Hi,

On Sun, Dec 6, 2015 at 3:20 PM, Josh Bendavid <Josh.Bendavid@cern.ch> wrote:
> From: Josh Bendavid <joshbendavid@gmail.com>
>
> Add initial support for Archer C2600 to Makefiles and profiles.  This is
> sufficient to build a working factory image.  Sysupgrade image is not
> implemented yet.  Currently wired network is working, but
> LED's/buttons/wireless are not.  Updated to create a separate dts file for
> c2600, which is currently identical to the ap148 aside that the sata-related
> sections have been removed.
>
> Signed-off-by: Josh Bendavid <joshbendavid@gmail.com>
> ---
>
> diff --git a/include/image.mk b/include/image.mk
> index fd5e3f4..fab3c8a 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 \

This patch is whitespace broken, please use an email client that
doesn't convert tabs to spaces or git-email.

> + -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/02_network
> b/target/linux/ipq806x/base-files/etc/board.d/02_network
> index b054230..e000e3d 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)

Please use alphabetical ordering

>   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/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"

same.

> + ;;
>   esac
>
>   [ -z "$name" ] && name="unknown"
> diff --git a/target/linux/ipq806x/image/Makefile
> b/target/linux/ipq806x/image/Makefile
> index 14cf442..0445914 100644
> --- a/target/linux/ipq806x/image/Makefile
> +++ b/target/linux/ipq806x/image/Makefile
> @@ -85,6 +85,18 @@ 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
> + IMAGE/factory.bin := tplink-safe
> +endef
> +DEVICE_VARS += TPLINK_BOARD_ID
> +
>  define Device/AP148
>   $(call Device/FitImage)
>   $(call Device/UbiFit)
> @@ -103,6 +115,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 := ap148

This must be the boardname you assign in board_detect.

> + TPLINK_BOARD_ID := C2600
> +endef
> +
>  define Device/DB149
>   $(call Device/FitImage)
>   DEVICE_DTS := qcom-ipq8064-db149
> @@ -121,6 +142,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
> index e69de29..e750b98 100644
> ---
> 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
> @@ -0,0 +1,246 @@
> +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 \
> + 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,231 @@
> ++#include "qcom-ipq8064-v1.0.dtsi"
> ++
> ++/ {
> ++ 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>;

So it has both nor and nand flash?

> ++
> ++ 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>;
> ++ };
> ++
> ++ nand@1ac00000 {
> ++ status = "ok";
> ++
> ++ pinctrl-0 = <&nand_pins>;
> ++ pinctrl-names = "default";
> ++
> ++ nand-ecc-strength = <4>;
> ++ nand-bus-width = <8>;
> ++
> ++ linux,part-probe = "qcom-smem";
> ++ };
> ++
> ++ 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";
> ++ phy-handle = <&phy4>;

So your wan port works fine with a 10 or 100 Mbit connection?

> ++ qcom,id = <1>;
> ++
> ++ pinctrl-0 = <&rgmii2_pins>;
> ++ pinctrl-names = "default";
> ++ };
> ++
> ++ gmac2: ethernet@37400000 {
> ++ status = "ok";
> ++ phy-mode = "sgmii";
> ++ qcom,id = <2>;
> ++
> ++ fixed-link {
> ++ speed = <1000>;
> ++ full-duplex;
> ++ };
> ++ };
> ++ };
> ++};
> ++
> ++&adm_dma {
> ++ status = "ok";
> ++};

(snip)

>
>
> On 5 December 2015 at 15:08, Jonas Gorski <jogo@openwrt.org> wrote:

Please don't top post or send new versions as replies to older version.


Jonas
Josh Bendavid Dec. 7, 2015, 3:57 p.m. UTC | #2
Ok thanks,
Will clean up the white space + board name and resubmit (maybe also with
the additional changes for the wireless calibration data at this point)

For the WAN link, I did not test it myself yet with 10 or 100mbps, but the
situation should be the same as described here
https://dev.openwrt.org/changeset/47695/trunk/target/linux/ipq806x

ie the wan link from the cpu is actually to the 1gbps internal port on the
switch chip, regardless of what is then connected to the wan port on the
switch.

On 7 December 2015 at 16:46, Jonas Gorski <jogo@openwrt.org> wrote:

> Hi,
>
> On Sun, Dec 6, 2015 at 3:20 PM, Josh Bendavid <Josh.Bendavid@cern.ch>
> wrote:
> > From: Josh Bendavid <joshbendavid@gmail.com>
> >
> > Add initial support for Archer C2600 to Makefiles and profiles.  This is
> > sufficient to build a working factory image.  Sysupgrade image is not
> > implemented yet.  Currently wired network is working, but
> > LED's/buttons/wireless are not.  Updated to create a separate dts file
> for
> > c2600, which is currently identical to the ap148 aside that the
> sata-related
> > sections have been removed.
> >
> > Signed-off-by: Josh Bendavid <joshbendavid@gmail.com>
> > ---
> >
> > diff --git a/include/image.mk b/include/image.mk
> > index fd5e3f4..fab3c8a 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 \
>
> This patch is whitespace broken, please use an email client that
> doesn't convert tabs to spaces or git-email.
>
> > + -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/02_network
> > b/target/linux/ipq806x/base-files/etc/board.d/02_network
> > index b054230..e000e3d 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)
>
> Please use alphabetical ordering
>
> >   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/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"
>
> same.
>
> > + ;;
> >   esac
> >
> >   [ -z "$name" ] && name="unknown"
> > diff --git a/target/linux/ipq806x/image/Makefile
> > b/target/linux/ipq806x/image/Makefile
> > index 14cf442..0445914 100644
> > --- a/target/linux/ipq806x/image/Makefile
> > +++ b/target/linux/ipq806x/image/Makefile
> > @@ -85,6 +85,18 @@ 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
> > + IMAGE/factory.bin := tplink-safe
> > +endef
> > +DEVICE_VARS += TPLINK_BOARD_ID
> > +
> >  define Device/AP148
> >   $(call Device/FitImage)
> >   $(call Device/UbiFit)
> > @@ -103,6 +115,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 := ap148
>
> This must be the boardname you assign in board_detect.
>
> > + TPLINK_BOARD_ID := C2600
> > +endef
> > +
> >  define Device/DB149
> >   $(call Device/FitImage)
> >   DEVICE_DTS := qcom-ipq8064-db149
> > @@ -121,6 +142,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
> > index e69de29..e750b98 100644
> > ---
> >
> 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
> > @@ -0,0 +1,246 @@
> > +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 \
> > + 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,231 @@
> > ++#include "qcom-ipq8064-v1.0.dtsi"
> > ++
> > ++/ {
> > ++ 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>;
>
> So it has both nor and nand flash?
>
> > ++
> > ++ 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>;
> > ++ };
> > ++
> > ++ nand@1ac00000 {
> > ++ status = "ok";
> > ++
> > ++ pinctrl-0 = <&nand_pins>;
> > ++ pinctrl-names = "default";
> > ++
> > ++ nand-ecc-strength = <4>;
> > ++ nand-bus-width = <8>;
> > ++
> > ++ linux,part-probe = "qcom-smem";
> > ++ };
> > ++
> > ++ 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";
> > ++ phy-handle = <&phy4>;
>
> So your wan port works fine with a 10 or 100 Mbit connection?
>
> > ++ qcom,id = <1>;
> > ++
> > ++ pinctrl-0 = <&rgmii2_pins>;
> > ++ pinctrl-names = "default";
> > ++ };
> > ++
> > ++ gmac2: ethernet@37400000 {
> > ++ status = "ok";
> > ++ phy-mode = "sgmii";
> > ++ qcom,id = <2>;
> > ++
> > ++ fixed-link {
> > ++ speed = <1000>;
> > ++ full-duplex;
> > ++ };
> > ++ };
> > ++ };
> > ++};
> > ++
> > ++&adm_dma {
> > ++ status = "ok";
> > ++};
>
> (snip)
>
> >
> >
> > On 5 December 2015 at 15:08, Jonas Gorski <jogo@openwrt.org> wrote:
>
> Please don't top post or send new versions as replies to older version.
>
>
> Jonas
>
Josh Bendavid Dec. 7, 2015, 3:58 p.m. UTC | #3
(the vlan configuration inherited from the AP148 is working, which implies
that the connections and port mapping are the same)

On 7 December 2015 at 16:57, Josh Bendavid <Josh.Bendavid@cern.ch> wrote:

> Ok thanks,
> Will clean up the white space + board name and resubmit (maybe also with
> the additional changes for the wireless calibration data at this point)
>
> For the WAN link, I did not test it myself yet with 10 or 100mbps, but the
> situation should be the same as described here
> https://dev.openwrt.org/changeset/47695/trunk/target/linux/ipq806x
>
> ie the wan link from the cpu is actually to the 1gbps internal port on the
> switch chip, regardless of what is then connected to the wan port on the
> switch.
>
> On 7 December 2015 at 16:46, Jonas Gorski <jogo@openwrt.org> wrote:
>
>> Hi,
>>
>> On Sun, Dec 6, 2015 at 3:20 PM, Josh Bendavid <Josh.Bendavid@cern.ch>
>> wrote:
>> > From: Josh Bendavid <joshbendavid@gmail.com>
>> >
>> > Add initial support for Archer C2600 to Makefiles and profiles.  This is
>> > sufficient to build a working factory image.  Sysupgrade image is not
>> > implemented yet.  Currently wired network is working, but
>> > LED's/buttons/wireless are not.  Updated to create a separate dts file
>> for
>> > c2600, which is currently identical to the ap148 aside that the
>> sata-related
>> > sections have been removed.
>> >
>> > Signed-off-by: Josh Bendavid <joshbendavid@gmail.com>
>> > ---
>> >
>> > diff --git a/include/image.mk b/include/image.mk
>> > index fd5e3f4..fab3c8a 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 \
>>
>> This patch is whitespace broken, please use an email client that
>> doesn't convert tabs to spaces or git-email.
>>
>> > + -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/02_network
>> > b/target/linux/ipq806x/base-files/etc/board.d/02_network
>> > index b054230..e000e3d 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)
>>
>> Please use alphabetical ordering
>>
>> >   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/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"
>>
>> same.
>>
>> > + ;;
>> >   esac
>> >
>> >   [ -z "$name" ] && name="unknown"
>> > diff --git a/target/linux/ipq806x/image/Makefile
>> > b/target/linux/ipq806x/image/Makefile
>> > index 14cf442..0445914 100644
>> > --- a/target/linux/ipq806x/image/Makefile
>> > +++ b/target/linux/ipq806x/image/Makefile
>> > @@ -85,6 +85,18 @@ 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
>> > + IMAGE/factory.bin := tplink-safe
>> > +endef
>> > +DEVICE_VARS += TPLINK_BOARD_ID
>> > +
>> >  define Device/AP148
>> >   $(call Device/FitImage)
>> >   $(call Device/UbiFit)
>> > @@ -103,6 +115,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 := ap148
>>
>> This must be the boardname you assign in board_detect.
>>
>> > + TPLINK_BOARD_ID := C2600
>> > +endef
>> > +
>> >  define Device/DB149
>> >   $(call Device/FitImage)
>> >   DEVICE_DTS := qcom-ipq8064-db149
>> > @@ -121,6 +142,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
>> > index e69de29..e750b98 100644
>> > ---
>> >
>> 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
>> > @@ -0,0 +1,246 @@
>> > +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 \
>> > + 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,231 @@
>> > ++#include "qcom-ipq8064-v1.0.dtsi"
>> > ++
>> > ++/ {
>> > ++ 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>;
>>
>> So it has both nor and nand flash?
>>
>> > ++
>> > ++ 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>;
>> > ++ };
>> > ++
>> > ++ nand@1ac00000 {
>> > ++ status = "ok";
>> > ++
>> > ++ pinctrl-0 = <&nand_pins>;
>> > ++ pinctrl-names = "default";
>> > ++
>> > ++ nand-ecc-strength = <4>;
>> > ++ nand-bus-width = <8>;
>> > ++
>> > ++ linux,part-probe = "qcom-smem";
>> > ++ };
>> > ++
>> > ++ 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";
>> > ++ phy-handle = <&phy4>;
>>
>> So your wan port works fine with a 10 or 100 Mbit connection?
>>
>> > ++ qcom,id = <1>;
>> > ++
>> > ++ pinctrl-0 = <&rgmii2_pins>;
>> > ++ pinctrl-names = "default";
>> > ++ };
>> > ++
>> > ++ gmac2: ethernet@37400000 {
>> > ++ status = "ok";
>> > ++ phy-mode = "sgmii";
>> > ++ qcom,id = <2>;
>> > ++
>> > ++ fixed-link {
>> > ++ speed = <1000>;
>> > ++ full-duplex;
>> > ++ };
>> > ++ };
>> > ++ };
>> > ++};
>> > ++
>> > ++&adm_dma {
>> > ++ status = "ok";
>> > ++};
>>
>> (snip)
>>
>> >
>> >
>> > On 5 December 2015 at 15:08, Jonas Gorski <jogo@openwrt.org> wrote:
>>
>> Please don't top post or send new versions as replies to older version.
>>
>>
>> Jonas
>>
>
>
Josh Bendavid Dec. 7, 2015, 4:05 p.m. UTC | #4
(Sorry about the top posting)

For the flash, the stock firmware, and the factory images built with these
patches are using only the NOR flash as far as I know.

I am not 100% sure whether the NAND is physically there or not (what would
be the easiest way to check?)
Jonas Gorski Dec. 7, 2015, 4:44 p.m. UTC | #5
Hi,

please try to keep the number of replies low, ideally one.

On Mon, Dec 7, 2015 at 5:05 PM, Josh Bendavid <Josh.Bendavid@cern.ch> wrote:
> (Sorry about the top posting)
>

and keep some context to what you are replying to.

> For the flash, the stock firmware, and the factory images built with these
> patches are using only the NOR flash as far as I know.
>
> I am not 100% sure whether the NAND is physically there or not (what would
> be the easiest way to check?)

check for lines like this:

[    0.965016] nand: device found, Manufacturer ID: 0x2c, Chip ID: 0xaa
[    0.966215] nand: Micron MT29F2G08ABBEAH4
[    0.972816] nand: 256MiB, SLC, page size: 2048, OOB size: 64

On Mon, Dec 7, 2015 at 4:57 PM, Josh Bendavid <Josh.Bendavid@cern.ch> wrote:
> For the WAN link, I did not test it myself yet with 10 or 100mbps, but the
> situation should be the same as described here
> https://dev.openwrt.org/changeset/47695/trunk/target/linux/ipq806x

That was intended as a hint that your dts file did not include the fix
mentioned in the commit, in case it is wired up the same.


Jonas
diff mbox

Patch

diff --git a/include/image.mk b/include/image.mk
index fd5e3f4..fab3c8a 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/02_network
b/target/linux/ipq806x/base-files/etc/board.d/02_network
index b054230..e000e3d 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/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/image/Makefile
b/target/linux/ipq806x/image/Makefile
index 14cf442..0445914 100644
--- a/target/linux/ipq806x/image/Makefile
+++ b/target/linux/ipq806x/image/Makefile
@@ -85,6 +85,18 @@  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
+ IMAGE/factory.bin := tplink-safe
+endef
+DEVICE_VARS += TPLINK_BOARD_ID
+
 define Device/AP148
  $(call Device/FitImage)
  $(call Device/UbiFit)
@@ -103,6 +115,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 := ap148
+ TPLINK_BOARD_ID := C2600
+endef
+
 define Device/DB149
  $(call Device/FitImage)
  DEVICE_DTS := qcom-ipq8064-db149
@@ -121,6 +142,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
index e69de29..e750b98 100644
---
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
@@ -0,0 +1,246 @@ 
+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 \
+ 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,231 @@
++#include "qcom-ipq8064-v1.0.dtsi"
++
++/ {
++ 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>;
++ };
++
++ nand@1ac00000 {
++ status = "ok";
++
++ pinctrl-0 = <&nand_pins>;
++ pinctrl-names = "default";
++
++ nand-ecc-strength = <4>;
++ nand-bus-width = <8>;
++
++ linux,part-probe = "qcom-smem";
++ };
++
++ 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";
++ phy-handle = <&phy4>;
++ qcom,id = <1>;
++
++ pinctrl-0 = <&rgmii2_pins>;
++ pinctrl-names = "default";
++ };
++
++ gmac2: ethernet@37400000 {
++ status = "ok";
++ phy-mode = "sgmii";
++ qcom,id = <2>;
++
++ fixed-link {
++ speed = <1000>;
++ full-duplex;
++ };
++ };
++ };
++};
++
++&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
index e69de29..cd4341e 100644
---
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
@@ -0,0 +1,246 @@ 
+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,231 @@
++#include "qcom-ipq8064-v1.0.dtsi"
++
++/ {
++ 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>;
++ };
++
++ nand@1ac00000 {
++ status = "ok";
++
++ pinctrl-0 = <&nand_pins>;
++ pinctrl-names = "default";
++
++ nand-ecc-strength = <4>;
++ nand-bus-width = <8>;
++
++ linux,part-probe = "qcom-smem";
++ };
++
++ 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";
++ phy-handle = <&phy4>;
++ qcom,id = <1>;
++
++ pinctrl-0 = <&rgmii2_pins>;
++ pinctrl-names = "default";
++ };
++
++ gmac2: ethernet@37400000 {
++ status = "ok";
++ phy-mode = "sgmii";
++ qcom,id = <2>;
++
++ fixed-link {
++ speed = <1000>;
++ full-duplex;
++ };
++ };
++ };
++};
++
++&adm_dma {
++ status = "ok";
++};
diff --git a/target/linux/ipq806x/profiles/tplink.mk
b/target/linux/ipq806x/profiles/tplink.mk
index e69de29..d3f5a6c 100644
--- a/target/linux/ipq806x/profiles/tplink.mk
+++ 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))