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

Josh Bendavid Josh.Bendavid at cern.ch
Mon Dec 7 10:57:14 EST 2015


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 at openwrt.org> wrote:

> Hi,
>
> On Sun, Dec 6, 2015 at 3:20 PM, Josh Bendavid <Josh.Bendavid at cern.ch>
> wrote:
> > From: Josh Bendavid <joshbendavid at 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 at 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 at eth1" "5:wan" "0 at 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 at 0 {
> > ++ reg = <0x42000000 0x1e000000>;
> > ++ device_type = "memory";
> > ++ };
> > ++
> > ++ reserved-memory {
> > ++ #address-cells = <1>;
> > ++ #size-cells = <1>;
> > ++ ranges;
> > ++ rsvd at 41200000 {
> > ++ reg = <0x41200000 0x300000>;
> > ++ no-map;
> > ++ };
> > ++ };
> > ++
> > ++ aliases {
> > ++ serial0 = &uart4;
> > ++ mdio-gpio0 = &mdio0;
> > ++ };
> > ++
> > ++ chosen {
> > ++ linux,stdout-path = "serial0:115200n8";
> > ++ };
> > ++
> > ++ soc {
> > ++ pinmux at 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 at 16300000 {
> > ++ qcom,mode = <GSBI_PROT_I2C_UART>;
> > ++ status = "ok";
> > ++ serial at 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 at 1a200000 {
> > ++ qcom,mode = <GSBI_PROT_SPI>;
> > ++ status = "ok";
> > ++
> > ++ spi4: spi at 1a280000 {
> > ++ status = "ok";
> > ++ spi-max-frequency = <50000000>;
> > ++
> > ++ pinctrl-0 = <&spi_pins>;
> > ++ pinctrl-names = "default";
> > ++
> > ++ cs-gpios = <&qcom_pinmux 20 0>;
> > ++
> > ++ flash: m25p80 at 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 at 100f8800 { /* USB3 port 1 HS phy */
> > ++ status = "ok";
> > ++ };
> > ++
> > ++ phy at 100f8830 { /* USB3 port 1 SS phy */
> > ++ status = "ok";
> > ++ };
> > ++
> > ++ phy at 110f8800 { /* USB3 port 0 HS phy */
> > ++ status = "ok";
> > ++ };
> > ++
> > ++ phy at 110f8830 { /* USB3 port 0 SS phy */
> > ++ status = "ok";
> > ++ };
> > ++
> > ++ usb30 at 0 {
> > ++ status = "ok";
> > ++ };
> > ++
> > ++ usb30 at 1 {
> > ++ status = "ok";
> > ++ };
> > ++
> > ++ pcie0: pci at 1b500000 {
> > ++ status = "ok";
> > ++ phy-tx0-term-offset = <7>;
> > ++ };
> > ++
> > ++ pcie1: pci at 1b700000 {
> > ++ status = "ok";
> > ++ phy-tx0-term-offset = <7>;
> > ++ };
> > ++
> > ++ nand at 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 at 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 at 4 {
> > ++ device_type = "ethernet-phy";
> > ++ reg = <4>;
> > ++ };
> > ++ };
> > ++
> > ++ gmac1: ethernet at 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 at 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 at openwrt.org> wrote:
>
> Please don't top post or send new versions as replies to older version.
>
>
> Jonas
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.infradead.org/pipermail/openwrt-devel/attachments/20151207/998865fd/attachment.htm>
-------------- next part --------------
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list