brcm63xx: Add Sercomm AD1018 support
authorDaniel Gonzalez Cabanelas <dgcbueu@gmail.com>
Thu, 31 Aug 2017 20:22:37 +0000 (22:22 +0200)
committerJonas Gorski <jonas.gorski@gmail.com>
Sat, 16 Dec 2017 11:57:05 +0000 (12:57 +0100)
Add support for the Sercomm AD1018 router

This a BCM6328 based board, 128 MB RAM, 128 MiB NAND flash,
with an onboard BCM43217 wifi, 4 ethernet ports and 1 USB
host port (not soldered). The board also has an FXS chip (Si32177)
connected via SPI (SS2#), without support in LEDE.

Since NAND flash chips aren't still supported in brcm63xx, the
support is for now added to work only with SPI flash chips. Therefore
hardware modding, soldering a new SPI flash chip, is required
to make the board work with LEDE (tested and working OK).
The flash at dts is intentionally left without partitioning to let
the user choose a NOR chip of any size (8, 16 or 32 MB).

Signed-off-by: Daniel Gonzalez Cabanelas <dgcbueu@gmail.com>
[jonas.gorski: renamed ad1018 to ad1018-nor to signify the modification]
Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
target/linux/brcm63xx/base-files/etc/board.d/01_leds
target/linux/brcm63xx/base-files/etc/board.d/02_network
target/linux/brcm63xx/base-files/etc/diag.sh
target/linux/brcm63xx/base-files/lib/brcm63xx.sh
target/linux/brcm63xx/dts/ad1018-nor.dts [new file with mode: 0644]
target/linux/brcm63xx/image/bcm63xx.mk
target/linux/brcm63xx/patches-4.4/580-board_AD1018.patch [new file with mode: 0644]

index ef70cde79199105954e1d089ace0c470f60ae076..d25d37e84741a2ebce0f3b53cec0163f2b0685d1 100755 (executable)
@@ -15,6 +15,9 @@ a4001n1)
 a4001n)
        ucidef_set_led_usbdev "usb" "USB" "A4001N:green:usb" "1-1"
        ;;
+ad1018-nor)
+       ucidef_set_led_netdev "wlan0" "WLAN" "AD1018:green:wifi" "wlan0"
+       ;;
 ar-5315u)
        ucidef_set_led_usbdev "usb" "USB" "AR-5315u:green:usb" "1-1"
        ;;
index 9addba654a69bf0cce5310a6d0a42720a2b7e15f..06b4b6eced43d9db750b14e88c25f4e3cf9cba7c 100755 (executable)
@@ -98,6 +98,7 @@ vr-3026e)
                "0:lan:1" "1:lan:2" "2:lan:3" "3:lan:4" "8t@eth0"
        ;;
 
+ad1018-nor|\
 ar-5315u |\
 vh4032n)
        ucidef_add_switch "switch0" \
index 700c9ea85a325a470b57394ab61aed67f98fd60c..2663a2cadc86925bc3d734ca9f63c6e61c01fdad 100644 (file)
@@ -12,6 +12,9 @@ set_state() {
        a4001n)
                status_led="A4001N:green:power"
                ;;
+       ad1018)
+               status_led="AD1018:green:power"
+               ;;
        ar-5315u)
                status_led="AR-5315u:green:power"
                ;;
index 3f46633fad2bec29bf7ae785017c9a30df5d8688..82abd737ce504772dd9fb3650137c68b5fbba567 100755 (executable)
@@ -228,6 +228,9 @@ brcm63xx_dt_detect() {
        "Sagem F@ST2704V2")
                board_name="fast2704v2"
                ;;
+       "Sercomm AD1018 (SPI flash mod)")
+               board_name="ad1018-nor"
+               ;;
        "SFR Neuf Box 4"*)
                board_name="neufbox4"
                ;;
