[LEDE-DEV,v4,3/3] ramips: add support for Buffalo WCR-1166DS

Submitted by FUKAUMI Naoki on Jan. 28, 2017, 4:05 p.m.

Details

Message ID 20170128160556.23071-3-naobsd@gmail.com
State Accepted
Headers show

Commit Message

FUKAUMI Naoki Jan. 28, 2017, 4:05 p.m.
Buffalo WCR-1166DS is a small wireless router with

 - MT7628AN + MT7612E
 - 64MiB DDR2 SDRAM
 - 16MiB SPI flash
 - 2T2R 11ac/a/b/g/n Wi-Fi
 - 2x 10/100M ethernet switch
 - 8x programmable LED
 - 3x button
 - UART pad on PCB (J2: 3.3V, GND, TX, RX)

factory image can be installed via stock web UI.

due to the "dual image" function in the bootloader, the second half of
the SPI flash ("firmware2" partition) cannot be used as a part of the
file system.

Signed-off-by: FUKAUMI Naoki <naobsd@gmail.com>
---
Changes in v4:
- rebase and resolve conflict

Changes in v3:
- added

 .../linux/ramips/base-files/etc/board.d/02_network |  15 +-
 target/linux/ramips/base-files/etc/diag.sh         |  11 +-
 target/linux/ramips/base-files/lib/ramips.sh       |   3 +
 .../ramips/base-files/lib/upgrade/platform.sh      |   9 +-
 target/linux/ramips/dts/WCR-1166DS.dts             | 172 +++++++++++++++++++++
 target/linux/ramips/image/Makefile                 |   3 +-
 target/linux/ramips/image/mt7628.mk                |  16 ++
 target/linux/ramips/mt7628/config-4.4              |   1 +
 ...r-custom-trx-magic-for-Buffalo-WCR-1166DS.patch |  30 ++++
 9 files changed, 245 insertions(+), 15 deletions(-)
 create mode 100644 target/linux/ramips/dts/WCR-1166DS.dts
 create mode 100644 target/linux/ramips/patches-4.4/0400-mtd-mtdsplit-add-support-for-custom-trx-magic-for-Buffalo-WCR-1166DS.patch

Patch hide | download patch | download mbox

diff --git a/target/linux/ramips/base-files/etc/board.d/02_network b/target/linux/ramips/base-files/etc/board.d/02_network
index b27954f..282624f 100755
--- a/target/linux/ramips/base-files/etc/board.d/02_network
+++ b/target/linux/ramips/base-files/etc/board.d/02_network
@@ -264,6 +264,10 @@  ramips_setup_interfaces()
 		ucidef_add_switch "switch0" \
 			"1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "5@eth0"
 		;;
+	wcr-1166ds)
+		ucidef_add_switch "switch0" \
+			"3:lan" "4:wan" "6@eth0"
+		;;
 	wcr-150gn)
 		ucidef_add_switch "switch0" \
 			"0:lan" "6t@eth0"
@@ -411,6 +415,12 @@  ramips_setup_macs()
 		lan_mac=$(cat /sys/class/net/eth0/address)
 		wan_mac=$(macaddr_add "$lan_mac" 5)
 		;;
+	wcr-1166ds|\
+	wsr-1166)
+		local index="$(find_mtd_index "board_data")"
+		wan_mac="$(grep -m1 mac= "/dev/mtd${index}" | cut -d= -f2)"
+		lan_mac=$wan_mac
+		;;
 	wcr-150gn)
 		wan_mac=$(mtd_get_mac_binary factory 40)
 		;;
@@ -428,11 +438,6 @@  ramips_setup_macs()
 	wlr-6000)
 		wan_mac=$(macaddr_add "$(mtd_get_mac_binary factory 32772)" 2)
 		;;
-	wsr-1166)
-		local index="$(find_mtd_index "board_data")"
-		wan_mac="$(grep -m1 mac= "/dev/mtd${index}" | cut -d= -f2)"
-		lan_mac=$wan_mac
-		;;
 	*)
 		lan_mac=$(cat /sys/class/net/eth0/address)
 		wan_mac=$(macaddr_add "$lan_mac" 1)
