bmips: bcm6358: add support for Huawei HG556a ver A

Specifications:
- SoC: Broadcom BCM6358 dual 300MHz MIPS
- Flash: 16MB NOR Spansion S29GL128P10
- RAM: 64MB DDR
- Ethernet: 4x 100M
- Wifi: Atheros AR9223
- 3x USB 2.0 port
- 4x Button
- 13x LED
- RJ11 2x FXS VoIP (unsupported)
- RJ11 xDSL (unsupported)

Install instructions:
- Assign static IP 192.168.1.100 to PC.
- Unplug the power source.
- Press the RESTART button at the router, don't release it yet!
- Plug the power source and wait at least 15 seconds.
- Release the RESTART button.
- Browse to http://192.168.1.1 with your PC.
- Upload the openwrt-bmips-bcm6358-huawei_hg556a-a-squashfs-cfe.bin file.
- Wait some minutes until the firmware upgrade completes.

Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
This commit is contained in:
Álvaro Fernández Rojas 2025-06-07 12:01:54 +02:00
parent 975f4de1c8
commit 5ab72cfc40
7 changed files with 338 additions and 247 deletions

View file

@ -6,6 +6,7 @@
board_config_update
case "$(board_name)" in
huawei,hg556a-a |\
huawei,hg556a-b)
ucidef_set_led_netdev "lan1" "LAN1" "green:lan1" "lan1"
ucidef_set_led_netdev "lan2" "LAN2" "green:lan2" "lan2"

View file

@ -5,6 +5,7 @@
board_config_update
case "$(board_name)" in
huawei,hg556a-a |\
huawei,hg556a-b)
ucidef_set_bridge_device switch
ucidef_set_interface_lan "lan1 lan2 lan3 lan4"

View file

@ -23,6 +23,9 @@ caldata_extract_swap() {
case "$FIRMWARE" in
"ath9k-eeprom-pci-0000:00:01.0.bin")
case "$(board_name)" in
huawei,hg556a-a)
caldata_extract_swap "cal_data" 0x9e000 0xeb8
;;
huawei,hg556a-b)
caldata_extract_swap "cal_data" 0x1e000 0xeb8
;;

View file

@ -0,0 +1,73 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include "bcm6358-huawei-hg556a.dtsi"
/ {
model = "Huawei EchoLife HG556a (version A)";
compatible = "huawei,hg556a-a", "brcm,bcm6358";
ath9k-leds {
compatible = "gpio-leds";
led-2 {
function = LED_FUNCTION_WLAN;
color = <LED_COLOR_ID_RED>;
gpios = <&ath9k 2 GPIO_ACTIVE_HIGH>;
linux,default-trigger = "phy0tpt";
};
};
};
&gpio_keys {
help {
label = "help";
gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
linux,code = <KEY_HELP>;
debounce-interval = <60>;
};
};
&gpio_leds {
led-0 {
label = "red:message";
gpios = <&gpio 0 GPIO_ACTIVE_LOW>;
};
led-1 {
label = "red:hspa";
gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
};
led-6 {
label = "all";
gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
default-state = "on";
};
led-12 {
label = "green:lan1";
gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
};
led-15 {
label = "green:lan2";
gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
};
};
&pci {
status = "okay";
ath9k: wifi@1,0 {
compatible = "pci168c,ff1d";
reg = <0x0800 0 0 0 0>;
qca,no-eeprom;
nvmem-cells = <&macaddr_cfe_6a0 1>;
nvmem-cell-names = "mac-address";
#gpio-cells = <2>;
gpio-controller;
};
};

View file

