[LEDE-DEV] [PATCH] brcm63xx: Add Sercomm AD1018 support

Daniel Gonzalez Cabanelas dgcbueu at gmail.com
Sun Aug 20 08:32:42 PDT 2017


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).

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 for soldering a new SPI flash chip is required
to make the board work with LEDE (tested and working OK).

Signed-off-by: Daniel Gonzalez Cabanelas <dgcbueu 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.dts               | 132 +++++++++++++++++++++
 target/linux/brcm63xx/image/bcm63xx.mk             |  12 ++
 .../brcm63xx/patches-4.4/580-board_AD1018.patch    |  99 ++++++++++++++++
 7 files changed, 253 insertions(+)
 create mode 100644 target/linux/brcm63xx/dts/ad1018.dts
 create mode 100644 target/linux/brcm63xx/patches-4.4/580-board_AD1018.patch

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..5503328 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)
+	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..826d271 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 |\
 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..ae67d9b 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")
+		board_name="ad1018"
+		;;
 	"SFR Neuf Box 4"*)
 		board_name="neufbox4"
 		;;
diff --git a/target/linux/brcm63xx/dts/ad1018.dts b/target/linux/brcm63xx/dts/ad1018.dts
new file mode 100644
index 0000000..b2c8654
--- /dev/null
+++ b/target/linux/brcm63xx/dts/ad1018.dts
@@ -0,0 +1,132 @@
+/dts-v1/;
+
+#include "bcm6328.dtsi"
+
+#include <dt-bindings/input/input.h>
+
+/ {
+	model = "Sercomm AD1018";
+	compatible = "sercomm,ad1018", "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_led0: led0 {
+		function = "led";
+		pins = "gpio0";
+	};
+	pinctrl_led1: led1 {
+		function = "led";
+		pins = "gpio1";
+	};
+};
+
+&leds {
+	status = "ok";
+
+	pinctrl-names = "default";
+	pinctrl-0 = <&pinctrl_led0 &pinctrl_led1 &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";
+	};
+
+	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";
+	};
+};
\ No newline at end of file
diff --git a/target/linux/brcm63xx/image/bcm63xx.mk b/target/linux/brcm63xx/image/bcm63xx.mk
index 6ad15a2..1b04e6f 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
+  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..49a6bfe
--- /dev/null
+++ b/target/linux/brcm63xx/patches-4.4/580-board_AD1018.patch
@@ -0,0 +1,99 @@
+--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
+@@ -365,8 +365,76 @@
+ 		},
+ 	},
+ };
+ 
++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 },
+ 	{ .offset = 99, .value = 0xfae7 },
+@@ -2683,8 +2751,9 @@
+ 	&board_FAST2704N,
+ #endif
+ #ifdef CONFIG_BCM63XX_CPU_6328
+ 	&board_96328avng,
++	&board_AD1018,
+ 	&board_AR5381u,
+ 	&board_AR5387un,
+ 	&board_963281TAN,
+ 	&board_A4001N,
+@@ -2797,8 +2866,9 @@
+ 	{ .compatible = "comtrend,ar-5387un", .data = &board_AR5387un, },
+ 	{ .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", .data = &board_AD1018, },
+ #endif
+ #ifdef CONFIG_BCM63XX_CPU_6338
+ 	{ .compatible = "brcm,bcm96338gw", .data = &board_96338gw, },
+ 	{ .compatible = "brcm,bcm96338w", .data = &board_96338w, },
-- 
2.6.4





More information about the Lede-dev mailing list