ramips: add support for I-O DATA WN-AX1167GR
authorINAGAKI Hiroshi <musashino.open@gmail.com>
Wed, 27 Jun 2018 13:47:13 +0000 (22:47 +0900)
committerJo-Philipp Wich <jo@mein.io>
Tue, 18 Dec 2018 16:32:19 +0000 (17:32 +0100)
I-O DATA WN-AX1167GR is a 2.4/5 GHz band 11ac router, based on
MediaTek MT7621A.

Specification:

- MT7621A (2-Cores, 4-Threads)
- 64 MB of RAM (DDR2)
- 16 MB of Flash (SPI)
- 2T2R 2.4/5 GHz
- 5x 10/100/1000 Mbps Ethernet
- 2x LEDs, 4x keys (2x buttons, 1x slide switch)
- UART header on PCB
  - Vcc, GND, TX, RX from ethernet port side
  - baudrate: 115200 bps (U-Boot, OpenWrt)

Stock firmware:

In the stock firmware, WN-AX1167GR has two os images each composed of
Linux kernel and rootfs.
These images are stored in "Kernel" and "app" partition of the
following partitions, respectively.

(excerpt from dmesg):

MX25L12805D(c2 2018c220) (16384 Kbytes)
mtd .name = raspi, .size = 0x01000000 (16M) .erasesize = 0x00010000 (64K) .numeraseregions = 0
Creating 10 MTD partitions on "raspi":
0x000000000000-0x000001000000 : "ALL"
0x000000000000-0x000000030000 : "Bootloader"
0x000000030000-0x000000040000 : "Config "
0x000000040000-0x000000050000 : "Factory"
0x000000050000-0x000000060000 : "iNIC_rf"
0x000000060000-0x0000007e0000 : "Kernel"
0x000000800000-0x000000f80000 : "app"
0x000000f90000-0x000000fa0000 : "Key"
0x000000fa0000-0x000000fb0000 : "backup"
0x000000fb0000-0x000001000000 : "storage"

The flag for boot partition is stored in "Key" partition, and U-Boot
reads this and determines the partition to boot.

If the image that U-Boot first reads according to the flag is
"Bad Magic Number", U-Boot then tries to boot from the other image.
If the second image is correct, change the flag to the number
corresponding to that image and boot from that image.

(example):

## Booting image at bc800000 ...
Bad Magic Number,FFFFFFFF
Boot from KERNEL 1  !!
## Booting image at bc060000 ...
   Image Name:   MIPS OpenWrt Linux-4.14.50
   Image Type:   MIPS Linux kernel Image (lzma compressed)
   Data Size:    1865917 Bytes = 1.8 MB
   Load Address: 80001000
   Entry Point:  80001000
   Verifying Checksum ... OK
   Uncompressing Kernel Image ... OK
raspi_erase_write: offs:f90000, count:34
.
.
Done!

Starting kernel ...

Flash instruction using factory image:

1. Connect the computer to the LAN port of WN-AX1167GR
2. Connect power cable to WN-AX1167GR and turn on it
3. Access to "192.168.0.1" on the web browser and open firmware
update page ("ファームウェア")
4. Select the OpenWrt factory image and perform firmware update
5. On the initramfs image, execute "mtd erase firmware" to erase stock
firmware and execute sysupgrade with sysupgrade image for WN-AX1167GR
6. Wait ~180 seconds to complete flasing

Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com>
(backported from 0b83a235602dace3de116a10de9515cda5b76be4)

target/linux/ramips/base-files/etc/board.d/01_leds
target/linux/ramips/base-files/etc/board.d/02_network
target/linux/ramips/base-files/etc/diag.sh
target/linux/ramips/base-files/lib/upgrade/platform.sh
target/linux/ramips/dts/WN-AX1167GR.dts [new file with mode: 0644]
target/linux/ramips/image/mt7621.mk

index 954108f9a1ad9def9f1c578b894ede17e654699e..fc2b02a5ca5c8f3b5db12f5c89c5516d115c02ec 100755 (executable)
@@ -169,6 +169,7 @@ dlink,dwr-921-c1)
        ;;
 dir-810l|\
 elecom,wrc-1167ghbk2-s|\
