From 13b8b8c2e7f3f0acf8d23a28a011a3ea261757f5 Mon Sep 17 00:00:00 2001 From: Hauke Mehrtens Date: Mon, 18 Jan 2016 20:40:03 +0000 Subject: [PATCH] lantiq: add support for TP-Link VR200v This adds basic support for TP-Link VR200v. Currently the following parts are not working: FXO, Voice, DECT, WIFI (both) Signed-off-by: Hauke Mehrtens SVN-Revision: 48328 --- .../lantiq/base-files/etc/board.d/02_network | 7 + target/linux/lantiq/dts/VR200v.dts | 280 ++++++++++++++++++ target/linux/lantiq/image/Makefile | 3 + target/linux/lantiq/xrx200/profiles/tplink.mk | 7 + tools/firmware-utils/src/mktplinkfw2.c | 12 + 5 files changed, 309 insertions(+) create mode 100644 target/linux/lantiq/dts/VR200v.dts diff --git a/target/linux/lantiq/base-files/etc/board.d/02_network b/target/linux/lantiq/base-files/etc/board.d/02_network index 89faeaaa34..8ed525915d 100755 --- a/target/linux/lantiq/base-files/etc/board.d/02_network +++ b/target/linux/lantiq/base-files/etc/board.d/02_network @@ -96,6 +96,13 @@ TDW8970|TDW8980) "0:lan:1" "2:lan:2" "4:lan:3" "5:lan:4" "6t@eth0" ;; +VR200v) + lan_mac=$(mtd_get_mac_binary romfile 61696) + wan_mac=$(macaddr_add "$lan_mac" 1) + ucidef_add_switch "switch0" \ + "0:lan:1" "2:lan:2" "4:lan:3" "5:lan:4" "6t@eth0" + ;; + ARV7519RW22) lan_mac=$(mtd_get_mac_binary boardconfig 22) wan_mac=$(macaddr_add "$lan_mac" 1) diff --git a/target/linux/lantiq/dts/VR200v.dts b/target/linux/lantiq/dts/VR200v.dts new file mode 100644 index 0000000000..9cf306cfa3 --- /dev/null +++ b/target/linux/lantiq/dts/VR200v.dts @@ -0,0 +1,280 @@ +/dts-v1/; + +/include/ "vr9.dtsi" + +/ { + model = "VR200v - TP-LINK Archer VR200v"; + + chosen { + bootargs = "console=ttyLTQ0,115200 init=/etc/preinit"; + + leds { + boot = &power; + failsafe = &power; + + dsl = &dsl; + internet = &internet; + usb = &usb; + usb2 = &usb; + }; + }; + + memory@0 { + reg = <0x0 0x7f00000>; + }; + + fpi@10000000 { + gpio: pinmux@E100B10 { + pinctrl-names = "default"; + pinctrl-0 = <&state_default>; + + state_default: pinmux { + mdio { + lantiq,groups = "mdio"; + lantiq,function = "mdio"; + }; + gphy-leds { + lantiq,groups = "gphy0 led1", "gphy1 led1"; + lantiq,function = "gphy"; + lantiq,pull = <2>; + lantiq,open-drain = <0>; + lantiq,output = <1>; + }; + phy-rst { + lantiq,pins = "io42"; + lantiq,pull = <0>; + lantiq,open-drain = <0>; + lantiq,output = <1>; + }; + pcie-rst { + lantiq,pins = "io38"; + lantiq,pull = <0>; + lantiq,output = <1>; + }; + }; + pins_spi_default: pins_spi_default { + spi_in { + lantiq,groups = "spi_di"; + lantiq,function = "spi"; + }; + spi_out { + lantiq,groups = "spi_do", "spi_clk", + "spi_cs4"; + lantiq,function = "spi"; + lantiq,output = <1>; + }; + }; + }; + + eth@E108000 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "lantiq,xrx200-net"; + reg = < 0xE108000 0x3000 /* switch */ + 0xE10B100 0x70 /* mdio */ + 0xE10B1D8 0x30 /* mii */ + 0xE10B308 0x30 /* pmac */ + >; + interrupt-parent = <&icu0>; + interrupts = <73 72>; + + lan: interface@0 { + compatible = "lantiq,xrx200-pdi"; + #address-cells = <1>; + #size-cells = <0>; + reg = <0>; + mtd-mac-address = <&romfile 0xf100>; + lantiq,switch; + + ethernet@0 { + compatible = "lantiq,xrx200-pdi-port"; + reg = <0>; + phy-mode = "rgmii"; + phy-handle = <&phy0>; + // gpios = <&gpio 42 1>; + }; + ethernet@5 { + compatible = "lantiq,xrx200-pdi-port"; + reg = <5>; + phy-mode = "rgmii"; + phy-handle = <&phy5>; + }; + ethernet@2 { + compatible = "lantiq,xrx200-pdi-port"; + reg = <2>; + phy-mode = "gmii"; + phy-handle = <&phy11>; + }; + ethernet@3 { + compatible = "lantiq,xrx200-pdi-port"; + reg = <4>; + phy-mode = "gmii"; + phy-handle = <&phy13>; + }; + }; + + mdio@0 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "lantiq,xrx200-mdio"; + phy0: ethernet-phy@0 { + reg = <0x0>; + compatible = "lantiq,phy11g", "ethernet-phy-ieee802.3-c22"; + }; + phy5: ethernet-phy@5 { + reg = <0x5>; + compatible = "lantiq,phy11g", "ethernet-phy-ieee802.3-c22"; + }; + phy11: ethernet-phy@11 { + reg = <0x11>; + compatible = "lantiq,phy11g", "ethernet-phy-ieee802.3-c22"; + }; + phy13: ethernet-phy@13 { + reg = <0x13>; + compatible = "lantiq,phy11g", "ethernet-phy-ieee802.3-c22"; + }; + }; + }; + + ifxhcd@E101000 { + status = "okay"; + gpios = <&gpio 33 0>; + lantiq,portmask = <0x3>; + }; + + ifxhcd@E106000 { + status = "okay"; + gpios = <&gpio 33 0>; + }; + }; + + gphy-xrx200 { + compatible = "lantiq,phy-xrx200"; + firmware = "lantiq/vr9_phy11g_a2x.bin"; + phys = [ 00 01 ]; + }; + + gpio-keys-polled { + compatible = "gpio-keys-polled"; + #address-cells = <1>; + #size-cells = <0>; + poll-interval = <100>; + reset { + label = "reset"; + gpios = <&gpio 22 1>; + linux,code = <0x198>; + }; + + wifi { + label = "wifi"; + gpios = <&gpio 0 0>; + linux,code = <0xf7>; + linux,input-type = <5>; /* EV_SW */ + }; + + wps { + label = "wps"; + gpios = <&gpio 2 1>; + linux,code = <0x211>; + }; + + dect_paging { + label = "dect_paging"; + gpios = <&gpio 39 1>; + linux,code = <0x211>; + }; + }; + + gpio-leds { + compatible = "gpio-leds"; + power: power { + label = "vr200v:blue:power"; + gpios = <&gpio 46 1>; + }; + dsl: dsl { + label = "vr200v:blue:dsl"; + gpios = <&gpio 4 1>; + }; + internet: internet { + label = "vr200v:blue:internet"; + gpios = <&gpio 5 1>; + }; + usb: usb { + label = "vr200v:blue:usb"; + gpios = <&gpio 25 1>; + }; + eth { + label = "vr200v:blue:lan"; + gpios = <&gpio 40 1>; + }; + wlan { + label = "vr200v:blue:wlan"; + gpios = <&gpio 24 1>; + }; + wlan5g { + label = "vr200v:blue:wlan5g"; + gpios = <&gpio 20 1>; + }; + phone { + label = "vr200v:blue:phone"; + gpios = <&gpio 44 1>; + }; + }; +}; + +&spi { + pinctrl-names = "default"; + pinctrl-0 = <&pins_spi_default>; + + status = "ok"; + + m25p80@4 { + #address-cells = <1>; + #size-cells = <1>; + compatible = "jedec,spi-nor"; + reg = <4 0>; + spi-max-frequency = <33250000>; + m25p,fast-read; + + partition@0 { + reg = <0x0 0x20000>; + label = "u-boot"; + read-only; + }; + + partition@20000 { + reg = <0x20000 0xf90000>; + label = "firmware"; + }; + + partition@fb0000 { + reg = <0xfb0000 0x10000>; + label = "radioDECT"; + read-only; + }; + + partition@fc0000 { + reg = <0xfc0000 0x10000>; + label = "config"; + read-only; + }; + + romfile: partition@fd0000 { + reg = <0xfd0000 0x10000>; + label = "romfile"; + read-only; + }; + + partition@fe0000 { + reg = <0xfe0000 0x10000>; + label = "rom"; + read-only; + }; + + partition@ff0000 { + reg = <0xff0000 0x10000>; + label = "radio"; + read-only; + }; + }; +}; diff --git a/target/linux/lantiq/image/Makefile b/target/linux/lantiq/image/Makefile index f986d38642..882fba80f8 100644 --- a/target/linux/lantiq/image/Makefile +++ b/target/linux/lantiq/image/Makefile @@ -413,6 +413,9 @@ Image/Build/Profile/TDW8970=$(call Image/BuildTPLink/$(1),$(1),TDW8970,TD-W8970v Image/BuildKernel/Profile/TDW8980=$(call Image/BuildKernelTPLink/Template,TDW8980,TD-W8980v1,$(1)) Image/Build/Profile/TDW8980=$(call Image/BuildTPLink/$(1),$(1),TDW8980,TD-W8980v1) +Image/BuildKernel/Profile/VR200v=$(call Image/BuildKernelTPLink/Template,VR200v,ArcherVR200V,$(1)) +Image/Build/Profile/VR200v=$(call Image/BuildTPLink/$(1),$(1),VR200v,ArcherVR200V) + Image/BuildKernel/Profile/VGV7510KW22NOR=$(call Image/BuildKernel/Template,VGV7510KW22NOR,$(1)) Image/Build/Profile/VGV7510KW22NOR=$(call Image/Build/$(1),$(1),VGV7510KW22NOR) diff --git a/target/linux/lantiq/xrx200/profiles/tplink.mk b/target/linux/lantiq/xrx200/profiles/tplink.mk index 6ae9399060..091935d267 100644 --- a/target/linux/lantiq/xrx200/profiles/tplink.mk +++ b/target/linux/lantiq/xrx200/profiles/tplink.mk @@ -11,3 +11,10 @@ define Profile/TDW8980 endef $(eval $(call Profile,TDW8980)) + +define Profile/VR200v + NAME:=TP-LINK Archer VR200v + PACKAGES:=kmod-usb-dwc2 kmod-ledtrig-usbdev +endef + +$(eval $(call Profile,VR200v)) diff --git a/tools/firmware-utils/src/mktplinkfw2.c b/tools/firmware-utils/src/mktplinkfw2.c index 92775290f8..9b9ebf526c 100644 --- a/tools/firmware-utils/src/mktplinkfw2.c +++ b/tools/firmware-utils/src/mktplinkfw2.c @@ -143,6 +143,12 @@ static struct flash_layout layouts[] = { .kernel_la = 0x80002000, .kernel_ep = 0x80002000, .rootfs_ofs = 0x140000, + }, { + .id = "16Mltq", + .fw_max_len = 0xf90000, + .kernel_la = 0x80002000, + .kernel_ep = 0x800061b0, + .rootfs_ofs = 0x140000, }, { .id = "8Mmtk", .fw_max_len = 0x7a0000, @@ -172,6 +178,12 @@ static struct board_info boards[] = { .layout_id = "8Mmtk", .hdr_ver = 3, .endian_swap = true, + }, { + .id = "ArcherVR200V", + .hw_id = 0x73b70801, + .hw_rev = 0x2f, + .layout_id = "16Mltq", + .hdr_ver = 2, }, { /* terminating entry */ }