mvebu: add support for WRT32X (venom)
authorMichael Gray <michael.gray@lantisproject.com>
Sun, 13 May 2018 13:29:30 +0000 (23:29 +1000)
committerJohn Crispin <john@phrozen.org>
Mon, 14 May 2018 15:20:10 +0000 (17:20 +0200)
Linksys WRT32X (Venom) is identical in hardware to the WRT3200ACM
with a different flash layout and boots zImage rather than uImage.

Specification:
- Marvell Armada 385 88F6820 (2x 1.8GHz)
- 256MB of Flash
- 512MB of RAM
- 2.4GHz (bgn) and 5GHz (an+ac wave 2)
- 4x 1Gbps LAN + 1x 1Gbps WAN
- 1x USB 3.0 and 1x USB 2.0/eSATA (combo port)

Flash instruction:
Apply factory image via web-gui.

Signed-off-by: Michael Gray <michael.gray@lantisproject.com>
14 files changed:
package/boot/uboot-envtools/files/mvebu
target/linux/mvebu/base-files/etc/board.d/01_leds
target/linux/mvebu/base-files/etc/board.d/02_network
target/linux/mvebu/base-files/etc/diag.sh
target/linux/mvebu/base-files/etc/init.d/linksys_recovery
target/linux/mvebu/base-files/etc/uci-defaults/03_wireless
target/linux/mvebu/base-files/lib/mvebu.sh
target/linux/mvebu/base-files/lib/preinit/06_set_iface_mac
target/linux/mvebu/base-files/lib/preinit/81_linksys_syscfg
target/linux/mvebu/base-files/lib/upgrade/linksys.sh
target/linux/mvebu/base-files/lib/upgrade/platform.sh
target/linux/mvebu/files-4.14/arch/arm/boot/dts/armada-385-linksys-venom.dts [new file with mode: 0644]
target/linux/mvebu/image/cortex-a9.mk
target/linux/mvebu/patches-4.14/105-build_new_dtbs.patch [new file with mode: 0644]

index ea9f136..7d16a59 100644 (file)
@@ -19,7 +19,8 @@ armada-385-linksys-cobra|\
 armada-385-linksys-shelby)
        ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x40000"
        ;;
-armada-385-linksys-rango)
+armada-385-linksys-rango|\
+armada-385-linksys-venom)
        ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x20000" "0x20000"
        ;;
 armada-385-turris-omnia)
index 8451990..ff8d4a2 100755 (executable)
@@ -35,6 +35,12 @@ armada-385-linksys-shelby)
        ucidef_set_led_usbport "usb2" "USB 2" "pca963x:shelby:white:usb3_1" "usb2-port1" "usb3-port1"
        ucidef_set_led_usbport "usb2_ss" "USB 2 SS" "pca963x:shelby:white:usb3_2" "usb3-port1"
        ;;
+armada-385-linksys-venom)
+       ucidef_set_led_netdev "wan" "WAN" "pca963x:venom:blue:wan" "eth1"
+       ucidef_set_led_usbport "usb1" "USB 1" "pca963x:venom:blue:usb2" "usb1-port1"
+       ucidef_set_led_usbport "usb2" "USB 2" "pca963x:venom:blue:usb3_1" "usb2-port1" "usb3-port1"
+       ucidef_set_led_usbport "usb2_ss" "USB 2 SS" "pca963x:venom:blue:usb3_2" "usb3-port1"
+       ;;
 armada-xp-linksys-mamba)
        ucidef_set_led_netdev "wan" "WAN" "mamba:white:wan" "eth1"
        ucidef_set_led_usbport "usb1" "USB 1" "mamba:white:usb2" "usb1-port1"
index 8e57e8e..66d35dd 100755 (executable)
@@ -18,6 +18,7 @@ armada-385-linksys-caiman|\
 armada-385-linksys-cobra|\
 armada-385-linksys-rango|\
 armada-385-linksys-shelby|\
+armada-385-linksys-venom|\
 armada-xp-linksys-mamba)
        ucidef_set_interfaces_lan_wan "eth0.1" "eth1.2"
        ucidef_add_switch "switch0" \
index 4a3f54e..327a82d 100644 (file)
@@ -19,6 +19,9 @@ get_status_led() {
        armada-385-linksys-shelby)
                status_led="shelby:white:power"
                ;;
+       armada-385-linksys-venom)
+               status_led="venom:blue:power"
+               ;;
        armada-xp-linksys-mamba)
                status_led="mamba:white:power"
                ;;