+iodata,wn-ax1167gr|\
 iodata,wn-gx300gr|\
 mzk-750dhp|\
 mzk-dp150n|\
index a9bc7fd0205004576b6b34ea664b1472b38c6431..768207adb1468ebd94d3ef9dbd10acbecdebfda6 100755 (executable)
@@ -232,6 +232,7 @@ ramips_setup_interfaces()
                ;;
        dir-860l-b1|\
        elecom,wrc-1167ghbk2-s|\
+       iodata,wn-ax1167gr|\
        iodata,wn-gx300gr)
                ucidef_add_switch "switch0" \
                        "1:lan:4" "2:lan:3" "3:lan:2" "4:lan:1" "0:wan" "6@eth0"
@@ -479,6 +480,7 @@ ramips_setup_macs()
                [ -n "$lan_mac" ] || lan_mac=$(cat /sys/class/net/eth0/address)
                wan_mac=$(macaddr_add "$lan_mac" 1)
                ;;
+       iodata,wn-ax1167gr|\
        iodata,wn-gx300gr)
                wan_mac=$(macaddr_add "$(mtd_get_mac_binary Factory 4)" 1)
                ;;
index a61fedbd7bc2bb319c956ed221e5d092f22dbc58..17566ad1fdbbe73cbeeca384d4cba8ef17bd65e4 100644 (file)
@@ -28,6 +28,7 @@ get_status_led() {
        fonera20n|\
        firewrt|\
        hg255d|\
+       iodata,wn-ax1167gr|\
        iodata,wn-gx300gr|\
        kn|\
        kn_rc|\
index 4f9165b18b243ba129393017210ba0475b0e7dbf..1dd84447935ac044a817a6a48533df70f1cf7c1c 100755 (executable)
@@ -76,6 +76,7 @@ platform_check_image() {
        hpm|\
        ht-tm02|\
        hw550-3g|\
+       iodata,wn-ax1167gr|\
        iodata,wn-gx300gr|\
        ip2202|\
        jhr-n805r|\
diff --git a/target/linux/ramips/dts/WN-AX1167GR.dts b/target/linux/ramips/dts/WN-AX1167GR.dts
new file mode 100644 (file)
index 0000000..cc8ef44
--- /dev/null
@@ -0,0 +1,165 @@
+/dts-v1/;
+
+#include "mt7621.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+       compatible = "iodata,wn-ax1167gr", "mediatek,mt7621-soc";
+       model = "I-O DATA WN-AX1167GR";
+
+       memory@0 {
+               device_type = "memory";
+               reg = <0x0 0x4000000>;
+       };
+
+       chosen {
+               bootargs = "console=ttyS0,115200";
+       };
+
+       gpio-leds {
+               compatible = "gpio-leds";
+
+               power {
+                       label = "wn-ax1167gr:green:power";
+                       gpios = <&gpio0 7 GPIO_ACTIVE_LOW>;
+               };
+
+               wps {
+                       label = "wn-ax1167gr:green:wps";
+                       gpios = <&gpio0 17 GPIO_ACTIVE_LOW>;
+               };
+       };
+
+       gpio-keys-polled {
+               compatible = "gpio-keys-polled";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               poll-interval = <20>;
+
+               reset {
+                       label = "reset";
+                       gpios = <&gpio0 10 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+               };
+
+               wps {
+                       label = "wps";
+                       gpios = <&gpio0 14 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_WPS_BUTTON>;
+               };
+
+               auto {
+                       label = "auto";
+                       gpios = <&gpio0 15 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_0>;
+                       linux,input-type = <EV_SW>;
+               };
+
+               custom {
+                       label = "custom";
+                       gpios = <&gpio0 16 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_0>;
+                       linux,input-type = <EV_SW>;
+               };
+       };
+};
+
+&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 = "Bootloader";
+                       reg = <0x0 0x30000>;
+                       read-only;
+               };
+
+               partition@30000 {
+                       label = "Config";
+                       reg = <0x30000 0x10000>;
+                       read-only;
+               };
+
+               Factory: partition@40000 {
+                       label = "Factory";
+                       reg = <0x40000 0x10000>;
+                       read-only;
+               };
+
+               iNIC_rf: partition@50000 {
+                       label = "iNIC_rf";
+                       reg = <0x50000 0x10000>;
+                       read-only;
+               };
+
+               partition@60000 {
+                       label = "firmware";
+                       reg = <0x60000 0xf30000>;
+               };
+
+               partition@f90000 {
+                       label = "Key";
+                       reg = <0xf90000 0x10000>;
+                       read-only;
+               };
+
+               partition@fa0000 {
+                       label = "backup";
+                       reg = <0xfa0000 0x10000>;
+                       read-only;
+               };
+
+               partition@fb0000 {
+                       label = "storage";
+                       reg = <0xfb0000 0x50000>;
+                       read-only;
+               };
+       };
+};
+
+&ethernet {
+       mtd-mac-address = <&iNIC_rf 0x4>;
+};
+
+&pinctrl {
+       state_default: pinctrl0 {
+               gpio {
+                       ralink,group = "uart2", "uart3", "jtag";
+                       ralink,function = "gpio";
+               };
+       };
+};
+
+&pcie {
+       status = "okay";
+
+       pcie0 {
+               mt76@0,0 {
+                       reg = <0x0000 0 0 0 0>;
+                       device_type = "pci";
+                       mediatek,mtd-eeprom = <&iNIC_rf 0x0>;
+               };
+       };
+
+       pcie1 {
+               mt76@1,0 {
+                       reg = <0x0000 0 0 0 0>;
+                       device_type = "pci";
+                       mediatek,mtd-eeprom = <&Factory 0x0>;
+                       ieee80211-freq-limit = <5000000 6000000>;
+               };
+       };
+};
+
+&xhci {
+       status = "disabled";
+};
index 754c55c359de33e6b94e1110240bced53143af08..af9e2afb59f3cd1ecf03c5732c1519670a1e0400 100644 (file)
@@ -17,6 +17,23 @@ define Build/elecom-wrc-factory
   mv $@.new $@
 endef
 