diff --git a/target/linux/ramips/base-files/etc/diag.sh b/target/linux/ramips/base-files/etc/diag.sh
index 84031d1..f6bae00 100644
--- a/target/linux/ramips/base-files/etc/diag.sh
+++ b/target/linux/ramips/base-files/etc/diag.sh
@@ -220,6 +220,12 @@  get_status_led() {
 	zbt-wr8305rt)
 		status_led="$board:green:sys"
 		;;
+	wcr-1166ds|\
+	whr-300hp2|\
+	wsr-1166|\
+	wsr-600)
+		status_led="$board:green:power"
+		;;
 	wcr-150gn|\
 	wl-351)
 		status_led="$board:amber:power"
@@ -234,11 +240,6 @@  get_status_led() {
 	wizfi630a)
 		status_led="$board::run"
 		;;
-	whr-300hp2|\
-	wsr-1166|\
-	wsr-600)
-		status_led="$board:green:power"
-		;;
 	wrtnode2r | \
 	wrtnode2p | \
 	wrtnode)
diff --git a/target/linux/ramips/base-files/lib/ramips.sh b/target/linux/ramips/base-files/lib/ramips.sh
index 5ab46de..71b31f6 100755
--- a/target/linux/ramips/base-files/lib/ramips.sh
+++ b/target/linux/ramips/base-files/lib/ramips.sh
@@ -502,6 +502,9 @@  ramips_board_detect() {
 	*"W502U")
 		name="w502u"
 		;;
+	*"WCR-1166DS")
+		name="wcr-1166ds"
+		;;
 	*"WCR-150GN")
 		name="wcr-150gn"
 		;;
diff --git a/target/linux/ramips/base-files/lib/upgrade/platform.sh b/target/linux/ramips/base-files/lib/upgrade/platform.sh
index 05d2759..a43d370 100755
--- a/target/linux/ramips/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ramips/base-files/lib/upgrade/platform.sh
@@ -227,6 +227,11 @@  platform_check_image() {
 		}
 		return 0
 		;;
+	ubnt-erx)
+		nand_do_platform_check "$board" "$1"
+		return $?;
+		;;
+	wcr-1166ds|\
 	wsr-1166)
 		[ "$magic" != "48445230" ] && {
 			echo "Invalid image type."
@@ -234,10 +239,6 @@  platform_check_image() {
 		}
 		return 0
 		;;
-	ubnt-erx)
-		nand_do_platform_check "$board" "$1"
-		return $?;
-		;;
 	esac
 
 	echo "Sysupgrade is not yet supported on $board."
