From 7768f115349da48f44478f0c5b79f89ffa54c3f4 Mon Sep 17 00:00:00 2001 From: INAGAKI Hiroshi Date: Mon, 10 Sep 2018 09:30:28 +0200 Subject: [PATCH] ath79: add support for ELECOM WRC-300GHBK2-I MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .../ath79/base-files/etc/board.d/02_network | 7 + .../dts/qca9563_elecom_wrc-300ghbk2-i.dts | 160 ++++++++++++++++++ target/linux/ath79/image/generic.mk | 35 ++++ 3 files changed, 202 insertions(+) create mode 100644 target/linux/ath79/dts/qca9563_elecom_wrc-300ghbk2-i.dts diff --git a/target/linux/ath79/base-files/etc/board.d/02_network b/target/linux/ath79/base-files/etc/board.d/02_network index 3a3c5974bd..6cd794e3d9 100755 --- a/target/linux/ath79/base-files/etc/board.d/02_network +++ b/target/linux/ath79/base-files/etc/board.d/02_network @@ -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 index 0000000000..705279519c --- /dev/null +++ b/target/linux/ath79/dts/qca9563_elecom_wrc-300ghbk2-i.dts @@ -0,0 +1,160 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include +#include + +#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 = ; + debounce-interval = <60>; + }; + + button_wps { + label = "wps"; + gpios = <&gpio 5 GPIO_ACTIVE_LOW>; + linux,code = ; + debounce-interval = <60>; + }; + + ap { + label = "ap"; + gpios = <&gpio 6 GPIO_ACTIVE_LOW>; + linux,code = ; + linux,input-type = ; + 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 */ + >; + }; +}; + +ð0 { + 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>; +}; diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk index 60dc512f06..fc38c09958 100644 --- a/target/linux/ath79/image/generic.mk +++ b/target/linux/ath79/image/generic.mk @@ -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