From: Graham Fairweather Date: Sun, 22 May 2016 22:56:23 +0000 (+0200) Subject: brcm63xx: add initial support for Netgear EVG2000 X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=532c3f3218ef97a12e7a178207031e4feac593ff;p=openwrt%2Fstaging%2Fadrian.git 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 Signed-off-by: Álvaro Fernández Rojas --- diff --git a/target/linux/brcm63xx/base-files/etc/board.d/01_leds b/target/linux/brcm63xx/base-files/etc/board.d/01_leds index 8339254b75..4163214732 100755 --- a/target/linux/brcm63xx/base-files/etc/board.d/01_leds +++ b/target/linux/brcm63xx/base-files/etc/board.d/01_leds @@ -24,6 +24,13 @@ dgnd3700v1_dgnd3800b) 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" ;; +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) ucidef_set_led_netdev "wan" "WAN" "F@ST2704N:green:inet" "eth0.2" ;; diff --git a/target/linux/brcm63xx/base-files/etc/board.d/02_network b/target/linux/brcm63xx/base-files/etc/board.d/02_network index f96da088f2..83367c1997 100755 --- a/target/linux/brcm63xx/base-files/etc/board.d/02_network +++ b/target/linux/brcm63xx/base-files/etc/board.d/02_network @@ -11,6 +11,7 @@ board_config_update case "$(brcm63xx_board_name)" in cvg834g |\ +evg2000 |\ rta770bw |\ rta770w |\ spw303v |\ diff --git a/target/linux/brcm63xx/base-files/etc/diag.sh b/target/linux/brcm63xx/base-files/etc/diag.sh index b8649646e4..6ac2459c92 100644 --- a/target/linux/brcm63xx/base-files/etc/diag.sh +++ b/target/linux/brcm63xx/base-files/etc/diag.sh @@ -70,6 +70,9 @@ set_state() { dgnd3700v1_dgnd3800b) status_led="DGND3700v1_3800B:green:power" ;; + evg2000) + status_led="EVG2000:green:power" + ;; fast2504n) status_led="fast2504n:green:ok" ;; diff --git a/target/linux/brcm63xx/base-files/etc/uci-defaults/09_fix_crc b/target/linux/brcm63xx/base-files/etc/uci-defaults/09_fix_crc index 70dbe2a837..1201168feb 100644 --- a/target/linux/brcm63xx/base-files/etc/uci-defaults/09_fix_crc +++ b/target/linux/brcm63xx/base-files/etc/uci-defaults/09_fix_crc @@ -21,6 +21,7 @@ case "$(brcm63xx_board_name)" in cpva642 |\ ct-6373 |\ dsl-274xb-f |\ + evg2000 |\ hg622 |\ magic |\ p870hw-51a_v2 |\ @@ -37,4 +38,3 @@ case "$(brcm63xx_board_name)" in do_fixcrc ;; esac - diff --git a/target/linux/brcm63xx/base-files/lib/brcm63xx.sh b/target/linux/brcm63xx/base-files/lib/brcm63xx.sh index a2d6519aa2..9cc0b2b570 100755 --- a/target/linux/brcm63xx/base-files/lib/brcm63xx.sh +++ b/target/linux/brcm63xx/base-files/lib/brcm63xx.sh @@ -183,6 +183,9 @@ brcm63xx_dt_detect() { "Netgear DGND3700v1/DGND3800B") board_name="dgnd3700v1_dgnd3800b" ;; + "Netgear EVG2000") + board_name="evg2000" + ;; "NuCom R5010UN v2") board_name="r5010un_v2" ;; diff --git a/target/linux/brcm63xx/dts/evg2000.dts b/target/linux/brcm63xx/dts/evg2000.dts new file mode 100644 index 0000000000..cf324b2c5d --- /dev/null +++ b/target/linux/brcm63xx/dts/evg2000.dts @@ -0,0 +1,103 @@ +/dts-v1/; + +#include "bcm6368.dtsi" + +#include + +/ { + 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 = ; + }; + wps { + label = "wps"; + gpios = <&gpio0 26 1>; + linux,code = ; + }; + }; + + 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>; + }; +}; diff --git a/target/linux/brcm63xx/image/bcm63xx.mk b/target/linux/brcm63xx/image/bcm63xx.mk index 148467375f..24cf085bf7 100644 --- a/target/linux/brcm63xx/image/bcm63xx.mk +++ b/target/linux/brcm63xx/image/bcm63xx.mk @@ -769,6 +769,21 @@ define Device/DGND3800B endef 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 ### define Device/R5010UNv2 $(Device/bcm63xx) diff --git a/target/linux/brcm63xx/patches-4.4/575-board_EVG2000.patch b/target/linux/brcm63xx/patches-4.4/575-board_EVG2000.patch new file mode 100644 index 0000000000..361bd04d43 --- /dev/null +++ b/target/linux/brcm63xx/patches-4.4/575-board_EVG2000.patch @@ -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