@ -1,122 +1,11 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include "bcm6358.dtsi"
#include "bcm6358-huawei-hg556a.dtsi"
/ {
model = "Huawei EchoLife HG556a (version B)";
compatible = "huawei,hg556a-b", "brcm,bcm6358";
aliases {
led-boot = &led_power_red;
led-failsafe = &led_power_red;
led-running = &led_power_red;
led-upgrade = &led_power_red;
};
keys {
compatible = "gpio-keys-polled";
poll-interval = <100>;
help {
label = "help";
gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
linux,code = <KEY_HELP>;
debounce-interval = <60>;
};
wlan {
label = "wlan";
gpios = <&gpio 9 GPIO_ACTIVE_LOW>;
linux,code = <KEY_WLAN>;
debounce-interval = <60>;
};
restart {
label = "restart";
gpios = <&gpio 10 GPIO_ACTIVE_LOW>;
linux,code = <KEY_RESTART>;
debounce-interval = <60>;
};
reset {
label = "reset";
gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
linux,code = <KEY_CONFIG>;
debounce-interval = <60>;
};
};
leds {
compatible = "gpio-leds";
led-0 {
label = "red:message";
gpios = <&gpio 0 GPIO_ACTIVE_LOW>;
};
led-1 {
label = "red:hspa";
gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
};
led-2 {
label = "red:dsl";
gpios = <&gpio 2 GPIO_ACTIVE_LOW>;
};
led_power_red: led-3 {
function = LED_FUNCTION_POWER;
color = <LED_COLOR_ID_RED>;
gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
};
led-6 {
label = "all";
gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
default-state = "on";
};
led-12 {
label = "green:lan1";
gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
};
led-13 {
label = "red:lan1";
gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
};
led-15 {
label = "green:lan2";
gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
};
led-22 {
label = "red:lan2";
gpios = <&gpio 22 GPIO_ACTIVE_LOW>;
};
led-23 {
label = "green:lan3";
gpios = <&gpio 23 GPIO_ACTIVE_LOW>;
};
led-26 {
label = "red:lan3";
gpios = <&gpio 26 GPIO_ACTIVE_LOW>;
};
led-27 {
label = "green:lan4";
gpios = <&gpio 27 GPIO_ACTIVE_LOW>;
};
led-28 {
label = "red:lan4";
gpios = <&gpio 28 GPIO_ACTIVE_LOW>;
};
};
ath9k-leds {
compatible = "gpio-leds";
@ -129,83 +18,41 @@
};
};
&ehci {
status = "okay";
};
&ethernet1 {
status = "okay";
nvmem-cells = <&macaddr_cfe_6a0 0>;
nvmem-cell-names = "mac-address";
phy-mode = "mii";
fixed-link {
speed = <100>;
full-duplex;
&gpio_keys {
help {
label = "help";
gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
linux,code = <KEY_HELP>;
debounce-interval = <60>;
};
};
&iudma {
status = "okay";
};
&mdio1 {
switch@1e {
compatible = "brcm,bcm5325";
reg = <30>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
label = "lan1";
phy-mode = "mii";
};
port@1 {
reg = <1>;
label = "lan2";
phy-mode = "mii";
};
port@2 {
reg = <2>;
label = "lan3";
phy-mode = "mii";
};
port@3 {
reg = <3>;
label = "lan4";
phy-mode = "mii";
};
port@5 {
reg = <5>;
label = "cpu";
phy-mode = "internal";
ethernet = <&ethernet1>;
fixed-link {
speed = <100>;
full-duplex;
};
};
};
&gpio_leds {
led-0 {
label = "red:message";
gpios = <&gpio 0 GPIO_ACTIVE_LOW>;
};
};
&ohci {
status = "okay";
led-1 {
label = "red:hspa";
gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
};
led-6 {
label = "all";
gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
default-state = "on";
};
led-12 {
label = "green:lan1";
gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
};
led-15 {
label = "green:lan2";
gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
};
};
&pci {
@ -224,66 +71,3 @@
gpio-controller;
};
};
&pflash {
status = "okay";
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "cfe";
reg = <0x000000 0x020000>;
read-only;
nvmem-layout {
compatible = "fixed-layout";
#address-cells = <1>;
#size-cells = <1>;
macaddr_cfe_6a0: macaddr@6a0 {
compatible = "mac-base";
reg = <0x6a0 0x6>;
#nvmem-cell-cells = <1>;
};
};
};
partition@20000 {
label = "firmware";
reg = <0x020000 0xec0000>;
compatible = "brcm,bcm963xx-imagetag";
};
cal_data: partition@ee0000 {
label = "cal_data";
reg = <0xee0000 0x100000>;
read-only;
nvmem-layout {
compatible = "fixed-layout";
#address-cells = <1>;
#size-cells = <1>;
cal_data_1e000: cal@1e000 {
reg = <0x1e000 0xeb8>;
};
};
};
partition@fe0000 {
label = "nvram";
reg = <0xfe0000 0x020000>;
};
};
};
&uart0 {
status = "okay";
};
&usbh {
status = "okay";
};

View file

