ramips: add support for Buffalo WCR-1166DS
authorFUKAUMI Naoki <naobsd@gmail.com>
Sat, 28 Jan 2017 16:05:56 +0000 (01:05 +0900)
committerRafał Miłecki <rafal@milecki.pl>
Tue, 31 Jan 2017 10:10:58 +0000 (11:10 +0100)
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>
target/linux/ramips/base-files/etc/board.d/02_network
target/linux/ramips/base-files/etc/diag.sh
target/linux/ramips/base-files/lib/ramips.sh
target/linux/ramips/base-files/lib/upgrade/platform.sh
target/linux/ramips/dts/WCR-1166DS.dts [new file with mode: 0644]
target/linux/ramips/image/Makefile
target/linux/ramips/image/mt7628.mk
target/linux/ramips/mt7628/config-4.4
target/linux/ramips/patches-4.4/0400-mtd-mtdsplit-add-support-for-custom-trx-magic-for-Buffalo-WCR-1166DS.patch [new file with mode: 0644]

index 91f1aaacbe65e530dc78dbf0f958352de8194243..c001dfe85a4dd1ca64fec6cd67d87e3a510bed18 100755 (executable)
@@ -263,6 +263,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"
@@ -410,6 +414,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)
                ;;
@@ -427,11 +437,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)
index 94998333b365ebe73a0cf7d6d8ae6e9be8790e64..5fb221380e7dad0096f87e96242cdba814de2dc3 100644 (file)
@@ -219,6 +219,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"
@@ -233,11 +239,6 @@ get_status_led() {
        wizfi630a)
                status_led="$board::run"
                ;;
-       whr-300hp2|\
-       wsr-1166|\
-       wsr-600)
-               status_led="$board:green:power"
-               ;;
        wrtnode2r | \
        wrtnode2p | \
        wrtnode)
index 8292da1d4acf575512760651989ef64d108c8a6f..d9918cceb5e817979debff9002e2b5c1ab7cd098 100755 (executable)
@@ -499,6 +499,9 @@ ramips_board_detect() {
        *"W502U")
                name="w502u"
                ;;
+       *"WCR-1166DS")
+               name="wcr-1166ds"
+               ;;
        *"WCR-150GN")
                name="wcr-150gn"
                ;;
index c6ad8ca3e5262e300ba49f9d31b5bb874dc88380..d83e5c1dd28bc885f81ea912afa15a2314a85e3e 100755 (executable)
@@ -226,6 +226,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."
@@ -233,10 +238,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 (file)
index 0000000..ad3f21b
--- /dev/null
@@ -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";
+};
index 2952c5f840999cf691135b990149301bfc1b75aa..f34eba79cd16b65c32d92a82b77db6830bee39d7 100644 (file)
@@ -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) \
index 4502588c80ee90b22cadd3f21c6f044b9a368090..0304921f4115dab144390e8d4725b1a08be27c0f 100644 (file)
@@ -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
index 6b04457f1786cf90fbf043726637784967f83dd2..6cd7838aeea351c25f7ebdd0ee18af49254c53f2 100644 (file)
@@ -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 (file)
index 0000000..1af72f9
--- /dev/null
@@ -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;