Buffalo WCR-1166DS is a small wireless router with - MT7628AN + MT7612E - 64MiB DDR2 SDRAM - 16MiB SPI flash - 2T2R 2.4/5GHz Wi-Fi - 2x 10/100M ethernet switch - 8x 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 <nao...@gmail.com> --- 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 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 daf9b33..0b7c5b4 100755 --- a/target/linux/ramips/base-files/etc/board.d/02_network +++ b/target/linux/ramips/base-files/etc/board.d/02_network @@ -256,6 +256,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" @@ -392,6 +396,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) ;; @@ -409,11 +419,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 a22be5e..c20e939 100644 --- a/target/linux/ramips/base-files/etc/diag.sh +++ b/target/linux/ramips/base-files/etc/diag.sh @@ -211,6 +211,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" @@ -225,11 +231,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 9b82b2a..766cc72 100755 --- a/target/linux/ramips/base-files/lib/ramips.sh +++ b/target/linux/ramips/base-files/lib/ramips.sh @@ -490,6 +490,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 c097cfa..4be59b8 100755 --- a/target/linux/ramips/base-files/lib/upgrade/platform.sh +++ b/target/linux/ramips/base-files/lib/upgrade/platform.sh @@ -222,6 +222,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." @@ -229,10 +234,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 255aa8c..108f51a 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 +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 7a7ddce..81f4344 100644 --- a/target/linux/ramips/image/mt7628.mk +++ b/target/linux/ramips/image/mt7628.mk @@ -46,3 +46,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; -- 2.7.4 _______________________________________________ Lede-dev mailing list Lede-dev@lists.infradead.org http://lists.infradead.org/mailman/listinfo/lede-dev