ath79: Add support for OpenMesh OM2P v1
authorSven Eckelmann <sven@narfation.org>
Mon, 23 Nov 2020 12:41:34 +0000 (13:41 +0100)
committerHauke Mehrtens <hauke@hauke-m.de>
Sun, 16 Jan 2022 20:42:19 +0000 (21:42 +0100)
Device specifications:
======================

* Qualcomm/Atheros AR7240 rev 2
* 350/350/175 MHz (CPU/DDR/AHB)
* 32 MB of RAM
* 16 MB of SPI NOR flash
  - 2x 7 MB available; but one of the 7 MB regions is the recovery image
* 2x 10/100 Mbps Ethernet
* 1T1R 2.4 GHz Wi-Fi
* 6x GPIO-LEDs (3x wifi, 2x ethernet, 1x power)
* 1x GPIO-button (reset)
* external h/w watchdog (enabled by default)
* TTL pins are on board (arrow points to VCC, then follows: GND, TX, RX)
* 2x fast ethernet
  - eth0
    + 18-24V passive POE (mode B)
    + used as WAN interface
  - eth1
    + builtin switch port 4
    + used as LAN interface
* 12-24V 1A DC
* external antenna

The device itself requires the mtdparts from the uboot arguments to
properly boot the flashed image and to support dual-boot (primary +
recovery image). Unfortunately, the name of the mtd device in mtdparts is
still using the legacy name "ar7240-nor0" which must be supplied using the
Linux-specfic DT parameter linux,mtd-name to overwrite the generic name
"spi0.0".

Flashing instructions:
======================

Various methods can be used to install the actual image on the flash.
Two easy ones are:

ap51-flash
----------

The tool ap51-flash (https://github.com/ap51-flash/ap51-flash) should be
used to transfer the image to the u-boot when the device boots up.

initramfs from TFTP
-------------------

The serial console must be used to access the u-boot shell during bootup.
It can then be used to first boot up the initramfs image from a TFTP server
(here with the IP 192.168.1.21):

   setenv serverip 192.168.1.21
   setenv ipaddr 192.168.1.1
   tftpboot 0c00000 <filename-of-initramfs-kernel>.bin && bootm $fileaddr

The actual sysupgrade image can then be transferred (on the LAN port) to the
device via

  scp <filename-of-squashfs-sysupgrade>.bin root@192.168.1.1:/tmp/

On the device, the sysupgrade must then be started using

  sysupgrade -n /tmp/<filename-of-squashfs-sysupgrade>.bin

Signed-off-by: Sven Eckelmann <sven@narfation.org>
package/boot/uboot-envtools/files/ath79
target/linux/ath79/dts/ar7240_openmesh_om2p-v1.dts [new file with mode: 0644]
target/linux/ath79/generic/base-files/etc/board.d/01_leds
target/linux/ath79/generic/base-files/etc/board.d/02_network
target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
target/linux/ath79/generic/base-files/lib/upgrade/platform.sh
target/linux/ath79/image/generic.mk

index b01a713705027100f5b13e6b75c7974af87f843c..7aa992e458a9a5366261da938a6edcc2aeddf599 100644 (file)
@@ -103,6 +103,7 @@ netgear,wndr4300tn|\
 netgear,wndr4300sw)
        ubootenv_add_uci_config "/dev/mtd1" "0x0" "0x40000" "0x20000"
        ;;
+openmesh,om2p-v1|\
 openmesh,om2p-v2|\
 openmesh,om2p-v4|\
 openmesh,om2p-hs-v1|\
