[OpenWrt-Devel] [PATCH 4/4] bcm63xx: add support for the Sercomm H500-s

Álvaro Fernández Rojas noltari at gmail.com
Thu Jun 4 03:03:24 EDT 2020


Hi Daniel,

Please, find my comments below:

> El 4 jun 2020, a las 0:48, Daniel González Cabanelas <dgcbueu at gmail.com> escribió:
> 
> Sercomm H500-s is an xDSL dual band wireless router based on Broadcom
> BCM63167 SoC
> 
> Hardware:
>   SoC:          Broadcom BCM63167
>   CPU:          BMIPS4350 V8.0, 400 MHz, 2 cores
>   Flash:        NAND 128 MiB
>   RAM:          DDR3 128 MiB
>   Ethernet:     4x 10/100/1000 Mbps
>   Switch:       BCM53134S
>   Wireless:     802.11b/g/n: BCM435f (integrated)
>                 802.11ac:    Quantenna QT3740BC (onboard SoC)
>   USB:          1x 2.0
>   LEDs/Buttons: 11x / 2x
> 
> Flash instruction, web UI:
>  1. Reset to defaults using the reset button if the admin password is 
>     unknown
>  2. Login into the web UI as admin.
>     Address:  http://192.168.0.1
>     User:     admin
>     Password: VF-ESad1018

VF-ESad1018? :P

>  3. Go to Settings -> Firmware Update, and select the Openwrt factory
>     firmware
>  4. Update the firmware.
>  5. Wait until it finish, the device will reboot with Openwrt installed
>     on the alternative image partitions keeping the stock firmware in 
>     the former.
> 
> Notes:
>  - The patch also adds support for the lowi version. Only the factory
>    firmware is different.
>  - The integrated Wifi in the Broadcom Soc isn't still supported. 
>  - The Quantenna 802.11ac wifi works ok, but needs to be configured with
>    the Quantenna client application. It can't be configured with Luci
>    nor any iw command since it's a separated subsystem linked via
>    ethernet.
> 
> Signed-off-by: Daniel González Cabanelas <dgcbueu at gmail.com>
> ---
> .../bcm63xx/base-files/etc/board.d/01_leds    |   3 +
> .../bcm63xx/base-files/etc/board.d/02_network |   3 +
> .../base-files/lib/upgrade/platform.sh        |   3 +-
> .../bcm63xx/dts/bcm63167-sercomm-h500s.dts    | 201 ++++++++++++++++++
> target/linux/bcm63xx/image/bcm63xx_nand.mk    |  53 +++++
> .../bcm63xx/patches-5.4/568-board-H500s.patch |  72 +++++++
> 6 files changed, 334 insertions(+), 1 deletion(-)
> create mode 100644 target/linux/bcm63xx/dts/bcm63167-sercomm-h500s.dts
> create mode 100644 target/linux/bcm63xx/patches-5.4/568-board-H500s.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 91d67f0c0b..5894108457 100755
> --- a/target/linux/bcm63xx/base-files/etc/board.d/01_leds
> +++ b/target/linux/bcm63xx/base-files/etc/board.d/01_leds
> @@ -100,6 +100,9 @@ sercomm,ad1018)
> sercomm,ad1018-nor)
> 	ucidef_set_led_netdev "wlan0" "WLAN" "AD1018:green:wifi" "wlan0"
> 	;;
> +sercomm,h500s)
> +	ucidef_set_led_netdev "wan" "WAN" "$model:green:internet" "eth0.2"
> +	;;
> telsey,cpva502plus)
> 	ucidef_set_led_netdev "lan" "LAN" "CPVA502+:amber:link" "eth0"
> 	;;
> 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 784af29cb4..30649b3abe 100755
> --- a/target/linux/bcm63xx/base-files/etc/board.d/02_network
> +++ b/target/linux/bcm63xx/base-files/etc/board.d/02_network
> @@ -142,6 +142,9 @@ sercomm,ad1018-nor)
> 	ucidef_add_switch "switch0" \
> 		"1:lan:3" "2:lan:2" "3:lan:1" "0:wan" "8t at eth0"
> 	;;
> +sercomm,h500s)
> +	ucidef_add_switch "switch0" "4:lan" "3:wan" "8t at eth0"
> +	;;

Here we’re only exposing the internal switch, can we add the external one to the DTS even if it’s commented out?