+define Build/iodata-factory
+  $(eval fw_size=$(word 1,$(1)))
+  $(eval fw_type=$(word 2,$(1)))
+  $(eval product=$(word 3,$(1)))
+  $(eval factory_bin=$(word 4,$(1)))
+  if [ -e $(KDIR)/tmp/$(KERNEL_INITRAMFS_IMAGE) -a "$$(stat -c%s $@)" -lt "$(fw_size)" ]; then \
+    $(CP) $(KDIR)/tmp/$(KERNEL_INITRAMFS_IMAGE) $(factory_bin); \
+    $(STAGING_DIR_HOST)/bin/mksenaofw \
+      -r 0x30a -p $(product) -t $(fw_type) \
+      -e $(factory_bin) -o $(factory_bin).new; \
+    mv $(factory_bin).new $(factory_bin); \
+    $(CP) $(factory_bin) $(BIN_DIR)/; \
+       else \
+               echo "WARNING: initramfs kernel image too big, cannot generate factory image" >&2; \
+       fi
+endef
+
 define Build/ubnt-erx-factory-image
        if [ -e $(KDIR)/tmp/$(KERNEL_INITRAMFS_IMAGE) -a "$$(stat -c%s $@)" -lt "$(KERNEL_SIZE)" ]; then \
                echo '21001:6' > $(1).compat; \
@@ -137,6 +154,16 @@ define Device/hc5962
 endef
 TARGET_DEVICES += hc5962
 
+define Device/iodata_wn-ax1167gr
+  DTS := WN-AX1167GR
+  IMAGE_SIZE := 15552k
+  KERNEL_INITRAMFS := $$(KERNEL) | \
+    iodata-factory 7864320 4 0x1055 $(KDIR)/tmp/$$(KERNEL_INITRAMFS_PREFIX)-factory.bin
+  DEVICE_TITLE := I-O DATA WN-AX1167GR
+  DEVICE_PACKAGES := kmod-mt7603 kmod-mt76x2 wpad-mini
+endef
+TARGET_DEVICES += iodata_wn-ax1167gr
+
 define Device/iodata_wn-gx300gr
   DTS := WN-GX300GR
   IMAGE_SIZE := 7798784