ath79: fix support for Buffalo WZR-HP-G450H and split to dts/dtsi
authorINAGAKI Hiroshi <musashino.open@gmail.com>
Tue, 11 Sep 2018 11:13:17 +0000 (20:13 +0900)
committerMathias Kresin <dev@kresin.me>
Wed, 26 Sep 2018 18:35:07 +0000 (20:35 +0200)
There are many parts that are incorrect or missing in the current
code for Buffalo WZR-HP-G450H in ath79, so its support is broken.

I fixed that issues and split to dts/dtsi files to add support for
Buffalo BHR-4GRV.

And WZR-450HP has the same hardware as WZR-HP-G450H, so I change the
device name to "WZR-HP-G450H/WZR-450HP".

Specification:

- Atheros AR7242
- 64 MB of RAM
- 32 MB of Flash
  - 2x 16 MB SPI-NOR flash
- 3T3R 2.4 GHz wifi
  - SoC internal
- 5x 10/100/1000 Mbps Ethernet
- 6x LEDs, 5x keys
- 1x USB 2.0 Type-A
- UART header on PCB
  - JP1: Vcc, GND, TX, RX from reset button side

Flash instruction using factory image:

1. Boot the WZR-HP-G450H (or WZR-450HP) normaly and connect the computer
to its LAN port
2. Access to
"http://192.168.11.1/cgi-bin/cgi?req=frm&frm=py-db/firmup.html"
with user "bufpy" and password "otdpopy"
3. Select the OpenWrt factory image and click "OK" button to perform
firmware update
4. Wait ~200 seconds to complete flashing

Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com>
target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
target/linux/ath79/dts/ar7242_buffalo_wzr-bhr.dtsi [new file with mode: 0644]
target/linux/ath79/dts/ar7242_buffalo_wzr-hp-g450h.dts
target/linux/ath79/image/generic.mk

index 334e705..8bcdb30 100644 (file)
@@ -120,6 +120,9 @@ case "$FIRMWARE" in
        tplink,tl-wr941-v4)
                ath9k_eeprom_extract "art" 4096 3768
                ;;
+       buffalo,wzr-hp-g450h)
+               ath9k_eeprom_extract "ART" 4096 1088
+               ;;
        ocedo,raccoon|\
        tplink,tl-wdr3600|\
        tplink,tl-wdr4300|\