> sfr,neufbox-6-sercomm-r0)
> 	ucidef_add_switch "switch0" \
> 		"1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "9t at eth0"
> diff --git a/target/linux/bcm63xx/base-files/lib/upgrade/platform.sh b/target/linux/bcm63xx/base-files/lib/upgrade/platform.sh
> index 7d416297dd..cea66f63ef 100644
> --- a/target/linux/bcm63xx/base-files/lib/upgrade/platform.sh
> +++ b/target/linux/bcm63xx/base-files/lib/upgrade/platform.sh
> @@ -69,7 +69,8 @@ platform_do_upgrade() {
> 		comtrend,vr-3032u|\
> 		huawei,hg253s-v2|\
> 		netgear,dgnd3700-v2|\
> -		sercomm,ad1018)
> +		sercomm,ad1018|\
> +		sercomm,h500s)
> 			REQUIRE_IMAGE_METADATA=1
> 			cfe_jffs2_upgrade_tar "$1"
> 			;;
> diff --git a/target/linux/bcm63xx/dts/bcm63167-sercomm-h500s.dts b/target/linux/bcm63xx/dts/bcm63167-sercomm-h500s.dts
> new file mode 100644
> index 0000000000..5a999ef24e
> --- /dev/null
> +++ b/target/linux/bcm63xx/dts/bcm63167-sercomm-h500s.dts
> @@ -0,0 +1,201 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
> +/*
> + * Device Tree file for Sercomm H500-s
> + *
> + * Copyright (C) 2020 Daniel González Cabanelas <dgcbueu at gmail.com>
> + */
> +
> +/dts-v1/;
> +
> +#include "bcm63268.dtsi"
> +
> +#include <dt-bindings/input/input.h>
> +
> +/ {
> +	model = "Sercomm H500-s";
> +	compatible = "sercomm,h500s", "brcm,bcm63268";
> +
> +	aliases {
> +		led-boot = &led_power_green;
> +		led-failsafe = &led_power_red;
> +		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>;
> +
> +		wps {
> +			label = "wps";
> +			gpios = <&pinctrl 34 1>;
> +			linux,code = <KEY_WPS_BUTTON>;
> +			debounce-interval = <60>;
> +		};
> +
> +		reset {
> +			label = "reset";
> +			gpios = <&pinctrl 35 1>;
> +			linux,code = <KEY_RESTART>;
> +			debounce-interval = <60>;
> +		};
> +	};
> +};
> +
> +&leds {
> +	status = "ok";
> +
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&pinctrl_leds>;
> +
> +	led at 0 {
> +		reg = <0>;
> +		label = "h500s:red:mobile";
> +	};
> +
> +	led at 1 {
> +		reg = <1>;
> +		label = "h500s:green:mobile";
> +	};
> +
> +	led_power_red: led at 8 {
> +		reg = <8>;
> +		label = "h500s:red:power";
> +	};
> +
> +	led at 9 {
> +		reg = <9>;
> +		label = "h500s:green:wifi";
> +	};
> +
> +	led at 12 {
> +		reg = <12>;
> +		label = "h500s:red:phone";
> +	};
> +
> +	led at 13 {
> +		reg = <13>;
> +		label = "h500s:red:wifi";
> +	};
> +
> +	led at 14 {
> +		reg = <14>;
> +		label = "h500s:red:internet";
> +	};
> +
> +	led at 15 {
> +		reg = <15>;
> +		label = "h500s:green:internet";
> +	};
> +
> +	led at 16 {
> +		reg = <16>;
> +		label = "h500s:green:phone";
> +	};
> +
> +	led_power_green: led at 17 {
> +		reg = <17>;
> +		label = "h500s:green:power";
> +		default-state = "on";
> +	};
> +
> +	led at 23 {
> +		reg = <23>;
> +		label = "h500s:blue:mobile";
> +	};
> +};
> +
> +&nflash {
> +	status = "ok";
> +
> +	nandcs at 0 {
> +		compatible = "brcm,nandcs";
> +		reg = <0>;
> +
> +		pinctrl-names = "default";
> +		pinctrl-0 = <&pinctrl_nand>;
> +
> +		nand-on-flash-bbt;
> +		nand-ecc-strength = <4>;
> +		nand-ecc-step-size = <512>;
> +		brcm,nand-oob-sector-size = <64>;
> +
> +		partitions {
> +			compatible = "fixed-partitions";
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +
> +			partition at 0 {
> +				label = "cferom";
> +				reg = <0x0000000 0x0020000>; /* 128 KiB */
> +				read-only;
> +			};
> +
> +			partition at 20000 {
> +				label = "part_map";
> +				reg = <0x0020000 0x00a0000>; /* 640 KiB */
> +				read-only;
> +			};
> +
> +			partition at c0000 {
> +				label = "cferam1";
> +				reg = <0x00c0000 0x0140000>; /* 1280 KiB */
> +				read-only;
> +			};
> +
> +			partition at 200000 {
> +				label = "cferam2";
> +				reg = <0x0200000 0x0140000>; /* 1280 KiB */
> +				read-only;
> +			};
> +
> +			partition at 6920000 {
> +				label = "bootflag1";
> +				reg = <0x6920000 0x0140000>; /* 1280 KiB */
> +			};
> +
> +			partition at 6a60000 {
> +				label = "bootflag2";
> +				reg = <0x6a60000 0x0140000>; /* 1280 KiB */
> +			};
> +
> +			partition at 520000 {
> +				compatible = "sercomm,wfi";
> +				label = "wfi";
> +				reg = <0x0520000 0x6400000>; /* 2 images, 97152 KiB */
> +			};
> +
> +			partition at 6ba0000 {
> +				label = "xml_cfg";
> +				reg = <0x6ba0000 0x0280000>; /* 2560 KiB */
> +				read-only;
> +			};
> +
> +			partition at 6e20000 {
> +				label = "app_data";
> +				reg = <0x6e20000 0x0280000>; /* 2560 KiB */
> +				read-only;
> +			};
> +		};
> +	};
> +};
> +
> +&pinctrl {
> +	pinctrl_leds: leds {
> +		function = "led";
> +		pins = "gpio0",  "gpio1",  "gpio8",  "gpio9",
> +		       "gpio12", "gpio13", "gpio14", "gpio15",
> +		       "gpio16", "gpio17", "gpio23";
> +	};
> +};
> +
> +&uart0 {
> +	status = "ok";
> +};
> diff --git a/target/linux/bcm63xx/image/bcm63xx_nand.mk b/target/linux/bcm63xx/image/bcm63xx_nand.mk
> index 74f23f52af..5cc3f34f0c 100644
> --- a/target/linux/bcm63xx/image/bcm63xx_nand.mk
> +++ b/target/linux/bcm63xx/image/bcm63xx_nand.mk
> @@ -150,3 +150,56 @@ define Device/sercomm_ad1018
>   SERCOMM_VERSION := 1001
> endef
> TARGET_DEVICES += sercomm_ad1018
> +
> +define Device/sercomm_h500s
> +  $(Device/sercomm-nand)
> +  DEVICE_VENDOR := Sercomm
> +  DEVICE_MODEL := H500-s
> +  IMAGES := factory.img sysupgrade.bin