diff --git a/target/linux/ramips/dts/WCR-1166DS.dts b/target/linux/ramips/dts/WCR-1166DS.dts
new file mode 100644
index 0000000..ad3f21b
--- /dev/null
+++ b/target/linux/ramips/dts/WCR-1166DS.dts
@@ -0,0 +1,172 @@ 
+/dts-v1/;
+
+#include "mt7628an.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+	compatible = "buffalo,wcr-1166ds", "mediatek,mt7628an-soc";
+	model = "Buffalo WCR-1166DS";
+
+	gpio-keys-polled {
+		compatible = "gpio-keys-polled";
+		#address-cells = <1>;
+		#size-cells = <0>;
+		poll-interval = <20>;
+
+		aoss {
+			label = "aoss";
+			gpios = <&gpio0 0 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_WPS_BUTTON>;
+		};
+
+		ap {
+			label = "ap";
+			gpios = <&gpio0 11 GPIO_ACTIVE_LOW>;
+			linux,code = <BTN_0>;
+			linux,input-type = <EV_SW>;
+		};
+
+		reset {
+			label = "reset";
+			gpios = <&gpio1 14 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RESTART>;
+		};
+	};
+
+	gpio-leds {
+		compatible = "gpio-leds";
+
+		router_o {
+			label = "wcr-1166ds:orange:router";
+			gpios = <&gpio1 5 GPIO_ACTIVE_LOW>;
+		};
+
+		router_g {
+			label = "wcr-1166ds:green:router";
+			gpios = <&gpio1 6 GPIO_ACTIVE_LOW>;
+		};
+
+		internet_o {
+			label = "wcr-1166ds:orange:internet";
+			gpios = <&gpio1 7 GPIO_ACTIVE_LOW>;
+		};
+
+		internet_g {
+			label = "wcr-1166ds:green:internet";
+			gpios = <&gpio1 8 GPIO_ACTIVE_LOW>;
+		};
+
+		wireless_o {
+			label = "wcr-1166ds:orange:wireless";
+			gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
+		};
+
+		wireless_g {
+			label = "wcr-1166ds:green:wireless";
+			gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;
+		};
+
+		diag {
+			label = "wcr-1166ds:orange:diag";
+			gpios = <&gpio1 11 GPIO_ACTIVE_LOW>;
+		};
+
+		power {
+			label = "wcr-1166ds:green:power";
+			gpios = <&gpio1 12 GPIO_ACTIVE_LOW>;
+		};
+	};
+};
+
+&ehci {
+	status = "disabled";
+};
+
+&esw {
+	mediatek,portmap = <0x2f>;
+	mediatek,portdisable = <0x27>;
+};
+
+&ohci {
+	status = "disabled";
+};
+
+&pcie {
+	status = "okay";
+	pcie-bridge {
+		mt76@0,0 {
+			reg = <0x0000 0 0 0 0>;
+			device_type = "pci";
+			mediatek,mtd-eeprom = <&factory 0x8000>;
+			mediatek,2ghz = <0>;
+		};
+	};
+};
+
+&pinctrl {
+	state_default: pinctrl0 {
+		gpio {
+			ralink,group = "uart1", "wled_an", "p0led_an", "p1led_an", "p2led_an", "p3led_an", "p4led_an", "wdt", "refclk", "gpio", "i2s";
+			ralink,function = "gpio";
+		};
+	};
+};
+
+&spi0 {
+	status = "okay";
+
+	m25p80@0 {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <10000000>;
+		m25p,chunked-io = <32>;
+
+		partition@0 {
+			label = "u-boot";
+			reg = <0x0 0x30000>;
+			read-only;
+		};
+
+		partition@30000 {
+			label = "u-boot-env";
+			reg = <0x30000 0x10000>;
+			read-only;
+		};
+
+		factory: partition@40000 {
+			label = "factory";
+			reg = <0x40000 0x10000>;
+			read-only;
+		};
+
+		partition@50000 {
+			label = "firmware";
+			reg = <0x50000 0x7c0000>;
+		};
+
+		partition@810000 {
+			label = "firmware2";
+			reg = <0x810000 0x7c0000>;
+		};
+
+		partition@fd0000 {
+			label = "glbcfg";
+			reg = <0xfd0000 0x10000>;
+			read-only;
+		};
+
+		partition@fe0000 {
+			label = "board_data";
+			reg = <0xfe0000 0x10000>;
+			read-only;
+		};
+	};
+};
+
+&wmac {
+	status = "okay";
+};
diff --git a/target/linux/ramips/image/Makefile b/target/linux/ramips/image/Makefile
index 2952c5f..f34eba7 100644
--- a/target/linux/ramips/image/Makefile
+++ b/target/linux/ramips/image/Makefile
@@ -23,6 +23,7 @@  define Image/Build/Initramfs
 endef
 
 DEVICE_VARS += DTS IMAGE_SIZE NETGEAR_BOARD_ID NETGEAR_HW_ID
+DEVICE_VARS += BUFFALO_TAG_PLATFORM BUFFALO_TAG_VERSION BUFFALO_TAG_MINOR
 
 loadaddr-y := 0x80000000
 loadaddr-$(CONFIG_TARGET_ramips_rt288x) := 0x88000000
@@ -48,7 +49,7 @@  define Build/patch-dtb
 endef
 
 define Build/trx
-	$(STAGING_DIR_HOST)/bin/trx \
+	$(STAGING_DIR_HOST)/bin/trx $(1) \
 		-o $@ \
 		-m $(IMAGE_SIZE) \
 		-f $(IMAGE_KERNEL) \