diff --git a/target/linux/ath79/dts/ar7242_buffalo_wzr-bhr.dtsi b/target/linux/ath79/dts/ar7242_buffalo_wzr-bhr.dtsi
new file mode 100644 (file)
index 0000000..c82cf83
--- /dev/null
@@ -0,0 +1,174 @@
+// 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 "ar7242.dtsi"
+
+/ {
+       aliases {
+               led-boot = &diag;
+               led-failsafe = &diag;
+               led-upgrade = &diag;
+       };
+
+       extosc: ref {
+               compatible = "fixed-clock";
+               #clock-cells = <0>;
+               clock-frequency = <40000000>;
+       };
+
+       keys: keys {
+               compatible = "gpio-keys-polled";
+               poll-interval = <20>;
+
+               usb {
+                       label = "usb";
+                       linux,code = <BTN_2>;
+                       gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
+                       debounce-interval = <60>;
+               };
+
+               reset {
+                       label = "reset";
+                       linux,code = <KEY_RESTART>;
+                       gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
+                       debounce-interval = <60>;
+               };
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               sec_vpn: sec_vpn {
+                       gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
+                       default-state = "off";
+               };
+
+               diag: diag {
+                       label = "buffalo:red:diag";
+                       gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
+                       default-state = "off";
+               };
+
+               usb {
+                       label = "buffalo:green:usb";
+                       gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
+                       default-state = "off";
+                       trigger-sources = <&hub_port>;
+                       linux,default-trigger = "usbport";
+               };
+       };
+
+       gpio-export {
+               compatible = "gpio-export";
+               #size-cells = <0>;
+
+               gpio_usb_power {
+                       gpio-export,name = "buffalo:usb-power";
+                       gpio-export,output = <1>;
+                       gpios = <&gpio 16 GPIO_ACTIVE_HIGH>;
+               };
+       };
+
+       virtual_flash {
+               compatible = "mtd-concat";
+               devices = <&flash0 &flash1>;
+
+               partitions {
+                       compatible = "fixed-partitions";
+                       #address-cells = <1>;
+                       #size-cells = <1>;
+
+                       partition@0 {
+                               reg = <0x0 0x40000>;
+                               label = "u-boot";
+                               read-only;
+                       };
+
+                       partition@40000 {
+                               reg = <0x40000 0x10000>;
+                               label = "u-boot-env";
+                       };
+
+                       ART: partition@50000 {
+                               reg = <0x50000 0x10000>;
+                               label = "ART";
+                               read-only;
+                       };
+
+                       partition@60000 {
+                               reg = <0x60000 0x1f80000>;
+                               label = "firmware";
+                       };
+
+                       partition@1fe0000 {
+                               reg = <0x1fe0000 0x20000>;
+                               label = "user_property";
+                               read-only;
+                       };
+               };
+       };
+};
+
+&spi {
+       status = "okay";
+       cs-gpios = <0>, <0>;
+       num-cs = <2>;
+
+       flash0: flash@0 {
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <25000000>;
+       };
+
+       flash1: flash@1 {
+               compatible = "jedec,spi-nor";
+               reg = <1>;
+               spi-max-frequency = <25000000>;
+       };
+};
+
+&mdio0 {
+       status = "okay";
+
+       phy-mask = <0x1>;
+
+       phy0: ethernet-phy@0 {
+               reg = <0>;
+               phy-mode = "rgmii";
+       };
+};
+
+&eth0 {
+       status = "okay";
+
+       mtd-mac-address = <&ART 0x1002>;
+
+       phy-mode = "rgmii";
+       phy-handle = <&phy0>;
+};
+
+&pll {
+       clocks = <&extosc>;
+};
+
+&uart {
+       status = "okay";
+};
+
+&usb_phy {
+       status = "okay";
+};
+
+&usb {
+       #address-cells = <1>;
+       #size-cells = <0>;
+       status = "okay";
+
+       hub_port: port@1 {
+               reg = <1>;
+               #trigger-source-cells = <0>;
+       };
+};
index 8ff2c71..804132d 100644 (file)
 #include <dt-bindings/gpio/gpio.h>
 #include <dt-bindings/input/input.h>
 
