ramips: add support for Buffalo WCR-1166DS

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>
This commit is contained in:
FUKAUMI Naoki 2017-01-29 01:05:56 +09:00 committed by Rafał Miłecki
parent 3b5d29b96e
commit 6b0b526a4f
9 changed files with 245 additions and 15 deletions

View file

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

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

View file

@ -499,6 +499,9 @@ ramips_board_detect() {
*"W502U")
name="w502u"
;;
*"WCR-1166DS")
name="wcr-1166ds"
;;
*"WCR-150GN")
name="wcr-150gn"
;;

View file

@ -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."

View file

@ -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";
};

View 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) \

View 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

View 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

View file

@ -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;