diff --git a/target/linux/ramips/image/mt7628.mk b/target/linux/ramips/image/mt7628.mk
index 4502588..0304921 100644
--- a/target/linux/ramips/image/mt7628.mk
+++ b/target/linux/ramips/image/mt7628.mk
@@ -55,3 +55,19 @@  define Device/mac1200r-v2
   DEVICE_TITLE := Mercury MAC1200R v2.0
 endef
 TARGET_DEVICES += mac1200r-v2
+
+define Device/wcr-1166ds
+  DTS := WCR-1166DS
+  BUFFALO_TAG_PLATFORM := MTK
+  BUFFALO_TAG_VERSION := 9.99
+  BUFFALO_TAG_MINOR := 9.99
+  IMAGES += factory.bin
+  IMAGE/sysupgrade.bin := trx | pad-rootfs | append-metadata
+  IMAGE/factory.bin := \
+	trx -M 0x746f435c | pad-rootfs | append-metadata | \
+	buffalo-enc WCR-1166DS $$(BUFFALO_TAG_VERSION) -l | \
+	buffalo-tag-dhp WCR-1166DS JP JP | buffalo-enc-tag -l | \
+	buffalo-dhp-image
+  DEVICE_TITLE := Buffalo WCR-1166DS
+endef
+TARGET_DEVICES += wcr-1166ds
diff --git a/target/linux/ramips/mt7628/config-4.4 b/target/linux/ramips/mt7628/config-4.4
index 6b04457..6cd7838 100644
--- a/target/linux/ramips/mt7628/config-4.4
+++ b/target/linux/ramips/mt7628/config-4.4
@@ -138,6 +138,7 @@  CONFIG_MTD_NAND_MT7620=y
 CONFIG_MTD_PHYSMAP=y
 CONFIG_MTD_SPI_NOR=y
 CONFIG_MTD_SPLIT_FIRMWARE=y
+CONFIG_MTD_SPLIT_TRX_FW=y
 CONFIG_MTD_SPLIT_UIMAGE_FW=y
 CONFIG_NEED_DMA_MAP_STATE=y
 CONFIG_NEED_PER_CPU_KM=y
diff --git a/target/linux/ramips/patches-4.4/0400-mtd-mtdsplit-add-support-for-custom-trx-magic-for-Buffalo-WCR-1166DS.patch b/target/linux/ramips/patches-4.4/0400-mtd-mtdsplit-add-support-for-custom-trx-magic-for-Buffalo-WCR-1166DS.patch
new file mode 100644
index 0000000..1af72f9
--- /dev/null
+++ b/target/linux/ramips/patches-4.4/0400-mtd-mtdsplit-add-support-for-custom-trx-magic-for-Buffalo-WCR-1166DS.patch
@@ -0,0 +1,30 @@ 
+--- a/drivers/mtd/mtdsplit/mtdsplit_trx.c
++++ b/drivers/mtd/mtdsplit/mtdsplit_trx.c
+@@ -13,6 +13,7 @@
+ #include <linux/module.h>
+ #include <linux/init.h>
+ #include <linux/kernel.h>
++#include <linux/of.h>
+ #include <linux/slab.h>
+ #include <linux/mtd/mtd.h>
+ #include <linux/mtd/partitions.h>
+@@ -20,7 +21,8 @@
+ 
+ #include "mtdsplit.h"
+ 
+-#define TRX_MAGIC   0x30524448  /* "HDR0" */
++#define TRX_MAGIC		0x30524448  /* "HDR0" */
++#define TRX_MAGIC_BUFFALO	0x746f435c
+ 
+ struct trx_header {
+ 	__le32 magic;
+@@ -82,7 +84,8 @@ mtdsplit_parse_trx(struct mtd_info *mast
+ 		if (ret)
+ 			continue;
+ 
+-		if (hdr.magic != cpu_to_le32(TRX_MAGIC)) {
++		if (hdr.magic != cpu_to_le32(TRX_MAGIC) &&
++		    !(of_machine_is_compatible("buffalo,wcr-1166ds") && hdr.magic == cpu_to_le32(TRX_MAGIC_BUFFALO))) {
+ 			pr_debug("no valid trx header found in \"%s\" at offset %llx\n",
+ 				 master->name, (unsigned long long) offset);
+ 			continue;