brcm63xx: add initial support for Netgear EVG2000

This patch adds support for the Netgear EVG2000 VoIP Gateway to the
bcm63xx targets.

This device was not sold to the general public, but rather is/was
provided by telcos to customers in Sweden, Australia, Singapore and
other parts of asia.

Known issues:
 - Unable to detect 53115 switch. This appear to be a problem with
probing for the PHY using MDIO and results in error 5. Doesn't seem to
be a problem with the configuration, and could use someone with
experience to have a look at it.
 - Uses the b43 driver as using the OpenWRT/LEDE broadcom-wl driver
fails to load the firmware for the 4322, so 802.11n is not supported.

More info on the device and the research can be found at:
https://wiki.openwrt.org/toh/netgear/evg2000
https://wikidevi.com/wiki/Netgear_EVG2000
https://github.com/Xotic750/mirror-lede/tree/evg2000
https://forum.openwrt.org/viewtopic.php?id=63950

Signed-off-by: Graham Fairweather <xotic750@gmail.com>
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
This commit is contained in:
Graham Fairweather 2016-05-23 00:56:23 +02:00 committed by Álvaro Fernández Rojas
parent a529b41cff
commit 532c3f3218
8 changed files with 195 additions and 1 deletions

View File

@ -24,6 +24,13 @@ dgnd3700v1_dgnd3800b)
ucidef_set_led_usbdev "usb1" "USB1" "DGND3700v1_3800B:green:usb-back" "1-1" ucidef_set_led_usbdev "usb1" "USB1" "DGND3700v1_3800B:green:usb-back" "1-1"
ucidef_set_led_usbdev "usb2" "USB2" "DGND3700v1_3800B:green:usb-front" "1-2" ucidef_set_led_usbdev "usb2" "USB2" "DGND3700v1_3800B:green:usb-front" "1-2"
;; ;;
evg2000)
ucidef_set_led_netdev "lan" "LAN" "EVG2000:green:lan" "eth0"
ucidef_set_led_netdev "wan" "WAN" "EVG2000:green:wan" "eth1"
ucidef_set_led_netdev "wlan0" "WIFI" "EVG2000:green:wireless" "wlan0"
ucidef_set_led_usbdev "usb1" "USB1" "EVG2000:green:voip1" "1-1"
ucidef_set_led_usbdev "usb2" "USB2" "EVG2000:green:voip2" "1-2"
;;
fast2704n) fast2704n)
ucidef_set_led_netdev "wan" "WAN" "F@ST2704N:green:inet" "eth0.2" ucidef_set_led_netdev "wan" "WAN" "F@ST2704N:green:inet" "eth0.2"
;; ;;

View File

@ -11,6 +11,7 @@ board_config_update
case "$(brcm63xx_board_name)" in case "$(brcm63xx_board_name)" in
cvg834g |\ cvg834g |\
evg2000 |\
rta770bw |\ rta770bw |\
rta770w |\ rta770w |\
spw303v |\ spw303v |\

View File

@ -70,6 +70,9 @@ set_state() {
dgnd3700v1_dgnd3800b) dgnd3700v1_dgnd3800b)
status_led="DGND3700v1_3800B:green:power" status_led="DGND3700v1_3800B:green:power"
;; ;;
evg2000)
status_led="EVG2000:green:power"
;;
fast2504n) fast2504n)
status_led="fast2504n:green:ok" status_led="fast2504n:green:ok"
;; ;;

View File

@ -21,6 +21,7 @@ case "$(brcm63xx_board_name)" in
cpva642 |\ cpva642 |\
ct-6373 |\ ct-6373 |\
dsl-274xb-f |\ dsl-274xb-f |\
evg2000 |\
hg622 |\ hg622 |\
magic |\ magic |\
p870hw-51a_v2 |\ p870hw-51a_v2 |\
@ -37,4 +38,3 @@ case "$(brcm63xx_board_name)" in
do_fixcrc do_fixcrc
;; ;;
esac esac

View File

@ -183,6 +183,9 @@ brcm63xx_dt_detect() {
"Netgear DGND3700v1/DGND3800B") "Netgear DGND3700v1/DGND3800B")
board_name="dgnd3700v1_dgnd3800b" board_name="dgnd3700v1_dgnd3800b"
;; ;;
"Netgear EVG2000")
board_name="evg2000"
;;
"NuCom R5010UN v2") "NuCom R5010UN v2")
board_name="r5010un_v2" board_name="r5010un_v2"
;; ;;

View File

