ath79: add support for ELECOM WRC-300GHBK2-I
authorINAGAKI Hiroshi <musashino.open@gmail.com>
Mon, 10 Sep 2018 07:30:28 +0000 (09:30 +0200)
committerJohn Crispin <john@phrozen.org>
Mon, 10 Sep 2018 07:30:28 +0000 (09:30 +0200)
ELECOM WRC-300GHBK2-I is a 2.4 GHz wireless router, based on Qualcomm
Atheros QCA9563.

Specification:

- Qualcomm Atheros QCA9563
- 64 MB of RAM (DDR2)
- 8 MB of Flash (SPI-NOR)
- 2T2R 2.4 GHz wifi
  - SoC internal
- 5x 10/100/1000 Mbps Ethernet
- 3x LEDs, 4x keys(connected to GPIO: 3x)
- UART header on PCB
  - TX, GND, RX, Vcc from ethernet port side
  - 115200n8

Flash instruction using factory image:

1. Boot the WRC-300GHBK2-I normaly and connect the computer to its
LAN port
2. Access to "http://192.168.2.1/" and open firmware update page
("ファームウェア更新 手動更新(アップデート)")
3. Select the OpenWrt factory image and click apply ("適用") button
to perform firmware update
4. On the (initramfs) factory image, execute "mtd erase firmware" to
erase stock firmware and execute sysupgrade with squashfs-sysupgrade
image for WRC-300GHBK2-I
5. Wait ~150 seconds to complete flashing

Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com>
target/linux/ath79/base-files/etc/board.d/02_network
target/linux/ath79/dts/qca9563_elecom_wrc-300ghbk2-i.dts [new file with mode: 0644]
target/linux/ath79/image/generic.mk

index 3a3c5974bd04ebb5dbb502a878e371f0c6464867..6cd794e3d953a414545bd8beb104b10b87b0906d 100755 (executable)
@@ -40,6 +40,10 @@ ath79_setup_interfaces()
                ucidef_add_switch "switch0" \
                        "0:lan" "1:lan" "2:lan" "3:lan" "5@eth0"
                ;;
+       elecom,wrc-300ghbk2-i)
+               ucidef_add_switch "switch0" \
+                       "0@eth0" "2:lan:4" "3:lan:3" "4:lan:2" "5:lan:1" "1:wan"
+               ;;
        embeddedwireless,dorin)
                ucidef_add_switch "switch0" \
                        "0@eth0" "1:wan" "2:lan:3" "3:lan:2"
@@ -177,6 +181,9 @@ ath79_setup_macs()
                lan_mac=$(mtd_get_mac_text "caldata" 65440)
                wan_mac=$(mtd_get_mac_text "caldata" 65460)
                ;;
+       elecom,wrc-300ghbk2-i)
+               wan_mac=$(macaddr_add "$(mtd_get_mac_binary ART 4098)" -2)
+               ;;
        iodata,etg3-r)
                lan_mac=$(mtd_get_mac_ascii u-boot-env ethaddr)
                wan_mac=$(macaddr_add "$lan_mac" -1)
