Hi Adrian,

> El 4 jun 2020, a las 10:16, Adrian Schmutzler <[email protected]> 
> escribió:
> 
> Hi,
> 
>> -----Original Message-----
>> From: openwrt-devel [mailto:[email protected]]
>> On Behalf Of Daniel González Cabanelas
>> Sent: Donnerstag, 4. Juni 2020 00:48
>> To: [email protected]
>> Cc: [email protected]
>> Subject: [OpenWrt-Devel] [PATCH 4/4] bcm63xx: add support for the
>> Sercomm H500-s
>> 
>> 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
>>  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 <[email protected]>
>> ---
>> .../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@eth0"
>>      ;;
>> +sercomm,h500s)
>> +    ucidef_add_switch "switch0" "4:lan" "3:wan" "8t@eth0"
>> +    ;;
>> sfr,neufbox-6-sercomm-r0)
>>      ucidef_add_switch "switch0" \
>>              "1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "9t@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 <[email protected]>  */
>> +
>> +/dts-v1/;
>> +
>> +#include "bcm63268.dtsi"
>> +
>> +#include <dt-bindings/input/input.h>
>> +
>> +/ {
>> +    model = "Sercomm H500-s";
>> +    compatible = "sercomm,h500s", "brcm,bcm63268";
> 
> If the model name is H500-s, then the compatible, device node name etc. 
> should also be "sercomm,h500-s"
> 
>> +
>> +    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";
> 
> ok -> okay
> 
>> +
>> +    pinctrl-names = "default";
>> +    pinctrl-0 = <&pinctrl_leds>;
>> +
>> +    led@0 {
> 
> As stated earlier, it's common in OpenWrt to use the relevant parts of the 
> label for the node name, i.e. "mobile_red" or something similar in this case.
> 
> I noticed that Noltari also used this notation here during  a recent change, 
> so maybe he can give an update if the old common syntax shouldn't be used for 
> this setup.
> 
>> +            reg = <0>;
>> +            label = "h500s:red:mobile";
>> +    };
>> +
>> +    led@1 {
>> +            reg = <1>;
>> +            label = "h500s:green:mobile";
>> +    };
>> +
>> +    led_power_red: led@8 {
>> +            reg = <8>;
>> +            label = "h500s:red:power";
>> +    };
>> +
>> +    led@9 {
>> +            reg = <9>;
>> +            label = "h500s:green:wifi";
>> +    };
>> +
>> +    led@12 {
>> +            reg = <12>;
>> +            label = "h500s:red:phone";
>> +    };
>> +
>> +    led@13 {
>> +            reg = <13>;
>> +            label = "h500s:red:wifi";
>> +    };
>> +
>> +    led@14 {
>> +            reg = <14>;
>> +            label = "h500s:red:internet";
>> +    };
>> +
>> +    led@15 {
>> +            reg = <15>;
>> +            label = "h500s:green:internet";
>> +    };
>> +
>> +    led@16 {
>> +            reg = <16>;
>> +            label = "h500s:green:phone";
>> +    };
>> +
>> +    led_power_green: led@17 {
>> +            reg = <17>;
>> +            label = "h500s:green:power";
>> +            default-state = "on";
>> +    };
>> +
>> +    led@23 {
>> +            reg = <23>;
>> +            label = "h500s:blue:mobile";
>> +    };
>> +};
>> +
>> +&nflash {
>> +    status = "ok";
> 
> okay
> 
>> +
>> +    nandcs@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@0 {
>> +                            label = "cferom";
>> +                            reg = <0x0000000 0x0020000>; /* 128 KiB */
> 
> Personally, I don't think the size comments are necessary, and would drop 
> them completely.
> 
>> +                            read-only;
>> +                    };
>> +
>> +                    partition@20000 {
>> +                            label = "part_map";
>> +                            reg = <0x0020000 0x00a0000>; /* 640 KiB */
>> +                            read-only;
>> +                    };
>> +
>> +                    partition@c0000 {
>> +                            label = "cferam1";
>> +                            reg = <0x00c0000 0x0140000>; /* 1280 KiB */
>> +                            read-only;
>> +                    };
>> +
>> +                    partition@200000 {
>> +                            label = "cferam2";
>> +                            reg = <0x0200000 0x0140000>; /* 1280 KiB */
>> +                            read-only;
>> +                    };
>> +
>> +                    partition@6920000 {
>> +                            label = "bootflag1";
>> +                            reg = <0x6920000 0x0140000>; /* 1280 KiB */
>> +                    };
>> +
>> +                    partition@6a60000 {
>> +                            label = "bootflag2";
>> +                            reg = <0x6a60000 0x0140000>; /* 1280 KiB */
>> +                    };
>> +
>> +                    partition@520000 {
>> +                            compatible = "sercomm,wfi";
>> +                            label = "wfi";
>> +                            reg = <0x0520000 0x6400000>; /* 2 images,
>> 97152 KiB */
>> +                    };
> 
> Can somebody enlighten me why this ordering is used (also in other recent 
> patches)?

These bootflag partitions indicate which rootfs is being booted (the one with 
the highest number).
The mtdsplit driver relies on these partitions to read both bootflags and 
create the kernel/rootfs partitions accordingly:
https://github.com/openwrt/openwrt/blob/master/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_bcm_wfi.c#L423
Therefore, the partitions must be defined before the WFI partition, since 
defining them after the WFI partition would fail when calling 
get_mtd_device_nm().

> 
>> +
>> +                    partition@6ba0000 {
>> +                            label = "xml_cfg";
>> +                            reg = <0x6ba0000 0x0280000>; /* 2560 KiB */
>> +                            read-only;
>> +                    };
>> +
>> +                    partition@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";
> 
> okay
> 
>> +};
>> 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
> 
> As stated above, this should be sercomm_h500-s
> 
>> +  $(Device/sercomm-nand)
>> +  DEVICE_VENDOR := Sercomm
>> +  DEVICE_MODEL := H500-s
>> +  IMAGES := factory.img sysupgrade.bin
>> +  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)
>> +  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
> 
> Should be sercomm_h500-s-lowi then.
> 
>> +  $(Device/sercomm-nand)
>> +  DEVICE_VENDOR := Sercomm
>> +  DEVICE_MODEL := H500-s lowi
> 
> I agree with the device variant.
> 
>> +  DEVICE_DTS := bcm63167-sercomm-h500s
> 
> Classic sysupgrade won't work with this approach (as SUPPORTED_DEVICES would 
> not match compatible here), but I don't think that's relevant for bcm63xx?
> 
> Personally, I'd prefer a DTSI and separate DTSes for both devices, so the 
> compatible can be matched with the device name.
> 
> Best
> 
> Adrian
> 
>> +  IMAGES := factory.img sysupgrade.bin
>> +  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)
>> +  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
>> 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,
>> ++
>> ++   .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
>> [email protected]
>> https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Best regards,
Álvaro.


_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to