@ -0,0 +1,215 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include "bcm6358.dtsi"
/ {
aliases {
led-boot = &led_power_red;
led-failsafe = &led_power_red;
led-running = &led_power_red;
led-upgrade = &led_power_red;
};
gpio_keys: keys {
compatible = "gpio-keys-polled";
poll-interval = <100>;
wlan {
label = "wlan";
gpios = <&gpio 9 GPIO_ACTIVE_LOW>;
linux,code = <KEY_WLAN>;
debounce-interval = <60>;
};
restart {
label = "restart";
gpios = <&gpio 10 GPIO_ACTIVE_LOW>;
linux,code = <KEY_RESTART>;
debounce-interval = <60>;
};
reset {
label = "reset";
gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
linux,code = <KEY_CONFIG>;
debounce-interval = <60>;
};
};
gpio_leds: leds {
compatible = "gpio-leds";
led-2 {
label = "red:dsl";
gpios = <&gpio 2 GPIO_ACTIVE_LOW>;
};
led_power_red: led-3 {
function = LED_FUNCTION_POWER;
color = <LED_COLOR_ID_RED>;
gpios = <&gpio 3 GPIO_ACTIVE_LOW>;
};
led-13 {
label = "red:lan1";
gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
};
led-22 {
label = "red:lan2";
gpios = <&gpio 22 GPIO_ACTIVE_LOW>;
};
led-23 {
label = "green:lan3";
gpios = <&gpio 23 GPIO_ACTIVE_LOW>;
};
led-26 {
label = "red:lan3";
gpios = <&gpio 26 GPIO_ACTIVE_LOW>;
};
led-27 {
label = "green:lan4";
gpios = <&gpio 27 GPIO_ACTIVE_LOW>;
};
led-28 {
label = "red:lan4";
gpios = <&gpio 28 GPIO_ACTIVE_LOW>;
};
};
};
&ehci {
status = "okay";
};
&ethernet1 {
status = "okay";
nvmem-cells = <&macaddr_cfe_6a0 0>;
nvmem-cell-names = "mac-address";
phy-mode = "mii";
fixed-link {
speed = <100>;
full-duplex;
};
};
&iudma {
status = "okay";
};
&mdio1 {
switch@1e {
compatible = "brcm,bcm5325";
reg = <30>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
label = "lan1";
phy-mode = "mii";
};
port@1 {
reg = <1>;
label = "lan2";
phy-mode = "mii";
};
port@2 {
reg = <2>;
label = "lan3";
phy-mode = "mii";
};
port@3 {
reg = <3>;
label = "lan4";
phy-mode = "mii";
};
port@5 {
reg = <5>;
label = "cpu";
phy-mode = "internal";
ethernet = <&ethernet1>;
fixed-link {
speed = <100>;
full-duplex;
};
};
};
};
};
&ohci {
status = "okay";
};
&pflash {
status = "okay";
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "cfe";
reg = <0x000000 0x020000>;
read-only;
nvmem-layout {
compatible = "fixed-layout";
#address-cells = <1>;
#size-cells = <1>;
macaddr_cfe_6a0: macaddr@6a0 {
compatible = "mac-base";
reg = <0x6a0 0x6>;
#nvmem-cell-cells = <1>;
};
};
};
partition@20000 {
label = "firmware";
reg = <0x020000 0xec0000>;
compatible = "brcm,bcm963xx-imagetag";
};
cal_data: partition@ee0000 {
label = "cal_data";
reg = <0xee0000 0x100000>;
read-only;
};
partition@fe0000 {
label = "nvram";
reg = <0xfe0000 0x020000>;
};
};
};
&uart0 {
status = "okay";
};
&usbh {
status = "okay";
};

View file

@ -1,5 +1,19 @@
# SPDX-License-Identifier: GPL-2.0-or-later
define Device/huawei_hg556a-a
$(Device/bcm63xx-cfe-legacy)
DEVICE_VENDOR := Huawei
DEVICE_MODEL := EchoLife HG556a
DEVICE_VARIANT := A
CHIP_ID := 6358
CFE_BOARD_ID := HW556
CFE_EXTRAS += --rsa-signature "EchoLife_HG556a" --tag-version 8
IMAGE_OFFSET := 0x20000
DEVICE_PACKAGES += $(USB2_PACKAGES) $(ATH9K_PACKAGES) \
kmod-leds-gpio
endef
TARGET_DEVICES += huawei_hg556a-a
define Device/huawei_hg556a-b
$(Device/bcm63xx-cfe-legacy)
DEVICE_VENDOR := Huawei