[source] brcm63xx: Add Sercomm AD1018 support

LEDE Commits lede-commits at lists.infradead.org
Sat Dec 16 04:18:25 PST 2017


jogo pushed a commit to source.git, branch master:
https://git.lede-project.org/e12c72bb52ebcde361b5d8a9856bd771a7872b3d

commit e12c72bb52ebcde361b5d8a9856bd771a7872b3d
Author: Daniel Gonzalez Cabanelas <dgcbueu at gmail.com>
AuthorDate: Thu Aug 31 22:22:37 2017 +0200

    brcm63xx: Add Sercomm AD1018 support
    
    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 at gmail.com>
    [jonas.gorski: renamed ad1018 to ad1018-nor to signify the modification]
    Signed-off-by: Jonas Gorski <jonas.gorski at gmail.com>
---
 .../linux/brcm63xx/base-files/etc/board.d/01_leds  |   3 +
 .../brcm63xx/base-files/etc/board.d/02_network     |   1 +
 target/linux/brcm63xx/base-files/etc/diag.sh       |   3 +
 target/linux/brcm63xx/base-files/lib/brcm63xx.sh   |   3 +
 target/linux/brcm63xx/dts/ad1018-nor.dts           | 136 +++++++++++++++++++++
 target/linux/brcm63xx/image/bcm63xx.mk             |  12 ++
 .../brcm63xx/patches-4.4/580-board_AD1018.patch    |  93 ++++++++++++++
 7 files changed, 251 insertions(+)

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 ef70cde..d25d37e 100755
--- a/target/linux/brcm63xx/base-files/etc/board.d/01_leds
+++ b/target/linux/brcm63xx/base-files/etc/board.d/01_leds
@@ -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"
 	;;
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 9addba6..06b4b6e 100755
--- a/target/linux/brcm63xx/base-files/etc/board.d/02_network
+++ b/target/linux/brcm63xx/base-files/etc/board.d/02_network
@@ -98,6 +98,7 @@ vr-3026e)
 		"0:lan:1" "1:lan:2" "2:lan:3" "3:lan:4" "8t at eth0"
 	;;
 
+ad1018-nor|\
 ar-5315u |\
 vh4032n)
 	ucidef_add_switch "switch0" \
diff --git a/target/linux/brcm63xx/base-files/etc/diag.sh b/target/linux/brcm63xx/base-files/etc/diag.sh
index 700c9ea..2663a2c 100644
--- a/target/linux/brcm63xx/base-files/etc/diag.sh
+++ b/target/linux/brcm63xx/base-files/etc/diag.sh
@@ -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"
 		;;
diff --git a/target/linux/brcm63xx/base-files/lib/brcm63xx.sh b/target/linux/brcm63xx/base-files/lib/brcm63xx.sh
index 3f46633..82abd73 100755
--- a/target/linux/brcm63xx/base-files/lib/brcm63xx.sh
+++ b/target/linux/brcm63xx/base-files/lib/brcm63xx.sh
@@ -228,6 +228,9 @@ brcm63xx_dt_detect() {
 	"Sagem F at 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
index 0000000..d7632c6
--- /dev/null
+++ b/target/linux/brcm63xx/dts/ad1018-nor.dts
@@ -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 at 0 {
+		reg = <0>;
+		active-low;
+		label = "AD1018:red:internet";
+	};
+
+	inet_green at 1 {
+		reg = <1>;
+		active-low;
+		label = "AD1018:green:internet";
+	};
+
+	power_green at 8 {
+		reg = <8>;
+		active-low;
+		label = "AD1018:green:power";
+		default-state = "on";
+	};
+
+	adsl_green at 10 {
+		reg = <10>;
+		active-low;
+		label = "AD1018:green:adsl";
+	};
+
+	adsl_red at 11 {
+		reg = <11>;
+		active-low;
+		label = "AD1018:red:adsl";
+	};
+
+	phone_green at 12 {
+		reg = <12>;
+		active-low;
+		label = "AD1018:green:phone";
+	};
+
+	wps_green at 13 {
+		reg = <13>;
+		active-low;
+		label = "AD1018:green:wps";
+	};
+
+	wifi_green at 14 {
+		reg = <14>;
+		active-low;
+		label = "AD1018:green:wifi";
+	};
+
+	usb_green at 15 {
+		reg = <15>;
+		active-low;
+		label = "AD1018:green:usb";
+	};
+
+	ephy0_spd at 17 {
+		reg = <17>;
+		brcm,hardware-controlled;
+	};
+};
+
+&hsspi {
+	status = "ok";
+
+	flash at 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";
+	};
+};
diff --git a/target/linux/brcm63xx/image/bcm63xx.mk b/target/linux/brcm63xx/image/bcm63xx.mk
index 4e90eb0..918dfc7 100644
--- a/target/linux/brcm63xx/image/bcm63xx.mk
+++ b/target/linux/brcm63xx/image/bcm63xx.mk
@@ -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
index 0000000..c08e00d
--- /dev/null
+++ b/target/linux/brcm63xx/patches-4.4/580-board_AD1018.patch
@@ -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 at st2704v2", .data = &board_FAST2704V2, },
++	{ .compatible = "sercomm,ad1018-nor", .data = &board_AD1018, },
+ #endif
+ #ifdef CONFIG_BCM63XX_CPU_6338
+ 	{ .compatible = "brcm,bcm96338gw", .data = &board_96338gw, },



More information about the lede-commits mailing list