diff --git a/target/linux/brcm63xx/dts/ad1018-nor.dts b/target/linux/brcm63xx/dts/ad1018-nor.dts
new file mode 100644 (file)
index 0000000..d7632c6
--- /dev/null
@@ -0,0 +1,136 @@
+/dts-v1/;
+
+#include "bcm6328.dtsi"
+
+#include <dt-bindings/input/input.h>
+
+/ {
+       model = "Sercomm AD1018 (SPI flash mod)";
+       compatible = "sercomm,ad1018-nor", "brcm,bcm6328";
+
+       chosen {
+               bootargs = "root=/dev/mtdblock2 rootfstype=squashfs,jffs2 noinitrd console=ttyS0,115200";
+       };
+
+       gpio-keys-polled {
+               compatible = "gpio-keys-polled";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               poll-interval = <20>;
+               debounce-interval = <60>;
+
+               wps {
+                       label = "wps";
+                       gpios = <&pinctrl 24 1>;
+                       linux,code = <KEY_WPS_BUTTON>;
+               };
+               wifi {
+                       label = "wifi";
+                       gpios = <&pinctrl 25 1>;
+                       linux,code = <KEY_WLAN>;
+               };
+               reset {
+                       label = "reset";
+                       gpios = <&pinctrl 31 1>;
+                       linux,code = <KEY_RESTART>;
+               };
+       };
+
+};
+
+&pinctrl {
+       pinctrl_leds: leds {
+               function = "led";
+               pins = "gpio0", "gpio1";
+       };
+};
+
+&leds {
+       status = "ok";
+
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_leds &pinctrl_serial_led
+                    &pinctrl_ephy0_spd_led &pinctrl_ephy1_act_led
+                    &pinctrl_ephy2_act_led &pinctrl_ephy3_act_led>;
+
+       brcm,serial-leds;
+       brcm,serial-shift-inv;
+       brcm,serial-dat-low;
+
+       inet_red@0 {
+               reg = <0>;
+               active-low;
+               label = "AD1018:red:internet";
+       };
+
+       inet_green@1 {
+               reg = <1>;
+               active-low;
+               label = "AD1018:green:internet";
+       };
+
+       power_green@8 {
+               reg = <8>;
+               active-low;
+               label = "AD1018:green:power";
+               default-state = "on";
+       };
+
+       adsl_green@10 {
+               reg = <10>;
+               active-low;
+               label = "AD1018:green:adsl";
+       };
+
+       adsl_red@11 {
+               reg = <11>;
+               active-low;
+               label = "AD1018:red:adsl";
+       };
+
+       phone_green@12 {
+               reg = <12>;
+               active-low;
+               label = "AD1018:green:phone";
+       };
+
+       wps_green@13 {
+               reg = <13>;
+               active-low;
+               label = "AD1018:green:wps";
+       };
+
+       wifi_green@14 {
+               reg = <14>;
+               active-low;
+               label = "AD1018:green:wifi";
+       };
+
+       usb_green@15 {
+               reg = <15>;
+               active-low;
+               label = "AD1018:green:usb";
+       };
+
+       ephy0_spd@17 {
+               reg = <17>;
+               brcm,hardware-controlled;
+       };
+};
+
+&hsspi {
+       status = "ok";
+
+       flash@0 {
+               compatible = "jedec,spi-nor";
+               spi-max-frequency = <16666667>;
+               spi-tx-bus-width = <2>;
+               spi-rx-bus-width = <2>;
+               reg = <0>;
+
+               #address-cells = <1>;
+               #size-cells = <1>;
+
+               linux,part-probe = "bcm63xxpart";
+       };
+};
index 4e90eb0504ead8c04f69c0ea26fedf7100ee31e4..918dfc798169d969cfd39db3bb8b9dbadab83265 100644 (file)
@@ -971,6 +971,18 @@ define Device/FAST2704V2
 endef
 TARGET_DEVICES += FAST2704V2
 
+### Sercomm ###
+define Device/AD1018-SPI_flash
+  $(Device/bcm63xx)
+  DEVICE_TITLE := Sercomm AD1018 (SPI flash mod)
+  DEVICE_DTS := ad1018-nor
+  CFE_BOARD_ID := 96328avngr
+  CFE_CHIP_ID := 6328
+  DEVICE_PACKAGES := \
+    $(B43_PACKAGES) $(USB2_PACKAGES)
+endef
+TARGET_DEVICES += AD1018-SPI_flash
+
 ### SFR ###
 define Device/NEUFBOX4-SER
   $(Device/bcm63xx)