index c1532ac..520b8aa 100755 (executable)
@@ -7,7 +7,7 @@ boot() {
 . /lib/functions.sh
 
 case $(board_name) in
-       armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-rango|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-385-linksys-venom|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
index baf4a20..6fb24c8 100644 (file)
@@ -11,7 +11,7 @@
 board=$(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-shelby|armada-385-linksys-venom|armada-xp-linksys-mamba)
        SKU=$(strings /dev/mtd3|sed -ne 's/^cert_region=//p')
        WIFIMAC2G=$(macaddr_add $(cat /sys/class/net/eth0/address) +1)
        WIFIMAC5G=$(macaddr_add $WIFIMAC2G +1)
index 840cc1c..33ac832 100755 (executable)
@@ -53,6 +53,9 @@ mvebu_board_detect() {
        *"Linksys WRT3200ACM")
                name="armada-385-linksys-rango"
                ;;
+       *"Linksys WRT32X")
+               name="armada-385-linksys-venom"
+               ;;
        *"Marvell Armada 385 Access Point Development Board")
                name="armada-385-db-ap"
                ;;
index b56cbf5..534a271 100644 (file)
@@ -14,7 +14,7 @@ preinit_set_mac_address() {
                ip link set dev eth0 address $mac 2>/dev/null
                ip link set dev eth1 address $mac 2>/dev/null
                ;;
-       armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-rango|armada-385-linksys-shelby)
+       armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-rango|armada-385-linksys-shelby|armada-385-linksys-venom)
                # rename interfaces back to the way they were with 4.4
                case "$(readlink /sys/class/net/eth0)" in
                        *f1070000*)
index c55c1f5..cf7a22c 100644 (file)
@@ -8,7 +8,7 @@ preinit_mount_syscfg() {
        . /lib/functions.sh
 
        case $(board_name) in
-       armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-rango|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-385-linksys-venom|armada-xp-linksys-mamba)
                needs_recovery=0
                syscfg_part=$(grep syscfg /proc/mtd |cut -c4)
                ubiattach -m $syscfg_part || needs_recovery=1
index 63d1cd1..aacaf55 100644 (file)
@@ -55,7 +55,7 @@ platform_do_upgrade_linksys() {
 
                nand_upgrade_tar "$1"
        }