@ -0,0 +1,103 @@
/dts-v1/;
#include "bcm6368.dtsi"
#include <dt-bindings/input/input.h>
/ {
model = "Netgear EVG2000";
compatible = "netgear,evg2000", "brcm,bcm6368";
gpio-keys-polled {
compatible = "gpio-keys-polled";
#address-cells = <1>;
#size-cells = <0>;
poll-interval = <20>;
debounce-interval = <60>;
reset {
label = "reset";
gpios = <&gpio0 25 1>;
linux,code = <KEY_RESTART>;
};
wps {
label = "wps";
gpios = <&gpio0 26 1>;
linux,code = <KEY_WPS_BUTTON>;
};
};
gpio-leds {
compatible = "gpio-leds";
voip1_green {
label = "EVG2000:green:voip1";
gpios = <&gpio0 14 1>;
};
voip2_green {
label = "EVG2000:green:voip2";
gpios = <&gpio0 2 1>;
};
inet_red {
label = "EVG2000:red:inet";
gpios = <&gpio0 4 1>;
};
inet_green {
label = "EVG2000:green:inet";
gpios = <&gpio0 5 1>;
};
usb_green {
label = "EVG2000:green:usb";
gpios = <&gpio0 15 1>;
};
power_green {
label = "EVG2000:green:power";
gpios = <&gpio0 22 1>;
default-state = "on";
};
power_red {
label = "EVG2000:red:power";
gpios = <&gpio0 23 1>;
};
lan_green {
label = "EVG2000:green:lan";
gpios = <&gpio0 24 1>;
};
wireless_green {
label = "EVG2000:green:wireless";
gpios = <&gpio0 26 1>;
};
wan_green {
label = "EVG2000:green:wan";
gpios = <&gpio0 27 1>;
};
};
};
&pflash {
status = "ok";
linux,part-probe = "bcm63xxpart";
cfe@0 {
label = "CFE";
reg = <0x00000000 0x00020000>;
read-only;
};
linux@20000 {
label = "linux";
reg = <0x00020000 0x00f40000>;
};
board_data@f60000 {
label = "board_data";
reg = <0x00f60000 0x00080000>;
read-only;
};
nvram@fe0000 {
label = "nvram";
reg = <0x00fe0000 0x00020000>;
};
};

View File

@ -769,6 +769,21 @@ define Device/DGND3800B
endef endef
TARGET_DEVICES += DGND3800B TARGET_DEVICES += DGND3800B
define Device/EVG2000
$(Device/bcm63xx_netgear)
IMAGES := factory.chk sysupgrade.bin
DEVICE_TITLE := Netgear EVG2000
DEVICE_DTS := evg2000
CFE_BOARD_ID := 96369PVG
CFE_CHIP_ID := 6368
CFE_EXTRAS := --image-offset 0x20000 --block-size 0x20000
NETGEAR_BOARD_ID := U12H154T90_NETGEAR
NETGEAR_REGION := 1
DEVICE_PACKAGES := \
$(B43_PACKAGES) $(USB2_PACKAGES)
endef
TARGET_DEVICES += EVG2000
### NuCom ### ### NuCom ###
define Device/R5010UNv2 define Device/R5010UNv2
$(Device/bcm63xx) $(Device/bcm63xx)

View File

@ -0,0 +1,62 @@
--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
@@ -2014,6 +2014,43 @@ static struct board_info __initdata boar
.num_spis = ARRAY_SIZE(DGND3700v1_3800B_spi_devices),
};
+static struct sprom_fixup __initdata EVG2000_fixups[] = {
+ { .offset = 219, .value = 0xec08 },
+};
+
+static struct board_info __initdata board_EVG2000 = {
+ .name = "96369PVG",
+ .expected_cpu_id = 0x6368,
+
+ .has_uart0 = 1,
+ .has_pci = 1,
+ .has_ohci0 = 1,
+ .has_ehci0 = 1,
+ .num_usbh_ports = 2,
+
+ .has_enetsw = 1,
+ .enetsw = {
+ .used_ports = {
+ [5] = {
+ .used = 1,
+ .phy_id = 0xff,
+ .bypass_link = 1,
+ .force_speed = 1000,
+ .force_duplex_full = 1,
+ .name = "RGMII",
+ },
+ },
+ },
+ .use_fallback_sprom = 1,
+ .fallback_sprom = {
+ .type = SPROM_BCM4322,
+ .pci_bus = 0,
+ .pci_dev = 1,
+ .board_fixups = EVG2000_fixups,
+ .num_board_fixups = ARRAY_SIZE(EVG2000_fixups),
+ },
+};
+
static struct board_info __initdata board_HG655b = {
.name = "HW65x",
.expected_cpu_id = 0x6368,
@@ -2614,6 +2651,7 @@ static const struct board_info __initcon
&board_96368mvwg,
&board_96368mvngr,
&board_DGND3700v1_3800B,
+ &board_EVG2000,
&board_HG622,
&board_HG655b,
&board_P870HW51A_V2,
@@ -2726,6 +2764,7 @@ static struct of_device_id const bcm963x
{ .compatible = "huawei,hg622", .data = &board_HG622, },
{ .compatible = "huawei,hg655b", .data = &board_HG655b, },
{ .compatible = "netgear,dgnd3700v1", .data = &board_DGND3700v1_3800B, },
+ { .compatible = "netgear,evg2000", .data = &board_EVG2000, },
{ .compatible = "zyxel,p870hw-51a-v2", .data = &board_P870HW51A_V2, },
#endif
#ifdef CONFIG_BCM63XX_CPU_63268