IMAGES is already set to factory.img and sysupgrade.bin, so you can drop this line.

> +  KERNEL := kernel-bin | append-dtb | lzma | cfe-jffs2-kernel $$(KERNEL_LOADADDR)
> +  CHIP_ID := 63268
> +  SOC := bcm63167
> +  BLOCKSIZE := 128k
> +  PAGESIZE := 2048
> +  SUBPAGESIZE := 512
> +  VID_HDR_OFFSET := 2048
> +  DEVICE_PACKAGES += $(B43_PACKAGES) $(USB2_PACKAGES)

B43_PACKAGES isn't really needed since internal wifi is not supported.

> +  SERCOMM_PID := \
> +    30 30 30 30 30 30 30 31 34 32 35 38 34 62 30 30 \
> +    30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 \
> +    30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 \
> +    30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 \
> +    30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 \
> +    30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 \
> +    30 30 30 30 33 34 31 37 30 30 30 30 30 30 30 30 \
> +    0D 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> +  SERCOMM_VERSION := 1001
> +endef
> +TARGET_DEVICES += sercomm_h500s
> +
> +define Device/sercomm_h500s_lowi
> +  $(Device/sercomm-nand)
> +  DEVICE_VENDOR := Sercomm
> +  DEVICE_MODEL := H500-s lowi

Maybe we could add a DEVICE_VARIANT instead of defining it on the DEVICE_MODEL?
DEVICE_VARIANT := Lowi

> +  DEVICE_DTS := bcm63167-sercomm-h500s
> +  IMAGES := factory.img sysupgrade.bin

