From 930e3e7ca30c899d73390fcc8ade503bc249de37 Mon Sep 17 00:00:00 2001
From: Jonas Gorski <jogo@openwrt.org>
Date: Fri, 1 Aug 2014 21:56:46 +0000
Subject: [PATCH] brcm63xx: add preliminary support for D-Link DSL-2751B E1

Mostly works except for USB led. Flashing not tested yet. Mostly
as an example for the sprom fixup code.

Fixup values taken from GPL tarball by comparing bcm43217_map.c
with the struct in sprom.c.

Signed-off-by: Jonas Gorski <jogo@openwrt.org>

SVN-Revision: 41944
---
 .../base-files/etc/uci-defaults/02_network    |   1 +
 .../linux/brcm63xx/base-files/lib/brcm63xx.sh |   5 +
 ...0-BCM63XX-add-endian-check-for-ath9k.patch |   2 +-
 .../421-BCM63XX-add-led-pin-for-ath9k.patch   |   2 +-
 .../patches-3.14/567-board_dsl-2751b_e1.patch | 152 ++++++++++++++++++
 5 files changed, 160 insertions(+), 2 deletions(-)
 create mode 100644 target/linux/brcm63xx/patches-3.14/567-board_dsl-2751b_e1.patch

diff --git a/target/linux/brcm63xx/base-files/etc/uci-defaults/02_network b/target/linux/brcm63xx/base-files/etc/uci-defaults/02_network
index f4985c7d6e..3884e07136 100755
--- a/target/linux/brcm63xx/base-files/etc/uci-defaults/02_network
+++ b/target/linux/brcm63xx/base-files/etc/uci-defaults/02_network
@@ -86,6 +86,7 @@ HW6358GW_B)
 96368M-1341N |\
 96368M-1541N |\
 96368MVNgr |\
+AW5200B |\
 "F@ST2504n" |\
 "F@ST2704V2" |\
 P870HW-51a_v2)
diff --git a/target/linux/brcm63xx/base-files/lib/brcm63xx.sh b/target/linux/brcm63xx/base-files/lib/brcm63xx.sh
index 1bcd3b9329..58ce71ee16 100755
--- a/target/linux/brcm63xx/base-files/lib/brcm63xx.sh
+++ b/target/linux/brcm63xx/base-files/lib/brcm63xx.sh
@@ -87,6 +87,11 @@ brcm63xx_detect() {
 		brcm63xx_has_reset_button="true"
 		ifname=eth0
 		;;
+	AW5200B)
+		status_led="dsl-275xb:green:power"
+		brcm63xx_has_reset_button="true"
+		ifname=eth0
+		;;
 	CPVA642)
 		status_led="CPVA642:green:power:"
 		brcm63xx_has_reset_button="true"
