From 50e627ac06112eb633222cc72af5c4fe60f3dbb9 Mon Sep 17 00:00:00 2001 From: Imre Kaloz Date: Thu, 13 Oct 2016 12:52:20 +0200 Subject: [PATCH] mvebu: add support for the Linksys WRT3200ACM (Rango) Signed-off-by: Imre Kaloz --- .../mvebu/base-files/etc/board.d/01_leds | 5 + .../mvebu/base-files/etc/board.d/02_network | 3 +- target/linux/mvebu/base-files/etc/diag.sh | 11 +- .../base-files/etc/init.d/linksys_recovery | 4 +- target/linux/mvebu/base-files/lib/mvebu.sh | 3 + .../base-files/lib/preinit/06_set_iface_mac | 2 +- .../base-files/lib/preinit/81_linksys_syscfg | 4 +- .../mvebu/base-files/lib/upgrade/platform.sh | 4 +- .../arm/boot/dts/armada-385-linksys-rango.dts | 446 ++++++++++++++++++ target/linux/mvebu/image/Makefile | 11 + .../patches-4.4/010-build_new_dtbs.patch | 3 +- target/linux/mvebu/profiles/linksys.mk | 11 + 12 files changed, 497 insertions(+), 10 deletions(-) create mode 100644 target/linux/mvebu/files/arch/arm/boot/dts/armada-385-linksys-rango.dts diff --git a/target/linux/mvebu/base-files/etc/board.d/01_leds b/target/linux/mvebu/base-files/etc/board.d/01_leds index 71dd3476e6..5fcd8a6df4 100755 --- a/target/linux/mvebu/base-files/etc/board.d/01_leds +++ b/target/linux/mvebu/base-files/etc/board.d/01_leds @@ -21,6 +21,11 @@ armada-385-linksys-cobra) ucidef_set_led_usbdev "usb2" "USB2" "pca963x:cobra:white:usb2" "1-1" ucidef_set_led_usbdev "usb3" "USB3" "pca963x:cobra:white:usb3_1" "2-1" ;; +armada-385-linksys-rango) + ucidef_set_led_netdev "wan" "WAN" "pca963x:rango:white:wan" "eth0" + ucidef_set_led_usbdev "usb2" "USB2" "pca963x:rango:white:usb2" "1-1" + ucidef_set_led_usbdev "usb3" "USB3" "pca963x:rango:white:usb3_1" "2-1" + ;; armada-385-linksys-shelby) ucidef_set_led_netdev "wan" "WAN" "pca963x:shelby:white:wan" "eth0" ucidef_set_led_usbdev "usb2" "USB2" "pca963x:shelby:white:usb2" "1-1" diff --git a/target/linux/mvebu/base-files/etc/board.d/02_network b/target/linux/mvebu/base-files/etc/board.d/02_network index 8f633c9bad..49da9ddf7c 100755 --- a/target/linux/mvebu/base-files/etc/board.d/02_network +++ b/target/linux/mvebu/base-files/etc/board.d/02_network @@ -1,6 +1,6 @@ #!/bin/sh # -# Copyright (C) 2014-2015 OpenWrt.org +# Copyright (C) 2014-2016 OpenWrt.org # . /lib/functions/uci-defaults.sh @@ -13,6 +13,7 @@ board=$(mvebu_board_name) case "$board" in armada-385-linksys-caiman|\ armada-385-linksys-cobra|\ +armada-385-linksys-rango|\ armada-385-linksys-shelby) ucidef_set_interfaces_lan_wan "eth1" "eth0" ucidef_add_switch "switch0" \ diff --git a/target/linux/mvebu/base-files/etc/diag.sh b/target/linux/mvebu/base-files/etc/diag.sh index 82760fa0de..535894c6c8 100644 --- a/target/linux/mvebu/base-files/etc/diag.sh +++ b/target/linux/mvebu/base-files/etc/diag.sh @@ -1,11 +1,20 @@ #!/bin/sh -# Copyright (C) 2014 OpenWrt.org +# Copyright (C) 2014-2016 OpenWrt.org . /lib/functions/leds.sh . /lib/mvebu.sh get_status_led() { case $(mvebu_board_name) in + armada-385-linksys-caiman) + status_led="caiman:white:power" + ;; + armada-385-linksys-cobra) + status_led="cobra:white:power" + ;; + armada-385-linksys-rango) + status_led="rango:white:power" + ;; armada-385-linksys-shelby) status_led="shelby:white:power" ;; diff --git a/target/linux/mvebu/base-files/etc/init.d/linksys_recovery b/target/linux/mvebu/base-files/etc/init.d/linksys_recovery index d9cae7b2cf..4fb111a43c 100755 --- a/target/linux/mvebu/base-files/etc/init.d/linksys_recovery +++ b/target/linux/mvebu/base-files/etc/init.d/linksys_recovery @@ -1,5 +1,5 @@ #!/bin/sh /etc/rc.common -# Copyright (C) 2015 OpenWrt.org +# Copyright (C) 2015-2016 OpenWrt.org START=97 boot() { @@ -7,7 +7,7 @@ boot() { . /lib/mvebu.sh case $(mvebu_board_name) in - armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-shelby|armada-xp-linksys-mamba) + armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-rango|armada-385-linksys-shelby|armada-xp-linksys-mamba) # make sure auto_recovery in uboot is always on AUTO_RECOVERY_ENA="`fw_printenv -n auto_recovery`" if [ "$AUTO_RECOVERY_ENA" != "yes" ] ; then diff --git a/target/linux/mvebu/base-files/lib/mvebu.sh b/target/linux/mvebu/base-files/lib/mvebu.sh index 836717d7f6..258c180086 100755 --- a/target/linux/mvebu/base-files/lib/mvebu.sh +++ b/target/linux/mvebu/base-files/lib/mvebu.sh @@ -43,6 +43,9 @@ mvebu_board_detect() { *"Linksys WRT1900ACS") name="armada-385-linksys-shelby" ;; + *"Linksys WRT3200ACM") + name="armada-385-linksys-rango" + ;; *"Marvell Armada 385 Access Point Development Board") name="armada-385-db-ap" ;; diff --git a/target/linux/mvebu/base-files/lib/preinit/06_set_iface_mac b/target/linux/mvebu/base-files/lib/preinit/06_set_iface_mac index 876c08b771..ef7820d837 100644 --- a/target/linux/mvebu/base-files/lib/preinit/06_set_iface_mac +++ b/target/linux/mvebu/base-files/lib/preinit/06_set_iface_mac @@ -14,7 +14,7 @@ preinit_set_mac_address() { ifconfig eth0 hw ether $mac 2>/dev/null ifconfig eth1 hw ether $mac 2>/dev/null ;; - armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-shelby) + armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-rango|armada-385-linksys-shelby) mac=$(mtd_get_mac_ascii devinfo hw_mac_addr) mac_wan=$(macaddr_setbit_la "$mac") ifconfig eth1 hw ether $mac 2>/dev/null diff --git a/target/linux/mvebu/base-files/lib/preinit/81_linksys_syscfg b/target/linux/mvebu/base-files/lib/preinit/81_linksys_syscfg index a54226f00c..bb3621f8db 100644 --- a/target/linux/mvebu/base-files/lib/preinit/81_linksys_syscfg +++ b/target/linux/mvebu/base-files/lib/preinit/81_linksys_syscfg @@ -1,5 +1,5 @@ # -# Copyright (C) 2014 OpenWrt.org +# Copyright (C) 2014-2016 OpenWrt.org # preinit_mount_syscfg() { @@ -8,7 +8,7 @@ preinit_mount_syscfg() { . /lib/mvebu.sh case $(mvebu_board_name) in - armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-shelby|armada-xp-linksys-mamba) + armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-rango|armada-385-linksys-shelby|armada-xp-linksys-mamba) needs_recovery=0 ubiattach -m 8 || needs_recovery=1 if [ $needs_recovery -eq 1 ] diff --git a/target/linux/mvebu/base-files/lib/upgrade/platform.sh b/target/linux/mvebu/base-files/lib/upgrade/platform.sh index 2f699a745f..46b8443597 100755 --- a/target/linux/mvebu/base-files/lib/upgrade/platform.sh +++ b/target/linux/mvebu/base-files/lib/upgrade/platform.sh @@ -13,7 +13,7 @@ platform_check_image() { [ "$#" -gt 1 ] && return 1 case "$board" in - armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-shelby|armada-xp-linksys-mamba) + armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-rango|armada-385-linksys-shelby|armada-xp-linksys-mamba) [ "$magic_long" != "27051956" -a "$magic_long" != "73797375" ] && { echo "Invalid image type." return 1 @@ -30,7 +30,7 @@ platform_do_upgrade() { local board=$(mvebu_board_name) case "$board" in - armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-shelby|armada-xp-linksys-mamba) + armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-rango|armada-385-linksys-shelby|armada-xp-linksys-mamba) platform_do_upgrade_linksys "$ARGV" ;; *) diff --git a/target/linux/mvebu/files/arch/arm/boot/dts/armada-385-linksys-rango.dts b/target/linux/mvebu/files/arch/arm/boot/dts/armada-385-linksys-rango.dts new file mode 100644 index 0000000000..c4d621224e --- /dev/null +++ b/target/linux/mvebu/files/arch/arm/boot/dts/armada-385-linksys-rango.dts @@ -0,0 +1,446 @@ +/* + * Device Tree file for the Linksys WRT3200ACM (Rango) + * + * Copyright (C) 2016 Imre Kaloz + * + * + * This file is dual-licensed: you can use it either under the terms + * of the GPL or the X11 license, at your option. Note that this dual + * licensing only applies to this file, and not this project as a + * whole. + * + * a) This file is licensed under the terms of the GNU General Public + * License version 2. This program is licensed "as is" without + * any warranty of any kind, whether express or implied. + * + * Or, alternatively, + * + * b) Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or + * sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +/dts-v1/; +#include +#include +#include "armada-385.dtsi" + +/ { + model = "Linksys WRT3200ACM"; + compatible = "linksys,rango", "linksys,armada385", "marvell,armada385", + "marvell,armada380"; + + chosen { + stdout-path = "serial0:115200n8"; + }; + + memory { + device_type = "memory"; + reg = <0x00000000 0x20000000>; /* 512 MB */ + }; + + soc { + ranges = ; + + internal-regs { + + spi@10600 { + status = "disabled"; + }; + + i2c@11000 { + pinctrl-names = "default"; + pinctrl-0 = <&i2c0_pins>; + status = "okay"; + + tmp421@4c { + compatible = "ti,tmp421"; + reg = <0x4c>; + }; + + pca9635@68 { + #address-cells = <1>; + #size-cells = <0>; + compatible = "nxp,pca9635"; + reg = <0x68>; + + wan_amber@0 { + label = "rango:amber:wan"; + reg = <0x0>; + }; + + wan_white@1 { + label = "rango:white:wan"; + reg = <0x1>; + }; + + wlan_2g@2 { + label = "rango:white:wlan_2g"; + reg = <0x2>; + }; + + wlan_5g@3 { + label = "rango:white:wlan_5g"; + reg = <0x3>; + }; + + usb2@5 { + label = "rango:white:usb2"; + reg = <0x5>; + }; + + usb3_1@6 { + label = "rango:white:usb3_1"; + reg = <0x6>; + }; + + usb3_2@7 { + label = "rango:white:usb3_2"; + reg = <0x7>; + }; + + wps_white@8 { + label = "rango:white:wps"; + reg = <0x8>; + }; + + wps_amber@9 { + label = "rango:amber:wps"; + reg = <0x9>; + }; + }; + }; + + /* J10: VCC, NC, RX, NC, TX, GND */ + serial@12000 { + status = "okay"; + }; + + ethernet@70000 { + status = "okay"; + phy-mode = "rgmii-id"; + buffer-manager = <&bm>; + bm,pool-long = <0>; + bm,pool-short = <3>; + fixed-link { + speed = <1000>; + full-duplex; + }; + }; + + ethernet@34000 { + status = "okay"; + phy-mode = "sgmii"; + buffer-manager = <&bm>; + bm,pool-long = <2>; + bm,pool-short = <3>; + fixed-link { + speed = <1000>; + full-duplex; + }; + }; + + mdio { + status = "okay"; + }; + + bm@c8000 { + status = "okay"; + }; + + sata@a8000 { + status = "okay"; + }; + + sdhci@d8000 { + pinctrl-names = "default"; + pinctrl-0 = <&sdhci_pins>; + no-1-8-v; + broken-cd; + wp-inverted; + bus-width = <8>; + status = "okay"; + }; + + /* USB part of the eSATA/USB 2.0 port */ + usb@58000 { + status = "okay"; + }; + + usb3@f8000 { + status = "okay"; + usb-phy = <&usb3_phy>; + }; + + flash@d0000 { + status = "okay"; + num-cs = <1>; + marvell,nand-keep-config; + marvell,nand-enable-arbiter; + nand-on-flash-bbt; + + partition@0 { + label = "u-boot"; + reg = <0x0000000 0x200000>; /* 2MB */ + read-only; + }; + + partition@200000 { + label = "u_env"; + reg = <0x200000 0x20000>; /* 128KB */ + }; + + partition@220000 { + label = "s_env"; + reg = <0x220000 0x40000>; /* 256KB */ + }; + + partition@7e0000 { + label = "devinfo"; + reg = <0x7e0000 0x1e0000>; /* 1920KB */ + read-only; + }; + + partition@820000 { + label = "sysdiag"; + reg = <0x820000 0x40000>; /* 256KB */ + read-only; + }; + + /* kernel1 overlaps with rootfs1 by design */ + partition@a00000 { + label = "kernel1"; + reg = <0xa00000 0x5000000>; /* 80MB */ + }; + + partition@1000000 { + label = "rootfs1"; + reg = <0x1000000 0x4a00000>; /* 74MB */ + }; + + /* kernel2 overlaps with rootfs2 by design */ + partition@5a00000 { + label = "kernel2"; + reg = <0x5a00000 0x5000000>; /* 80MB */ + }; + + partition@6000000 { + label = "rootfs2"; + reg = <0x6000000 0x4a00000>; /* 74MB */ + }; + + /* + * 86MB, last MB is for the BBT, not writable + */ + partition@aa00000 { + label = "syscfg"; + reg = <0x5a00000 0x5600000>; + }; + + /* + * Unused area between "s_env" and "devinfo". + * Moved here because otherwise the renumbered + * partitions would break the bootloader + * supplied bootargs + */ + partition@180000 { + label = "unused_area"; + reg = <0x260000 0x580000>; /* 5.6MB */ + }; + }; + }; + + bm-bppi { + status = "okay"; + }; + + pcie-controller { + status = "okay"; + + pcie@1,0 { + /* Marvell 88W8964, 5GHz-only */ + status = "okay"; + + mwlwifi { + marvell,2ghz = <0>; + marvell,chainmask = <4 4>; + }; + + }; + + pcie@2,0 { + /* Marvell 88W8964, 2GHz-only */ + status = "okay"; + + mwlwifi { + marvell,5ghz = <0>; + marvell,chainmask = <4 4>; + }; + + }; + }; + }; + + usb3_phy: usb3_phy { + compatible = "usb-nop-xceiv"; + vcc-supply = <®_xhci0_vbus>; + }; + + reg_xhci0_vbus: xhci0-vbus { + compatible = "regulator-fixed"; + pinctrl-names = "default"; + pinctrl-0 = <&xhci0_vbus_pins>; + regulator-name = "xhci0-vbus"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + enable-active-high; + gpio = <&gpio1 16 GPIO_ACTIVE_HIGH>; + }; + + gpio_keys { + compatible = "gpio-keys"; + #address-cells = <1>; + #size-cells = <0>; + pinctrl-0 = <&keys_pin>; + pinctrl-names = "default"; + + button@1 { + label = "WPS"; + linux,code = ; + gpios = <&gpio0 24 GPIO_ACTIVE_LOW>; + }; + + button@2 { + label = "Factory Reset Button"; + linux,code = ; + gpios = <&gpio0 29 GPIO_ACTIVE_LOW>; + }; + }; + + gpio-leds { + compatible = "gpio-leds"; + pinctrl-0 = <&power_led_pin &sata_led_pin>; + pinctrl-names = "default"; + + power { + gpios = <&gpio1 25 GPIO_ACTIVE_HIGH>; + default-state = "on"; + }; + + sata { + gpios = <&gpio0 21 GPIO_ACTIVE_LOW>; + default-state = "off"; + }; + }; + + dsa@0 { + compatible = "marvell,dsa"; + #address-cells = <2>; + #size-cells = <0>; + + dsa,ethernet = <ð2>; + dsa,mii-bus = <&mdio>; + + switch@0 { + #address-cells = <1>; + #size-cells = <0>; + reg = <0x0 0>; /* MDIO address 0, switch 0 in tree */ + + port@0 { + reg = <0>; + label = "lan4"; + }; + + port@1 { + reg = <1>; + label = "lan3"; + }; + + port@2 { + reg = <2>; + label = "lan2"; + }; + + port@3 { + reg = <3>; + label = "lan1"; + }; + + port@4 { + reg = <4>; + label = "wan"; + }; + + port@5 { + reg = <5>; + label = "cpu"; + }; + }; + }; + + gpio-leds { + power { + label = "rango:white:power"; + }; + + sata { + label = "rango:white:sata"; + }; + }; + + mvsw61xx { + #address-cells = <1>; + #size-cells = <0>; + compatible = "marvell,88e6352"; + status = "okay"; + reg = <0x10>; + + mii-bus = <&mdio>; + cpu-port-0 = <5>; + cpu-port-1 = <6>; + }; + +}; + +&pinctrl { + keys_pin: keys-pin { + marvell,pins = "mpp24", "mpp29"; + marvell,function = "gpio"; + }; + + power_led_pin: power-led-pin { + marvell,pins = "mpp56"; + marvell,function = "gpio"; + }; + + sata_led_pin: sata-led-pin { + marvell,pins = "mpp21"; + marvell,function = "gpio"; + }; + + xhci0_vbus_pins: xhci0-vbus-pins { + marvell,pins = "mpp47"; + marvell,function = "gpio"; + }; +}; diff --git a/target/linux/mvebu/image/Makefile b/target/linux/mvebu/image/Makefile index d866a9ae21..a0a314a9fe 100644 --- a/target/linux/mvebu/image/Makefile +++ b/target/linux/mvebu/image/Makefile @@ -153,6 +153,7 @@ $(eval $(call NANDProfile,XP-GP,armada-xp-gp,512KiB,4096)) $(eval $(call NANDProfile,Mamba,armada-xp-linksys-mamba,128KiB,2048,512,2048)) $(eval $(call NANDProfile,Caiman,armada-385-linksys-caiman,128KiB,2048,512,2048)) $(eval $(call NANDProfile,Cobra,armada-385-linksys-cobra,128KiB,2048,512,2048)) +$(eval $(call NANDProfile,Rango,armada-385-linksys-rango,128KiB,2048,512,2048)) $(eval $(call NANDProfile,Shelby,armada-385-linksys-shelby,128KiB,2048,512,2048)) # Boards with large NOR, where we want to use UBI @@ -207,6 +208,16 @@ define Image/Build/Profile/Shelby/squashfs ) > $(BIN_DIR)/$(IMG_PREFIX)-armada-385-linksys-shelby-squashfs-factory.img endef +# Rango: Linksys WRT3200ACM +define Image/Build/Profile/Rango/squashfs + $(call Image/Build/UbinizeImage,armada-385-linksys-rango,,squashfs, -p 128KiB -m 2048 -s 512 -O 2048) + ( \ + dd if=$(KDIR)/uImage-armada-385-linksys-rango bs=6144k conv=sync; \ + dd if=$(KDIR)/$(IMG_PREFIX)-armada-385-linksys-rango-squashfs-ubinized.bin \ + bs=2048 conv=sync; \ + ) > $(BIN_DIR)/$(IMG_PREFIX)-armada-385-linksys-rango-squashfs-factory.img +endef + ### ### Marvell ### diff --git a/target/linux/mvebu/patches-4.4/010-build_new_dtbs.patch b/target/linux/mvebu/patches-4.4/010-build_new_dtbs.patch index 334cbecef9..6ba9ee6e82 100644 --- a/target/linux/mvebu/patches-4.4/010-build_new_dtbs.patch +++ b/target/linux/mvebu/patches-4.4/010-build_new_dtbs.patch @@ -1,9 +1,10 @@ --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile -@@ -748,6 +748,7 @@ dtb-$(CONFIG_MACH_ARMADA_38X) += \ +@@ -748,6 +748,8 @@ dtb-$(CONFIG_MACH_ARMADA_38X) += \ armada-385-db-ap.dtb \ armada-385-linksys-caiman.dtb \ armada-385-linksys-cobra.dtb \ ++ armada-385-linksys-rango.dtb \ + armada-385-linksys-shelby.dtb \ armada-388-db.dtb \ armada-388-gp.dtb \ diff --git a/target/linux/mvebu/profiles/linksys.mk b/target/linux/mvebu/profiles/linksys.mk index 41f9c7d5bb..210b7f658b 100644 --- a/target/linux/mvebu/profiles/linksys.mk +++ b/target/linux/mvebu/profiles/linksys.mk @@ -51,3 +51,14 @@ define Profile/Shelby/Description endef $(eval $(call Profile,Shelby)) + +define Profile/Rango + NAME:=Linksys WRT3200ACM (Rango) + PACKAGES:= kmod-mwlwifi wpad-mini swconfig +endef + +define Profile/Rango/Description + Package set compatible with the Linksys WRT3200ACM (Rango). +endef + +$(eval $(call Profile,Rango)) -- 2.35.1