diff --git a/target/linux/ath79/dts/qca9563_elecom_wrc-300ghbk2-i.dts b/target/linux/ath79/dts/qca9563_elecom_wrc-300ghbk2-i.dts
new file mode 100644 (file)
index 0000000..7052795
--- /dev/null
@@ -0,0 +1,160 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+#include "qca956x.dtsi"
+
+/ {
+       model = "ELECOM WRC-300GHBK2-I";
+       compatible = "elecom,wrc-300ghbk2-i", "qca,qca9563";
+
+       chosen {
+               bootargs = "console=ttyS0,115200n8";
+       };
+
+       aliases {
+               led-boot = &power;
+               led-failsafe = &power;
+               led-running = &power;
+               led-upgrade = &power;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               power: power {
+                       label = "wrc-300ghbk2-i:white:power";
+                       gpios = <&gpio 1 GPIO_ACTIVE_HIGH>;
+                       default-state = "on";
+               };
+
+               wlan2g {
+                       label = "wrc-300ghbk2-i:white:wlan2g";
+                       gpios = <&gpio 7 GPIO_ACTIVE_HIGH>;
+                       default-state = "off";
+                       linux,default-trigger = "phy0tpt";
+               };
+
+               wps {
+                       label = "wrc-300ghbk2-i:red:wps";
+                       gpios = <&gpio 9 GPIO_ACTIVE_HIGH>;
+                       default-state = "off";
+               };
+       };
+
+       keys {
+               compatible = "gpio-keys";
+
+               reset {
+                       label = "reset";
+                       gpios = <&gpio 2 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+                       debounce-interval = <60>;
+               };
+
+               button_wps {
+                       label = "wps";
+                       gpios = <&gpio 5 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_WPS_BUTTON>;
+                       debounce-interval = <60>;
+               };
+
+               ap {
+                       label = "ap";
+                       gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
+                       linux,code = <BTN_0>;
+                       linux,input-type = <EV_SW>;
+                       debounce-interval = <60>;
+               };
+       };
+};
+
+&spi {
+       status = "okay";
+       num-cs = <1>;
+
+       flash@0 {
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <25000000>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               label = "u-boot";
+                               reg = <0x000000 0x040000>;
+                               read-only;
+                       };
+
+                       partition@40000 {
+                               label = "u-boot-env";
+                               reg = <0x040000 0x010000>;
+                               read-only;
+                       };
+
+                       partition@50000 {
+                               label = "nvram";
+                               reg = <0x050000 0x020000>;
+                               read-only;
+                       };
+
+                       partition@70000 {
+                               label = "firmware";
+                               reg = <0x070000 0x770000>;
+                       };
+
+                       partition@7e0000 {
+                               label = "hwconfig";
+                               reg = <0x7e0000 0x010000>;
+                               read-only;
+                       };
+
+                       ART: partition@7f0000 {
+                               label = "ART";
+                               reg = <0x7f0000 0x010000>;
+                               read-only;
+                       };
+               };
+       };
+};
+
+&mdio0 {
+       status = "okay";
+
+       phy0: ethernet-phy@0 {
+               reg = <0>;
+               phy-mode = "sgmii";
+
+               qca,ar8327-initvals = <
+                       0x04 0x00000080 /* PORT0 PAD MODE CTRL */
+                       0x50 0xcf37cf37 /* LED_CTRL0 */
+                       0x54 0x00000000 /* LED_CTRL1 */
+                       0x58 0x00000000 /* LED_CTRL2 */
+                       0x5c 0x03ffff00 /* LED_CTRL3 */
+                       0x7c 0x0000007e /* PORT0_STATUS */
+               >;
+       };
+};
+
+&eth0 {
+       status = "okay";
+
+       mtd-mac-address = <&ART 0x1002>;
+       mtd-mac-address-increment = <(-1)>;
+       phy-mode = "sgmii";
+       phy-handle = <&phy0>;
+};
+
+&uart {
+       status = "okay";
+};
+
+&wmac {
+       status = "okay";
+       mtd-cal-data = <&ART 0x1000>;
+};
index 60dc512f06826ff51b05f17db2b63e478be1bbf0..fc38c09958bcc45b43db0a6f8e7b17e6a11970c8 100644 (file)
@@ -17,6 +17,31 @@ define Build/addpattern
        -mv "$@.new" "$@"
 endef
 
+define Build/elecom-header
+  $(eval fw_size=$(word 1,$(1)))
+  $(eval edimax_model=$(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/mkedimaximg \
+      -b -s CSYS -m $(edimax_model) \
+      -f 0x70000 -S 0x01100000 \
+      -i $(factory_bin) -o $(factory_bin).new; \
+    mv $(factory_bin).new $(factory_bin); \
+    ( \
+      echo -n -e "ELECOM\x00\x00$(product)" | dd bs=40 count=1 conv=sync; \
+      echo -n "0.00" | dd bs=16 count=1 conv=sync; \
+      dd if=$(factory_bin); \
+    ) > $(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 Device/avm_fritz300e
   ATH_SOC := ar7242
   DEVICE_TITLE := AVM FRITZ!WLAN Repeater 300E
@@ -62,6 +87,16 @@ define Device/dlink_dir-825-b1
 endef
 TARGET_DEVICES += dlink_dir-825-b1
 
+define Device/elecom_wrc-300ghbk2-i
+  ATH_SOC := qca9563
+  DEVICE_TITLE := ELECOM WRC-300GHBK2-I
+  IMAGE_SIZE := 7616k
+  KERNEL_INITRAMFS := $$(KERNEL) | pad-to 2 | \
+    elecom-header 7798706 RN51 WRC-300GHBK2-I \
+      $(KDIR)/tmp/$$(KERNEL_INITRAMFS_PREFIX)-factory.bin
+endef
+TARGET_DEVICES += elecom_wrc-300ghbk2-i
+
 define Device/embeddedwireless_dorin
   ATH_SOC := ar9331
   DEVICE_TITLE := Embedded Wireless Dorin