From 3764caa93478e3472df3128b79b6d0f6b0fb999c 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) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Imre Kaloz Signed-off-by: Álvaro Fernández Rojas --- package/boot/uboot-envtools/files/mvebu | 6 +- .../mvebu/base-files/etc/board.d/01_leds | 8 +- .../mvebu/base-files/etc/board.d/02_network | 4 +- target/linux/mvebu/base-files/etc/diag.sh | 3 + .../base-files/etc/init.d/linksys_recovery | 5 +- target/linux/mvebu/base-files/lib/mvebu.sh | 4 + .../base-files/lib/preinit/06_set_iface_mac | 3 +- .../base-files/lib/preinit/81_linksys_syscfg | 14 +- .../mvebu/base-files/lib/upgrade/platform.sh | 7 +- .../arm/boot/dts/armada-385-linksys-rango.dts | 446 ++++++++++++++++++ target/linux/mvebu/image/Makefile | 10 +- .../patches-4.4/010-build_new_dtbs.patch | 3 +- 12 files changed, 496 insertions(+), 17 deletions(-) create mode 100644 target/linux/mvebu/files/arch/arm/boot/dts/armada-385-linksys-rango.dts diff --git a/package/boot/uboot-envtools/files/mvebu b/package/boot/uboot-envtools/files/mvebu index 2362bc3ee3..9b826daffc 100644 --- a/package/boot/uboot-envtools/files/mvebu +++ b/package/boot/uboot-envtools/files/mvebu @@ -1,6 +1,7 @@ #!/bin/sh # -# Copyright (C) 2014-2015 OpenWrt.org +# Copyright (C) 2014-2016 OpenWrt.org +# Copyright (C) 2016 LEDE-Project.org # [ -e /etc/config/ubootenv ] && exit 0 @@ -17,6 +18,9 @@ case "$board" in armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-shelby) ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x40000" ;; +armada-385-linksys-rango) + ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x20000" + ;; armada-xp-linksys-mamba) ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x40000" "0x20000" ;; 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..8310160ccf 100755 --- a/target/linux/mvebu/base-files/etc/board.d/01_leds +++ b/target/linux/mvebu/base-files/etc/board.d/01_leds @@ -1,6 +1,7 @@ #!/bin/sh # -# Copyright (C) 2014-2015 OpenWrt.org +# Copyright (C) 2014-2016 OpenWrt.org +# Copyright (C) 2016 LEDE-Project.org # . /lib/functions/uci-defaults.sh @@ -21,6 +22,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 21c666025c..614a0e2887 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,7 @@ #!/bin/sh # -# Copyright (C) 2014-2015 OpenWrt.org +# Copyright (C) 2014-2016 OpenWrt.org +# Copyright (C) 2016 LEDE-Project.org # . /lib/functions/uci-defaults.sh @@ -13,6 +14,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 a361fa776d..622c7d9604 100644 --- a/target/linux/mvebu/base-files/etc/diag.sh +++ b/target/linux/mvebu/base-files/etc/diag.sh @@ -13,6 +13,9 @@ get_status_led() { 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..8eeb5f99b9 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,6 @@ #!/bin/sh /etc/rc.common -# Copyright (C) 2015 OpenWrt.org +# Copyright (C) 2015-2016 OpenWrt.org +# Copyright (C) 2016 LEDE-Project.org START=97 boot() { @@ -7,7 +8,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..9a4c53ed40 100755 --- a/target/linux/mvebu/base-files/lib/mvebu.sh +++ b/target/linux/mvebu/base-files/lib/mvebu.sh @@ -1,6 +1,7 @@ #!/bin/sh # # Copyright (C) 2013-2015 OpenWrt.org +# Copyright (C) 2016 LEDE-Project.org # MVEBU_BOARD_NAME= @@ -43,6 +44,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..3e870e8b84 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 @@ -1,5 +1,6 @@ # # Copyright (C) 2014-2015 OpenWrt.org +# Copyright (C) 2016 LEDE-Project.org # preinit_set_mac_address() { @@ -14,7 +15,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..3edd82ebcd 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,6 @@ # -# Copyright (C) 2014 OpenWrt.org +# Copyright (C) 2014-2016 OpenWrt.org +# Copyright (C) 2016 LEDE-Project.org # preinit_mount_syscfg() { @@ -8,15 +9,16 @@ 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 + syscfg_part=$(grep syscfg /proc/mtd |cut -c4) + ubiattach -m $syscfg_part || needs_recovery=1 if [ $needs_recovery -eq 1 ] then echo "ubifs syscfg partition is damaged, reformatting" - ubidetach -m 8 - ubiformat -y -O 2048 -q /dev/mtd8 - ubiattach -m 8 + ubidetach -m $syscfg_part + ubiformat -y -O 2048 -q /dev/mtd$syscfg_part + ubiattach -m $syscfg_part ubimkvol /dev/ubi1 -n 0 -N syscfg -t dynamic --maxavsize fi mkdir /tmp/syscfg diff --git a/target/linux/mvebu/base-files/lib/upgrade/platform.sh b/target/linux/mvebu/base-files/lib/upgrade/platform.sh index 5652e98a4e..a8ad602cc7 100755 --- a/target/linux/mvebu/base-files/lib/upgrade/platform.sh +++ b/target/linux/mvebu/base-files/lib/upgrade/platform.sh @@ -1,5 +1,6 @@ # -# Copyright (C) 2014 OpenWrt.org +# Copyright (C) 2014-2016 OpenWrt.org +# Copyright (C) 2016 LEDE-Project.org # . /lib/mvebu.sh @@ -13,7 +14,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 @@ -34,7 +35,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" ;; armada-388-clearfog) 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..0046125529 --- /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 0x40000>; /* 256KB */ + read-only; + }; + + partition@820000 { + label = "sysdiag"; + reg = <0x820000 0x1e0000>; /* 1920KB */ + 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 = <0xaa00000 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 0x5c0000>; /* 5.75MB */ + }; + }; + }; + + 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 b0cc1648ef..73c533ab37 100644 --- a/target/linux/mvebu/image/Makefile +++ b/target/linux/mvebu/image/Makefile @@ -1,5 +1,6 @@ # -# Copyright (C) 2012-2015 OpenWrt.org +# Copyright (C) 2012-2016 OpenWrt.org +# Copyright (C) 2016 LEDE-project.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -119,6 +120,13 @@ define Device/linksys-wrt1900acv2 endef TARGET_DEVICES += linksys-wrt1900acv2 +define Device/linksys-wrt3200acm + $(call Device/linksys,WRT3200ACM (Rango)) + $(Device/armada-385-linksys) + DEVICE_DTS := armada-385-linksys-rango +endef +TARGET_DEVICES += linksys-wrt3200acm + define Device/linksys-wrt1900acs $(call Device/linksys,WRT1900ACS (Shelby)) $(Device/armada-385-linksys) 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 \