[LEDE-DEV] [PATCH] mvebu: add support for WRT32X (venom)

michael.gray at lantisproject.com michael.gray at lantisproject.com
Sun May 13 00:59:13 PDT 2018


From: Michael Gray <michael.gray at lantisproject.com>

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 at lantisproject.com>
---
 target/linux/mvebu/base-files/etc/board.d/01_leds  |   6 +
 .../linux/mvebu/base-files/etc/board.d/02_network  |   1 +
 target/linux/mvebu/base-files/etc/diag.sh          |   3 +
 .../mvebu/base-files/etc/init.d/linksys_recovery   |   2 +-
 .../mvebu/base-files/etc/uci-defaults/03_wireless  |   2 +-
 target/linux/mvebu/base-files/lib/mvebu.sh         |   3 +
 .../mvebu/base-files/lib/preinit/06_set_iface_mac  |   2 +-
 .../mvebu/base-files/lib/preinit/81_linksys_syscfg |   2 +-
 .../linux/mvebu/base-files/lib/upgrade/linksys.sh  |   2 +-
 .../linux/mvebu/base-files/lib/upgrade/platform.sh |   4 +-
 .../arch/arm/boot/dts/armada-385-linksys-venom.dts | 201 +++++++++++++++++++++
 target/linux/mvebu/image/cortex-a9.mk              |  10 +
 .../mvebu/patches-4.14/105-build_new_dtbs.patch    |  10 +
 13 files changed, 241 insertions(+), 7 deletions(-)
 create mode 100644 target/linux/mvebu/files-4.14/arch/arm/boot/dts/armada-385-linksys-venom.dts
 create mode 100644 target/linux/mvebu/patches-4.14/105-build_new_dtbs.patch

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 84519907af..ff8d4a21c0 100755
--- a/target/linux/mvebu/base-files/etc/board.d/01_leds
+++ b/target/linux/mvebu/base-files/etc/board.d/01_leds
@@ -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"
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 8e57e8e1ce..66d35dda70 100755
--- a/target/linux/mvebu/base-files/etc/board.d/02_network
+++ b/target/linux/mvebu/base-files/etc/board.d/02_network
@@ -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" \
diff --git a/target/linux/mvebu/base-files/etc/diag.sh b/target/linux/mvebu/base-files/etc/diag.sh
index 4a3f54ed2c..327a82df93 100644
--- a/target/linux/mvebu/base-files/etc/diag.sh
+++ b/target/linux/mvebu/base-files/etc/diag.sh
@@ -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"
 		;;
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 c1532ac2c1..520b8aac54 100755
--- a/target/linux/mvebu/base-files/etc/init.d/linksys_recovery
+++ b/target/linux/mvebu/base-files/etc/init.d/linksys_recovery
@@ -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
diff --git a/target/linux/mvebu/base-files/etc/uci-defaults/03_wireless b/target/linux/mvebu/base-files/etc/uci-defaults/03_wireless
index baf4a20721..6fb24c8d4f 100644
--- a/target/linux/mvebu/base-files/etc/uci-defaults/03_wireless
+++ b/target/linux/mvebu/base-files/etc/uci-defaults/03_wireless
@@ -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)
diff --git a/target/linux/mvebu/base-files/lib/mvebu.sh b/target/linux/mvebu/base-files/lib/mvebu.sh
index 840cc1ca2a..33ac832399 100755
--- a/target/linux/mvebu/base-files/lib/mvebu.sh
+++ b/target/linux/mvebu/base-files/lib/mvebu.sh
@@ -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"
 		;;
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 b56cbf50ad..534a271efb 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() {
 		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*)
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 c55c1f5c5a..cf7a22c4f6 100644
--- a/target/linux/mvebu/base-files/lib/preinit/81_linksys_syscfg
+++ b/target/linux/mvebu/base-files/lib/preinit/81_linksys_syscfg
@@ -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
diff --git a/target/linux/mvebu/base-files/lib/upgrade/linksys.sh b/target/linux/mvebu/base-files/lib/upgrade/linksys.sh
index 63d1cd14a4..aacaf55667 100644
--- a/target/linux/mvebu/base-files/lib/upgrade/linksys.sh
+++ b/target/linux/mvebu/base-files/lib/upgrade/linksys.sh
@@ -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)"
diff --git a/target/linux/mvebu/base-files/lib/upgrade/platform.sh b/target/linux/mvebu/base-files/lib/upgrade/platform.sh
index 15c5433792..e4ccf9d7f2 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() {
 
 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
index 0000000000..b50bd9764e
--- /dev/null
+++ b/target/linux/mvebu/files-4.14/arch/arm/boot/dts/armada-385-linksys-venom.dts
@@ -0,0 +1,201 @@
+/*
+ * Device Tree file for the Linksys WRT32X (Venom)
+ *
+ * Copyright (C) 2017 Imre Kaloz <kaloz at 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 at 0 {
+				label = "venom:amber:wan";
+				reg = <0x0>;
+			};
+
+			wan_blue at 1 {
+				label = "venom:blue:wan";
+				reg = <0x1>;
+			};
+
+			usb2 at 5 {
+				label = "venom:blue:usb2";
+				reg = <0x5>;
+			};
+
+			usb3_1 at 6 {
+				label = "venom:blue:usb3_1";
+				reg = <0x6>;
+			};
+
+			usb3_2 at 7 {
+				label = "venom:blue:usb3_2";
+				reg = <0x7>;
+			};
+
+			wps_blue at 8 {
+				label = "venom:blue:wps";
+				reg = <0x8>;
+			};
+
+			wps_amber at 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 at 0 {
+				label = "u-boot";
+				reg = <0x0000000 0x200000>;  /* 2MB */
+				/* read-only; */
+			};
+
+			partition at 200000 {
+				label = "u_env";
+				reg = <0x200000 0x20000>;    /* 128KB */
+			};
+
+			partition at 220000 {
+				label = "s_env";
+				reg = <0x220000 0x40000>;    /* 256KB */
+			};
+
+			partition at 180000 {
+				label = "unused_area";
+				reg = <0x260000 0x5c0000>;   /* 5.75MB */
+			};
+
+			partition at 7e0000 {
+				label = "devinfo";
+				reg = <0x7e0000 0x40000>;   /* 256KB */
+				read-only;
+			};
+
+			/* kernel1 overlaps with rootfs1 by design */
+			partition at 900000 {
+				label = "kernel1";
+				reg = <0x900000 0x7b00000>;  /* 123MB */
+			};
+
+			partition at c00000 {
+				label = "rootfs1";
+				reg = <0xc00000 0x7800000>;  /* 120MB */
+			};
+
+			/* kernel2 overlaps with rootfs2 by design */
+			partition at 8400000 {
+				label = "kernel2";
+				reg = <0x8400000 0x7b00000>; /* 123MB */
+			};
+
+			partition at 8700000 {
+				label = "rootfs2";
+				reg = <0x8700000 0x7800000>;  /* 120MB */
+			};
+
+			/* last MB is for the BBT, not writable */
+			partition at 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";
+	};
diff --git a/target/linux/mvebu/image/cortex-a9.mk b/target/linux/mvebu/image/cortex-a9.mk
index d9defe880d..6bc6269da6 100644
--- a/target/linux/mvebu/image/cortex-a9.mk
+++ b/target/linux/mvebu/image/cortex-a9.mk
@@ -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
index 0000000000..92880b9971
--- /dev/null
+++ b/target/linux/mvebu/patches-4.14/105-build_new_dtbs.patch
@@ -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 \
-- 
2.14.1




More information about the Lede-dev mailing list