diff --git a/target/linux/brcm63xx/patches-4.4/580-board_AD1018.patch b/target/linux/brcm63xx/patches-4.4/580-board_AD1018.patch
new file mode 100644 (file)
index 0000000..c08e00d
--- /dev/null
@@ -0,0 +1,93 @@
+--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
+@@ -366,6 +366,74 @@ static struct board_info __initdata boar
+       },
+ };
++static struct sprom_fixup __initdata ad1018_fixups[] = {
++      { .offset = 6, .value = 0x1c00 },
++      { .offset = 65, .value = 0x1256 },
++      { .offset = 96, .value = 0x2046 },
++      { .offset = 97, .value = 0xfe69 },
++      { .offset = 98, .value = 0x1726 },
++      { .offset = 99, .value = 0xfa5c },
++      { .offset = 112, .value = 0x2046 },
++      { .offset = 113, .value = 0xfea8 },
++      { .offset = 114, .value = 0x1978 },
++      { .offset = 115, .value = 0xfa26 },
++      { .offset = 161, .value = 0x2222 },
++      { .offset = 169, .value = 0x2222 },
++      { .offset = 171, .value = 0x2222 },
++      { .offset = 173, .value = 0x2222 },
++      { .offset = 174, .value = 0x4444 },
++      { .offset = 175, .value = 0x2222 },
++      { .offset = 176, .value = 0x4444 },
++};
++
++static struct board_info __initdata board_AD1018 = {
++      .name                                   = "96328avngr",
++      .expected_cpu_id                        = 0x6328,
++
++      .has_uart0                              = 1,
++      .has_pci                                = 1,
++      .use_fallback_sprom                     = 1,
++
++      .has_ohci0                              = 1,
++      .has_ehci0                              = 1,
++      .num_usbh_ports                         = 1,
++
++      .has_enetsw                             = 1,
++
++      .enetsw = {
++              .used_ports = {
++                      [0] = {
++                              .used           = 1,
++                              .phy_id         = 1,
++                              .name           = "FIBRE",
++                      },
++                      [1] = {
++                              .used           = 1,
++                              .phy_id         = 2,
++                              .name           = "LAN3",
++                      },
++                      [2] = {
++                              .used           = 1,
++                              .phy_id         = 3,
++                              .name           = "LAN2",
++                      },
++                      [3] = {
++                              .used           = 1,
++                              .phy_id         = 4,
++                              .name           = "LAN1",
++                      },
++              },
++      },
++
++      .fallback_sprom = {
++              .type                           = SPROM_BCM43217,
++              .pci_bus                        = 1,
++              .pci_dev                        = 0,
++              .board_fixups                   = ad1018_fixups,
++              .num_board_fixups               = ARRAY_SIZE(ad1018_fixups),
++      },
++};
++
+ static struct sprom_fixup __initdata ar5381u_fixups[] = {
+       { .offset = 97, .value = 0xfee5 },
+       { .offset = 98, .value = 0x157c },
+@@ -2684,6 +2752,7 @@ static const struct board_info __initcon
+ #endif
+ #ifdef CONFIG_BCM63XX_CPU_6328
+       &board_96328avng,
++      &board_AD1018,
+       &board_AR5381u,
+       &board_AR5387un,
+       &board_963281TAN,
+@@ -2798,6 +2867,7 @@ static struct of_device_id const bcm963x
+       { .compatible = "d-link,dsl-274xb-f", .data = &board_dsl_274xb_f1, },
+       { .compatible = "nucom,r5010unv2", .data = &board_R5010UNV2, },
+       { .compatible = "sagem,f@st2704v2", .data = &board_FAST2704V2, },
++      { .compatible = "sercomm,ad1018-nor", .data = &board_AD1018, },
+ #endif
+ #ifdef CONFIG_BCM63XX_CPU_6338
+       { .compatible = "brcm,bcm96338gw", .data = &board_96338gw, },