From 367a30389d298948a3c4867dd0261bb942371147 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Rojas?= Date: Thu, 14 May 2020 18:19:35 +0200 Subject: [PATCH] bcm63xx: add support for Comtrend VR-3032u MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Álvaro Fernández Rojas --- .../bcm63xx/base-files/etc/board.d/01_leds | 3 + .../bcm63xx/base-files/etc/board.d/02_network | 4 + .../base-files/lib/upgrade/platform.sh | 60 +++++- .../dts/bcm63168-comtrend-vr-3032u.dts | 185 ++++++++++++++++++ target/linux/bcm63xx/image/bcm63xx_nand.mk | 18 ++ .../patches-5.4/599-board-VR-3032u.patch | 63 ++++++ 6 files changed, 331 insertions(+), 2 deletions(-) create mode 100644 target/linux/bcm63xx/dts/bcm63168-comtrend-vr-3032u.dts create mode 100644 target/linux/bcm63xx/patches-5.4/599-board-VR-3032u.patch diff --git a/target/linux/bcm63xx/base-files/etc/board.d/01_leds b/target/linux/bcm63xx/base-files/etc/board.d/01_leds index dd1c565bb9..3f73d914f9 100755 --- a/target/linux/bcm63xx/base-files/etc/board.d/01_leds +++ b/target/linux/bcm63xx/base-files/etc/board.d/01_leds @@ -30,6 +30,9 @@ bt,home-hub-2-a) comtrend,ar-5315u) ucidef_set_led_usbdev "usb" "USB" "AR-5315u:green:usb" "1-1" ;; +comtrend,vr-3032u) + ucidef_set_led_usbdev "usb" "USB" "vr-3032u:green:usb" "1-1" + ;; huawei,echolife-hg553) ucidef_set_led_netdev "lan" "LAN" "HW553:blue:lan" "eth0" ucidef_set_led_usbdev "usb1" "USB1" "HW553:red:hspa" "1-1" diff --git a/target/linux/bcm63xx/base-files/etc/board.d/02_network b/target/linux/bcm63xx/base-files/etc/board.d/02_network index 7fa1514b4f..7203b1c3fc 100755 --- a/target/linux/bcm63xx/base-files/etc/board.d/02_network +++ b/target/linux/bcm63xx/base-files/etc/board.d/02_network @@ -99,6 +99,10 @@ sagem,fast-2704n) ucidef_add_switch "switch0" \ "0:lan:4" "1:lan:3" "2:lan:2" "3:lan:1" "8t@eth0" ;; +comtrend,vr-3032u) + ucidef_add_switch "switch0" \ + "0:lan:2" "1:lan:3" "2:lan:4" "3:lan:1" "8t@eth0" + ;; comtrend,wap-5813n) ucidef_add_switch "switch0" \ "0:lan" "1:lan" "2:lan" "3:lan" "4:wan" "5t@eth0" diff --git a/target/linux/bcm63xx/base-files/lib/upgrade/platform.sh b/target/linux/bcm63xx/base-files/lib/upgrade/platform.sh index 5c9e2c25f7..0debff28bb 100644 --- a/target/linux/bcm63xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/bcm63xx/base-files/lib/upgrade/platform.sh @@ -1,9 +1,19 @@ PART_NAME=linux +REQUIRE_IMAGE_METADATA=0 + platform_check_image() { [ "$#" -gt 1 ] && return 1 + + case "$(board_name)" in + comtrend,vr-3032u) + # NAND sysupgrade + return 0 + ;; + esac + case "$(get_magic_word "$1")" in 3600|3700|3800) - # 6348GW-11 boards use openwrt-96348GW-11-squashfs-cfe.bin files + # CFE tag versions return 0 ;; *) @@ -13,4 +23,50 @@ platform_check_image() { esac } -# use default for platform_do_upgrade() +cfe_jffs2_upgrade_tar() { + local tar_file="$1" + local kernel_mtd="$(find_mtd_index $CI_KERNPART)" + + if [ -z "$kernel_mtd" ]; then + echo "$CI_KERNPART partition not found" + return 1 + fi + + local board_dir=$(tar tf $tar_file | grep -m 1 '^sysupgrade-.*/$') + board_dir=${board_dir%/} + + local kernel_length=$(tar xf $tar_file ${board_dir}/kernel -O | wc -c 2> /dev/null) + local rootfs_length=$(tar xf $tar_file ${board_dir}/root -O | wc -c 2> /dev/null) + + if [ "$kernel_length" = 0 ]; then + echo "kernel cannot be empty" + return 1 + fi + + flash_erase -j /dev/mtd${kernel_mtd} 0 0 + tar xf $tar_file ${board_dir}/kernel -O | nandwrite /dev/mtd${kernel_mtd} - + + local rootfs_type="$(identify_tar "$tar_file" ${board_dir}/root)" + + nand_upgrade_prepare_ubi "$rootfs_length" "$rootfs_type" "0" "0" + + local ubidev="$( nand_find_ubi "$CI_UBIPART" )" + + local root_ubivol="$(nand_find_volume $ubidev $CI_ROOTPART)" + tar xf $tar_file ${board_dir}/root -O | \ + ubiupdatevol /dev/$root_ubivol -s $rootfs_length - + + nand_do_upgrade_success +} + +platform_do_upgrade() { + case "$(board_name)" in + comtrend,vr-3032u) + REQUIRE_IMAGE_METADATA=1 + cfe_jffs2_upgrade_tar "$1" + ;; + *) + default_do_upgrade "$1" + ;; + esac +} diff --git a/target/linux/bcm63xx/dts/bcm63168-comtrend-vr-3032u.dts b/target/linux/bcm63xx/dts/bcm63168-comtrend-vr-3032u.dts new file mode 100644 index 0000000000..cc96c403b6 --- /dev/null +++ b/target/linux/bcm63xx/dts/bcm63168-comtrend-vr-3032u.dts @@ -0,0 +1,185 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +/dts-v1/; + +#include "bcm63268.dtsi" + +#include + +/ { + model = "Comtrend VR-3032u"; + compatible = "comtrend,vr-3032u", "brcm,bcm63268"; + + aliases { + led-boot = &led_power_green; + led-failsafe = &led_power_green; + led-running = &led_power_green; + led-upgrade = &led_power_green; + }; + + chosen { + bootargs = "rootfstype=squashfs,ubifs noinitrd console=ttyS0,115200"; + stdout-path = "serial0:115200n8"; + }; + + keys { + compatible = "gpio-keys-polled"; + #address-cells = <1>; + #size-cells = <0>; + poll-interval = <20>; + + reset { + label = "reset"; + gpios = <&pinctrl 33 1>; + linux,code = ; + debounce-interval = <60>; + }; + + wps { + label = "wps"; + gpios = <&pinctrl 34 1>; + linux,code = ; + debounce-interval = <60>; + }; + }; +}; + +&leds { + status = "okay"; + brcm,serial-leds; + brcm,serial-dat-low; + brcm,serial-shift-inv; + + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_serial_led>; + + led@0 { + /* GPHY0 Spd 0 */ + reg = <0>; + brcm,hardware-controlled; + brcm,link-signal-sources = <0>; + }; + + led@1 { + /* GPHY0 Spd 1 */ + reg = <1>; + brcm,hardware-controlled; + brcm,link-signal-sources = <1>; + }; + + led@2 { + reg = <2>; + active-low; + label = "vr-3032u:red:inet"; + }; + + led@3 { + reg = <3>; + active-low; + label = "vr-3032u:green:dsl"; + }; + + led@4 { + reg = <4>; + active-low; + label = "vr-3032u:green:usb"; + }; + + led@7 { + reg = <7>; + active-low; + label = "vr-3032u:green:wps"; + }; + + led@8 { + reg = <8>; + active-low; + label = "vr-3032u:green:inet"; + }; + + led@9 { + /* EPHY0 Act */ + reg = <9>; + brcm,hardware-controlled; + }; + + led@10 { + /* EPHY1 Act */ + reg = <10>; + brcm,hardware-controlled; + }; + + led@11 { + /* EPHY2 Act */ + reg = <11>; + brcm,hardware-controlled; + }; + + led@12 { + /* GPHY0 Act */ + reg = <12>; + brcm,hardware-controlled; + }; + + led@13 { + /* EPHY0 Spd */ + reg = <13>; + brcm,hardware-controlled; + }; + + led@14 { + /* EPHY1 Spd */ + reg = <14>; + brcm,hardware-controlled; + }; + + led@15 { + /* EPHY2 Spd */ + reg = <15>; + brcm,hardware-controlled; + }; + + led_power_green: led@20 { + reg = <20>; + active-low; + label = "vr-3032u:green:power"; + default-state = "on"; + }; +}; + +&nflash { + status = "okay"; + + nandcs@0 { + compatible = "brcm,nandcs"; + #size-cells = <1>; + #address-cells = <1>; + reg = <0>; + nand-ecc-step-size = <512>; + nand-ecc-strength = <15>; + nand-on-flash-bbt; + brcm,nand-oob-sector-size = <64>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + label = "cferom"; + reg = <0x0000000 0x0020000>; + read-only; + }; + + partition@20000 { + compatible = "brcm,wfi"; + label = "wfi"; + reg = <0x0020000 0x7ee0000>; + }; + }; + }; +}; + +&uart0 { + status = "okay"; +}; diff --git a/target/linux/bcm63xx/image/bcm63xx_nand.mk b/target/linux/bcm63xx/image/bcm63xx_nand.mk index 8e733f2b23..5be27a3f75 100644 --- a/target/linux/bcm63xx/image/bcm63xx_nand.mk +++ b/target/linux/bcm63xx/image/bcm63xx_nand.mk @@ -33,3 +33,21 @@ define Device/bcm63xx-nand DEVICE_PACKAGES += nand-utils SUPPORTED_DEVICES := $(subst _,$(comma),$(1)) endef + +### Comtrend ### +define Device/comtrend_vr-3032u + $(Device/bcm63xx-nand) + DEVICE_VENDOR := Comtrend + DEVICE_MODEL := VR-3032u + CFE_CHIP_ID := 63268 + SOC := bcm63168 + CFE_RAM_FILE := comtrend,vr-3032u/cferam.000 + CFE_RAM_JFFS2_NAME := cferam.000 + BLOCKSIZE := 128k + PAGESIZE := 2048 + SUBPAGESIZE := 512 + VID_HDR_OFFSET := 2048 + DEVICE_PACKAGES += $(USB2_PACKAGES) + CFE_WFI_FLASH_TYPE := 3 +endef +TARGET_DEVICES += comtrend_vr-3032u diff --git a/target/linux/bcm63xx/patches-5.4/599-board-VR-3032u.patch b/target/linux/bcm63xx/patches-5.4/599-board-VR-3032u.patch new file mode 100644 index 0000000000..fa63150a1d --- /dev/null +++ b/target/linux/bcm63xx/patches-5.4/599-board-VR-3032u.patch @@ -0,0 +1,63 @@ +--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c ++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c +@@ -2610,6 +2610,44 @@ static struct board_info __initdata boar + }, + }; + ++static struct board_info __initdata board_VR3032u = { ++ .name = "963168M-1841N1", ++ .expected_cpu_id = 0x63268, ++ ++ .has_ehci0 = 1, ++ .has_ohci0 = 1, ++ .num_usbh_ports = 1, ++ ++ .has_enetsw = 1, ++ .enetsw = { ++ .used_ports = { ++ [0] = { ++ .used = 1, ++ .phy_id = 1, ++ .name = "LAN2", ++ }, ++ ++ [1] = { ++ .used = 1, ++ .phy_id = 2, ++ .name = "LAN3", ++ }, ++ ++ [2] = { ++ .used = 1, ++ .phy_id = 3, ++ .name = "LAN4", ++ }, ++ ++ [3] = { ++ .used = 1, ++ .phy_id = 4, ++ .name = "LAN1", ++ }, ++ }, ++ }, ++}; ++ + static struct board_info __initdata board_vw6339gu = { + .name = "VW6339GU", + .expected_cpu_id = 0x63268, +@@ -2804,6 +2842,7 @@ static const struct board_info __initcon + #ifdef CONFIG_BCM63XX_CPU_63268 + &board_963268bu_p300, + &board_963269bhr, ++ &board_VR3032u, + &board_vw6339gu, + &board_BSKYB_63168, + #endif +@@ -2917,6 +2956,7 @@ static struct of_device_id const bcm963x + #ifdef CONFIG_BCM63XX_CPU_63268 + { .compatible = "brcm,bcm963268bu-p300", .data = &board_963268bu_p300, }, + { .compatible = "brcm,bcm963269bhr", .data = &board_963269bhr, }, ++ { .compatible = "comtrend,vr-3032u", .data = &board_VR3032u, }, + { .compatible = "inteno,vg50", .data = &board_vw6339gu, }, + { .compatible = "sky,sr102", .data = &board_BSKYB_63168, }, + #endif -- 2.25.1