IMAGES is already set to factory.img and sysupgrade.bin, so you can drop this line.

> +  KERNEL := kernel-bin | append-dtb | lzma | cfe-jffs2-kernel $$(KERNEL_LOADADDR)
> +  CHIP_ID := 63268
> +  SOC := bcm63167
> +  BLOCKSIZE := 128k
> +  PAGESIZE := 2048
> +  SUBPAGESIZE := 512
> +  VID_HDR_OFFSET := 2048
> +  DEVICE_PACKAGES += $(B43_PACKAGES) $(USB2_PACKAGES)

B43_PACKAGES isn't really needed since internal wifi is not supported.

> +  SERCOMM_PID := \
> +    30 30 30 30 30 30 30 31 34 33 34 62 33 31 30 30 \
> +    30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 \
> +    30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 \
> +    30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 \
> +    30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 \
> +    30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 \
> +    30 30 30 30 33 33 30 35 30 30 30 30 30 30 30 30 \
> +    0D 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> +  SERCOMM_VERSION := 1001
> +endef
> +TARGET_DEVICES += sercomm_h500s_lowi

I think you’re missing LOADER_ENTRY definition for both of the devices, since this device has its CFE loaded at 0x80a0000, which is now the lzma-loader address. You should probably add LOADER_ENTRY := 0x80010000 in order to get working ramdisks on these devices.

> diff --git a/target/linux/bcm63xx/patches-5.4/568-board-H500s.patch b/target/linux/bcm63xx/patches-5.4/568-board-H500s.patch
> new file mode 100644
> index 0000000000..f14e29bfba
> --- /dev/null
> +++ b/target/linux/bcm63xx/patches-5.4/568-board-H500s.patch
> @@ -0,0 +1,72 @@
> +--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
> ++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
> +@@ -2867,10 +2867,45 @@
> + 			},
> + 
> + 		},
> + 	},
> + };
> ++
> ++static struct board_info __initdata board_H500s = {
> ++	.name				= "BXK00C-1.6",
> ++	.expected_cpu_id		= 0x63268,
> ++
> ++	.has_pci			= 0,
> ++	.use_fallback_sprom		= 0,
> ++
> ++	.has_ehci0			= 1,
> ++	.has_ohci0			= 1,
> ++	.num_usbh_ports			= 1,
> ++
> ++	.has_enetsw			= 1,
> ++

NIT, can you remove this line?

> ++	.enetsw = {
> ++		.used_ports = {
> ++			[3] = {
> ++				.used   = 1,
> ++				.phy_id = 12,
> ++				.name   = "WAN",
> ++			},
> ++
> ++			[4] = {
> ++				.used = 1,
> ++				.phy_id = 0,
> ++				.bypass_link = 1,
> ++				.force_speed = 1000,
> ++				.force_duplex_full = 1,
> ++				.mii_override = 1,
> ++				.timing_sel = 1,
> ++				.name = "RGMII",
> ++			},
> ++		},
> ++	},
> ++};
> + #endif /* CONFIG_BCM63XX_CPU_63268 */
> + 
> + /*
> +  * all boards
> +  */
> +@@ -2981,10 +3016,11 @@
> + 	&board_963269bhr,
> + 	&board_VG8050,
> + 	&board_VR3032u,
> + 	&board_vw6339gu,
> + 	&board_BSKYB_63168,
> ++	&board_H500s,
> + #endif
> + };
> + 
> + static struct of_device_id const bcm963xx_boards_dt[] = {
> + #ifdef CONFIG_OF
> +@@ -3099,10 +3135,11 @@
> + 	{ .compatible = "brcm,bcm963268bu-p300", .data = &board_963268bu_p300, },
> + 	{ .compatible = "brcm,bcm963269bhr", .data = &board_963269bhr, },
> + 	{ .compatible = "comtrend,vg-8050", .data = &board_VG8050, },
> + 	{ .compatible = "comtrend,vr-3032u", .data = &board_VR3032u, },
> + 	{ .compatible = "inteno,vg50", .data = &board_vw6339gu, },
> ++	{ .compatible = "sercomm,h500s", .data = &board_H500s, },
> + 	{ .compatible = "sky,sr102", .data = &board_BSKYB_63168, },
> + #endif
> + #endif /* CONFIG_OF */
> + 	{ },
> + };
> -- 
> 2.27.0
> 
> 
> 
> 


_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list