-#include "ar7242.dtsi"
+#include "ar7242_buffalo_wzr-bhr.dtsi"
 
 / {
        compatible = "buffalo,wzr-hp-g450h", "qca,ar7242";
-       model = "Buffalo WZR-HP-G450H";
+       model = "Buffalo WZR-HP-G450H/WZR-450HP";
 
-       keys {
-               compatible = "gpio-keys-polled";
-               poll-interval = <20>;
-
-               usb {
-                       linux,code = <BTN_2>;
-                       gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
-                       debounce-interval = <60>;
-               };
-
-               reset {
-                       linux,code = <KEY_RESTART>;
-                       gpios = <&gpio 6 GPIO_ACTIVE_LOW>;
-                       debounce-interval = <60>;
-               };
-
-               movie_engine {
-                       linux,code = <KEY_RESTART>;
-                       gpios = <&gpio 7 GPIO_ACTIVE_HIGH>;
-                       debounce-interval = <60>;
-               };
-
-               aoss {
-                       linux,code = <KEY_WPS_BUTTON>;
-                       gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
-                       debounce-interval = <60>;
-               };
-
-               router_off {
-                       linux,code = <BTN_5>;
-                       gpios = <&gpio 12 GPIO_ACTIVE_HIGH>;
-                       debounce-interval = <60>;
-               };
-       };
-
-       leds {
+       ath9k-leds {
                compatible = "gpio-leds";
-               security {
-                       label = "buffalo:orange:security";
-                       gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
-               };
 
-               diag {
-                       label = "buffalo:red:diag";
-                       gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
+               led_movie_engine {
+                       label = "buffalo:blue:movie_engine";
+                       gpios = <&ath9k 13 GPIO_ACTIVE_LOW>;
+                       default-state = "off";
                };
-       };
 
-       gpio-export {
-               compatible = "gpio-export";
-               #size-cells = <0>;
+               router {
+                       label = "buffalo:green:router";
+                       gpios = <&ath9k 14 GPIO_ACTIVE_LOW>;
+                       default-state = "off";
+               };
 
-               gpio_usb_power {
-                       gpio-export,name = "wzr-hp-g450h:usb-power";
-                       gpio-export,output = <1>;
-                       gpios = <&gpio 16 GPIO_ACTIVE_HIGH>;
+               wireless {
+                       label = "buffalo:green:wireless";
+                       gpios = <&ath9k 15 GPIO_ACTIVE_LOW>;
+                       default-state = "off";
+                       linux,default-trigger = "phy0tpt";
                };
        };
 };
 
-&mdio0 {
-       status = "okay";
-       phy-mask = <0x1>;
-
-       phy0: ethernet-phy@0 {
-               reg = <0>;
-               phy-mode = "rgmii";
+&keys {
+       movie_engine {
+               label = "movie_engine";
+               linux,code = <BTN_6>;
+               linux,input-type = <EV_SW>;
+               gpios = <&gpio 7 GPIO_ACTIVE_HIGH>;
+               debounce-interval = <60>;
        };
-};
-
-&eth0 {
-       status = "okay";
-
-       phy-mode = "rgmii";
-       pll-data = <0x62000000 0 0>;
 
-       fixed-link {
-               speed = <1000>;
-               full-duplex;
+       aoss {
+               label = "aoss";
+               linux,code = <KEY_WPS_BUTTON>;
+               gpios = <&gpio 8 GPIO_ACTIVE_LOW>;
+               debounce-interval = <60>;
        };
-};
-
-&uart {
-       status = "okay";
-};
 
-&usb_phy {
-       status = "okay";
+       router_off {
+               label = "router_off";
+               linux,code = <BTN_5>;
+               linux,input-type = <EV_SW>;
+               gpios = <&gpio 12 GPIO_ACTIVE_HIGH>;
+               debounce-interval = <60>;
+       };
 };
 
-&usb {
-       status = "okay";
+&sec_vpn {
+       label = "buffalo:orange:security";
 };
 
 &pcie {
        status = "okay";
 
-       wifi@0,0 {
+       ath9k: wifi@0,0 {
+               compatible = "pci168c,0030";
                reg = <0x0000 0 0 0 0>;
+               mtd-mac-address = <&ART 0x1002>;
                qca,no-eeprom;
+               #gpio-cells = <2>;
+               gpio-controller;
        };
 };
index 2727fb6..91325cf 100644 (file)
@@ -84,9 +84,13 @@ TARGET_DEVICES += buffalo_wzr-hp-ag300h
 
 define Device/buffalo_wzr-hp-g450h
   ATH_SOC := ar7242
-  DEVICE_TITLE := Buffalo WZR-HP-G450H
+  DEVICE_TITLE := Buffalo WZR-HP-G450H/WZR-450HP
   DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
   IMAGE_SIZE := 32256k
+  IMAGES += factory.bin tftp.bin
+  IMAGE/default := append-kernel | pad-to $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | check-size $$$$(IMAGE_SIZE)
+  IMAGE/factory.bin := $$(IMAGE/default) | buffalo-enc WZR-HP-G450H 1.99 | buffalo-tag WZR-HP-G450H
+  IMAGE/tftp.bin := $$(IMAGE/default) | buffalo-tftp-header
   SUPPORTED_DEVICES += wzr-hp-g450h
 endef
 TARGET_DEVICES += buffalo_wzr-hp-g450h