diff --git a/target/linux/brcm63xx/patches-3.14/420-BCM63XX-add-endian-check-for-ath9k.patch b/target/linux/brcm63xx/patches-3.14/420-BCM63XX-add-endian-check-for-ath9k.patch
index 2c85d34165..75694a0185 100644
--- a/target/linux/brcm63xx/patches-3.14/420-BCM63XX-add-endian-check-for-ath9k.patch
+++ b/target/linux/brcm63xx/patches-3.14/420-BCM63XX-add-endian-check-for-ath9k.patch
@@ -21,7 +21,7 @@
  /*
 --- a/arch/mips/bcm63xx/pci-ath9k-fixup.c
 +++ b/arch/mips/bcm63xx/pci-ath9k-fixup.c
-@@ -184,12 +184,14 @@ static void ath9k_pci_fixup(struct pci_d
+@@ -181,12 +181,14 @@ static void ath9k_pci_fixup(struct pci_d
  }
  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATHEROS, PCI_ANY_ID, ath9k_pci_fixup);
  
diff --git a/target/linux/brcm63xx/patches-3.14/421-BCM63XX-add-led-pin-for-ath9k.patch b/target/linux/brcm63xx/patches-3.14/421-BCM63XX-add-led-pin-for-ath9k.patch
index d720b5f3af..db0bed22a7 100644
--- a/target/linux/brcm63xx/patches-3.14/421-BCM63XX-add-led-pin-for-ath9k.patch
+++ b/target/linux/brcm63xx/patches-3.14/421-BCM63XX-add-led-pin-for-ath9k.patch
@@ -11,7 +11,7 @@
  }
 --- a/arch/mips/bcm63xx/pci-ath9k-fixup.c
 +++ b/arch/mips/bcm63xx/pci-ath9k-fixup.c
-@@ -185,13 +185,14 @@ static void ath9k_pci_fixup(struct pci_d
+@@ -182,13 +182,14 @@ static void ath9k_pci_fixup(struct pci_d
  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATHEROS, PCI_ANY_ID, ath9k_pci_fixup);
  
  void __init pci_enable_ath9k_fixup(unsigned slot, u32 offset,
diff --git a/target/linux/brcm63xx/patches-3.14/567-board_dsl-2751b_e1.patch b/target/linux/brcm63xx/patches-3.14/567-board_dsl-2751b_e1.patch
new file mode 100644
index 0000000000..4b31dd4a0e
--- /dev/null
+++ b/target/linux/brcm63xx/patches-3.14/567-board_dsl-2751b_e1.patch
@@ -0,0 +1,152 @@
+--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
+@@ -263,6 +263,141 @@ static struct board_info __initdata boar
+ 		},
+ 	},
+ };
++
++static struct sprom_fixup __initdata dsl2751b_e1_fixups[] = {
++	{ .offset = 96, .value = 0x2046 },
++	{ .offset = 97, .value = 0xfe9d },
++	{ .offset = 98, .value = 0x1854 },
++	{ .offset = 99, .value = 0xfa59 },
++	{ .offset = 112, .value = 0x2046 },
++	{ .offset = 113, .value = 0xfe79 },
++	{ .offset = 114, .value = 0x17f5 },
++	{ .offset = 115, .value = 0xfa47 },
++	{ .offset = 161, .value = 0x2222 },
++	{ .offset = 162, .value = 0x2222 },
++	{ .offset = 169, .value = 0x2222 },
++	{ .offset = 170, .value = 0x2222 },
++	{ .offset = 171, .value = 0x5555 },
++	{ .offset = 172, .value = 0x5555 },
++	{ .offset = 173, .value = 0x4444 },
++	{ .offset = 174, .value = 0x4444 },
++	{ .offset = 175, .value = 0x5555 },
++	{ .offset = 176, .value = 0x5555 },
++};
++
++static struct board_info __initdata board_dsl_2751b_d1 = {
++	.name				= "AW5200B",
++	.expected_cpu_id		= 0x6318,
++
++	.has_uart0			= 1,
++	.has_pci			= 1,
++	.use_fallback_sprom		= 1,
++
++	.has_enetsw			= 1,
++
++	.has_ohci0			= 1,
++	.has_ehci0			= 1,
++	.num_usbh_ports			= 1,
++
++	.enetsw = {
++		.used_ports = {
++			[0] = {
++				.used	= 1,
++				.phy_id = 1,
++				.name	= "Port 1",
++			},
++			[1] = {
++				.used	= 1,
++				.phy_id	= 2,
++				.name	= "Port 2",
++			},
++			[2] = {
++				.used	= 1,
++				.phy_id	= 3,
++				.name	= "Port 3",
++			},
++			[3] = {
++				.used	= 1,
++				.phy_id	= 4,
++				.name	= "Port 4",
++			},
++		},
++	},
++
++	.leds = {
++		{
++			.name		= "dsl-275xb:green:power",
++			.gpio		= 3,
++			.active_low	= 1,
++			.default_trigger = "default-on",
++		},
++		{
++			.name		= "dsl-275xb:green:inet",
++			.gpio		= 8,
++			.active_low	= 1,
++		},
++		{
++			.name		= "dsl-275xb:red:inet-fail",
++			.gpio		= 9,
++			.active_low	= 1,
++		},
++		{
++			.name		= "dsl-275xb:red:post-failed",
++			.gpio		= 11,
++			.active_low	= 1,
++		},
++		{
++			.name		= "dsl-275xb:wps:blue",
++			.gpio		= 16,
++			.active_low	= 1,
++		},
++		{
++			.name		= "dsl-275xb:green:dsl",
++			.gpio		= 17,
++			.active_low	= 1,
++		},
++		{
++			.name		= "dsl-275xb:green:usb",
++			.gpio		= 49, /* FIXME: does not work! */
++			.active_low	= 1,
++		},
++	},
++
++	.buttons = {
++		{
++			.desc			= "wlan",
++			.gpio			= 2,
++			.active_low		= 1,
++			.type			= EV_KEY,
++			.code			= KEY_WLAN,
++			.debounce_interval	= BCM963XX_KEYS_DEBOUNCE_INTERVAL,
++		},
++		{
++			.desc			= "wps",
++			.gpio			= 33,
++			.active_low		= 1,
++			.type			= EV_KEY,
++			.code			= KEY_WPS_BUTTON,
++			.debounce_interval	= BCM963XX_KEYS_DEBOUNCE_INTERVAL,
++		},
++		{
++			.desc			= "reset",
++			.gpio			= 34,
++			.active_low		= 1,
++			.type			= EV_KEY,
++			.code			= KEY_RESTART,
++			.debounce_interval	= BCM963XX_KEYS_DEBOUNCE_INTERVAL,
++		},
++	},
++
++	.fallback_sprom = {
++		.type 				= SPROM_BCM43217,
++		.pci_bus			= 1,
++		.pci_dev			= 0,
++		.board_fixups			= dsl2751b_e1_fixups,
++		.num_board_fixups		= ARRAY_SIZE(dsl2751b_e1_fixups),
++	},
++};
+ #endif
+ 
+ /*
+@@ -5264,6 +5399,7 @@ static const struct board_info __initcon
+ #ifdef CONFIG_BCM63XX_CPU_6318
+ 	&board_96318ref,
+ 	&board_96318ref_p300,
++	&board_dsl_2751b_d1,
+ #endif
+ #ifdef CONFIG_BCM63XX_CPU_6328
+ 	&board_96328avng,
-- 
GitLab