diff --git a/target/linux/ath79/dts/ar7240_openmesh_om2p-v1.dts b/target/linux/ath79/dts/ar7240_openmesh_om2p-v1.dts
new file mode 100644 (file)
index 0000000..456724a
--- /dev/null
@@ -0,0 +1,170 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "ar7240.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+       compatible = "openmesh,om2p-v1", "qca,ar7240";
+       model = "OpenMesh OM2P v1";
+
+       chosen {
+               /delete-property/ bootargs;
+       };
+
+       aliases {
+               led-boot = &led_power_blue;
+               led-failsafe = &led_power_blue;
+               led-running = &led_power_blue;
+               led-upgrade = &led_power_blue;
+               label-mac-device = &eth0;
+       };
+
+       keys {
+               compatible = "gpio-keys";
+
+               reset {
+                       label = "reset";
+                       linux,code = <KEY_RESTART>;
+                       gpios = <&gpio 1 GPIO_ACTIVE_LOW>;
+               };
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               pinctrl-names = "default";
+               pinctrl-0 = <&switch_led_disable_pins>;
+
+               led_power_blue: power_blue {
+                       label = "blue:power";
+                       gpios = <&gpio 0 GPIO_ACTIVE_LOW>;
+                       default-state = "on";
+               };
+
+               wifi_green {
+                       label = "green:wifi";
+                       gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "phy0tpt";
+               };
+
+               wifi_red {
+                       label = "red:wifi";
+                       gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
+               };
+
+               wifi_yellow {
+                       label = "yellow:wifi";
+                       gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
+               };
+
+               lan_blue {
+                       label = "blue:lan";
+                       gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
+               };
+
+               wan_blue {
+                       label = "blue:wan";
+                       gpios = <&gpio 17 GPIO_ACTIVE_LOW>;
+               };
+       };
+
+       watchdog {
+               compatible = "linux,wdt-gpio";
+               gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
+               hw_algo = "toggle";
+               /* hw_margin_ms is actually 300s but driver limits it to 60s */
+               hw_margin_ms = <60000>;
+               always-running;
+       };
+};
+
+&spi {
+       status = "okay";
+
+       flash@0 {
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <40000000>;
+               linux,mtd-name = "ar7240-nor0";
+
+               /* partitions are passed via bootloader */
+               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 0x040000>;
+                       };
+
+                       partition@80000 {
+                               label = "custom";
+                               reg = <0x080000 0x140000>;
+                               read-only;
+                       };
+
+                       partition@1c0000 {
+                               label = "inactive";
+                               reg = <0x1c0000 0x700000>;
+                       };
+
+                       partition@8c0000 {
+                               label = "inactive2";
+                               reg = <0x8c0000 0x700000>;
+                       };
+
+                       art: partition@fc0000 {
+                               label = "ART";
+                               reg = <0xfc0000 0x040000>;
+                               read-only;
+                       };
+               };
+       };
+};
+
+&eth0 {
+       nvmem-cells = <&macaddr_art_0>;
+       nvmem-cell-names = "mac-address";
+};
+
+&eth1 {
+       status = "okay";
+
+       nvmem-cells = <&macaddr_art_6>;
+       nvmem-cell-names = "mac-address";
+};
+
+&pcie {
+       status = "okay";
+
+       wifi@0,0 {
+               compatible = "pci168c,002a";
+               reg = <0x0000 0 0 0 0>;
+               qca,no-eeprom;
+               #gpio-cells = <2>;
+               gpio-controller;
+       };
+};
+
+&art {
+       compatible = "nvmem-cells";
+       #address-cells = <1>;
+       #size-cells = <1>;
+
+       macaddr_art_0: macaddr@0 {
+               reg = <0x0 0x6>;
+       };
+
+       macaddr_art_6: macaddr@6 {
+               reg = <0x6 0x6>;
+       };
+};
index 652b54092e02025d8f686756f423ccc0b250000b..03750856abd0c9ad764d1774542682728ec5258d 100644 (file)
@@ -271,6 +271,10 @@ openmesh,om2p-hs-v4)
        ucidef_set_led_netdev "wan" "WAN" "blue:wan" "eth0"
        ucidef_set_led_switch "lan" "LAN" "blue:lan" "switch0" "0x02"
        ;;
+openmesh,om2p-v1)
+       ucidef_set_led_netdev "wan" "WAN" "blue:wan" "eth0"
+       ucidef_set_led_switch "lan" "LAN" "blue:lan" "switch0" "0x10"
+       ;;
 openmesh,om5p-ac-v1)
        ucidef_set_led_netdev "lan" "LAN" "blue:lan" "eth0"
        ucidef_set_led_netdev "wan" "WAN" "blue:wan" "eth1"
index 88269c03ecb65ee598d04bee592c2c7bf0465f5a..54c415275719508b78d530b83823ec85eaf9cb9e 100644 (file)
@@ -188,6 +188,7 @@ ath79_setup_interfaces()
        compex,wpj531-16m|\
        openmesh,a40|\
        openmesh,a60|\
+       openmesh,om2p-v1|\
        openmesh,om2p-v4|\
        openmesh,om2p-hs-v4|\
        plasmacloud,pa300|\
index 10421c2e2806a86f6286c86ca1a322f944928df5..31b872e618f8dbac12238d90aee32a65b954b435 100644 (file)
@@ -131,6 +131,9 @@ case "$FIRMWARE" in
        openmesh,om5p-an)
                caldata_extract "ART" 0x5000 0x440
                ;;
+       openmesh,om2p-v1)
+               caldata_extract "ART" 0x1000 0x440
+               ;;
        wd,mynet-n600|\
        wd,mynet-n750)
                caldata_extract "art" 0x5000 0x440
index 13b6ec9d9910286efeeaf85c81c5a3ca50ad41b7..67e53c5fdebf29e71b920753be829fa4e41ca207 100644 (file)
@@ -73,6 +73,7 @@ platform_do_upgrade() {
        openmesh,mr900-v2|\
        openmesh,mr1750-v1|\
        openmesh,mr1750-v2|\
+       openmesh,om2p-v1|\
        openmesh,om2p-v2|\
        openmesh,om2p-v4|\
        openmesh,om2p-hs-v1|\
index 64efa28f847f617f49a19f01b99d25df208af9cc..7cde28e85b038e54b7e7f43730fab0fc7642b42a 100644 (file)
@@ -1836,6 +1836,16 @@ define Device/openmesh_mr1750-v2
 endef
 TARGET_DEVICES += openmesh_mr1750-v2
 
+define Device/openmesh_om2p-v1
+  $(Device/openmesh_common_256k)
+  SOC := ar7240
+  DEVICE_MODEL := OM2P
+  DEVICE_VARIANT := v1
+  OPENMESH_CE_TYPE := OM2P
+  SUPPORTED_DEVICES += om2p
+endef
+TARGET_DEVICES += openmesh_om2p-v1
+
 define Device/openmesh_om2p-v2
   $(Device/openmesh_common_256k)
   SOC := ar9330