-       [ "$magic_long" = "27051956" ] && {
+       [ "$magic_long" = "27051956" -o "$magic_long" = "0000a0e1" ] && {
                # check firmwares' rootfs types
                local target_mtd=$(find_mtd_part $part_label)
                local oldroot="$(linksys_get_root_magic $target_mtd)"
index 15c5433..e4ccf9d 100755 (executable)
@@ -13,7 +13,7 @@ platform_check_image() {
 
 platform_do_upgrade() {
        case "$(board_name)" in
-       armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-rango|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-385-linksys-venom|armada-xp-linksys-mamba)
                platform_do_upgrade_linksys "$ARGV"
                ;;
        armada-385-turris-omnia|armada-388-clearfog-base|armada-388-clearfog-pro|globalscale,espressobin|marvell,armada8040-mcbin)
@@ -26,7 +26,7 @@ platform_do_upgrade() {
 }
 platform_copy_config() {
        case "$(board_name)" in
-       armada-385-linksys-caiman|armada-385-linksys-cobra|armada-385-linksys-rango|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-385-linksys-venom|armada-xp-linksys-mamba)
                platform_copy_config_linksys
                ;;
        armada-385-turris-omnia|armada-388-clearfog-base|armada-388-clearfog-pro|globalscale,espressobin|marvell,armada8040-mcbin)
diff --git a/target/linux/mvebu/files-4.14/arch/arm/boot/dts/armada-385-linksys-venom.dts b/target/linux/mvebu/files-4.14/arch/arm/boot/dts/armada-385-linksys-venom.dts
new file mode 100644 (file)
index 0000000..ea44c8f
--- /dev/null
@@ -0,0 +1,201 @@
+/*
+ * Device Tree file for the Linksys WRT32X (Venom)
+ *
+ * Copyright (C) 2017 Imre Kaloz <kaloz@openwrt.org>
+ *
+ *
+ * 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 <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include "armada-385-linksys.dtsi"
+
+/ {
+       model = "Linksys WRT32X";
+       compatible = "linksys,venom", "linksys,armada385", "marvell,armada385",
+                    "marvell,armada380";
+       };
+
+       &expander0 {
+                       wan_amber@0 {
+                               label = "venom:amber:wan";
+                               reg = <0x0>;
+                       };
+
+                       wan_blue@1 {
+                               label = "venom:blue:wan";
+                               reg = <0x1>;
+                       };
+
+                       usb2@5 {
+                               label = "venom:blue:usb2";
+                               reg = <0x5>;
+                       };
+
+                       usb3_1@6 {
+                               label = "venom:blue:usb3_1";
+                               reg = <0x6>;
+                       };
+
+                       usb3_2@7 {
+                               label = "venom:blue:usb3_2";
+                               reg = <0x7>;
+                       };
+
+                       wps_blue@8 {
+                               label = "venom:blue:wps";
+                               reg = <0x8>;
+                       };
+
+                       wps_amber@9 {
+                               label = "venom:amber:wps";
+                               reg = <0x9>;
+                       };
+       };
+
+       &gpio_leds {
+                       power {
+                               gpios = <&gpio1 24 GPIO_ACTIVE_HIGH>;
+                               label = "venom:blue:power";
+                       };
+
+                       sata {
+                               gpios = <&gpio1 21 GPIO_ACTIVE_LOW>;
+                               label = "venom:blue:sata";
+                       };
+
+                       wlan_2g {
+                               gpios = <&gpio1 13 GPIO_ACTIVE_LOW>;
+                               label = "venom:blue:wlan_2g";
+                       };
+
+                       wlan_5g {
+                               gpios = <&gpio1 14 GPIO_ACTIVE_LOW>;
+                               label = "venom:blue:wlan_5g";
+                       };
+       };
+
+       &gpio_leds_pins {
+                       marvell,pins = "mpp21", "mpp45", "mpp46", "mpp56";
+       };
+
+       &nand {
+                       /* Spansion S34ML02G2 256MiB, OEM Layout */
+                       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@180000 {
+                               label = "unused_area";
+                               reg = <0x260000 0x5c0000>;   /* 5.75MB */
+                       };
+
+                       partition@7e0000 {
+                               label = "devinfo";
+                               reg = <0x7e0000 0x40000>;   /* 256KB */
+                               read-only;
+                       };
+
+                       /* kernel1 overlaps with rootfs1 by design */
+                       partition@900000 {
+                               label = "kernel1";
+                               reg = <0x900000 0x7b00000>;  /* 123MB */
+                       };
+
+                       partition@c00000 {
+                               label = "rootfs1";
+                               reg = <0xc00000 0x7800000>;  /* 120MB */
+                       };
+
+                       /* kernel2 overlaps with rootfs2 by design */
+                       partition@8400000 {
+                               label = "kernel2";
+                               reg = <0x8400000 0x7b00000>; /* 123MB */
+                       };
+
+                       partition@8700000 {
+                               label = "rootfs2";
+                               reg = <0x8700000 0x7800000>;  /* 120MB */
+                       };
+
+                       /* last MB is for the BBT, not writable */
+                       partition@ff00000 {
+                               label = "BBT";
+                               reg = <0xff00000 0x100000>;
+                       };
+       };
+
+
+       &pcie1 {
+                       mwlwifi {
+                               marvell,chainmask = <4 4>;
+                       };
+       };
+
+       &pcie2 {
+                       mwlwifi {
+                               marvell,chainmask = <4 4>;
+                       };
+       };
+
+       &sdhci {
+               pinctrl-names = "default";
+               pinctrl-0 = <&sdhci_pins>;
+               no-1-8-v;
+               non-removable;
+               wp-inverted;
+               bus-width = <8>;
+               status = "okay";
+       };
+
+       &usb3_1_vbus {
+               gpio = <&gpio1 12 GPIO_ACTIVE_HIGH>;
+       };
+
+       &usb3_1_vbus_pins {
+               marvell,pins = "mpp44";
+       };
index d9defe8..6bc6269 100644 (file)
@@ -51,6 +51,16 @@ define Device/linksys-wrt1900acs
 endef
 TARGET_DEVICES += linksys-wrt1900acs
 
+define Device/linksys-wrt32x
+$(call Device/linksys,WRT32X (Venom))
+  DEVICE_DTS := armada-385-linksys-venom
+  DEVICE_PACKAGES += kmod-btmrvl kmod-mwifiex-sdio mwlwifi-firmware-88w8964
+  $(Device/armada-385-linksys)
+  KERNEL_SIZE := 3072k
+  KERNEL := kernel-bin | append-dtb
+endef
+TARGET_DEVICES += linksys-wrt32x
+
 define Device/linksys-wrt1900ac
   $(call Device/linksys,WRT1900AC (Mamba))
   DEVICE_DTS := armada-xp-linksys-mamba
diff --git a/target/linux/mvebu/patches-4.14/105-build_new_dtbs.patch b/target/linux/mvebu/patches-4.14/105-build_new_dtbs.patch
new file mode 100644 (file)
index 0000000..92880b9
--- /dev/null
@@ -0,0 +1,10 @@
+--- a/arch/arm/boot/dts/Makefile
++++ b/arch/arm/boot/dts/Makefile
+@@ -1027,6 +1027,7 @@ dtb-$(CONFIG_MACH_ARMADA_38X) += \
+       armada-385-linksys-cobra.dtb \
+       armada-385-linksys-rango.dtb \
+       armada-385-linksys-shelby.dtb \
++      armada-385-linksys-venom.dtb \
+       armada-385-synology-ds116.dtb \
+       armada-385-turris-omnia.dtb \
+       armada-388-clearfog.dtb \