mvebu: add support for RIPE Atlas Probe v5
authorTomáš Macholda <tomas.macholda@nic.cz>
Thu, 11 Sep 2025 12:45:12 +0000 (14:45 +0200)
committerHauke Mehrtens <hauke@hauke-m.de>
Thu, 12 Feb 2026 21:21:51 +0000 (22:21 +0100)
RIPE Atlas Probe v5 is a network measurement device based on Turris MOX.

u-boot bootscript supports booting both from the original Turris BTRFS
layout and default OpenWrt ext4 boot + root partition layout.

Specifications:
* SoC: Marvell ARMADA 3720
* RAM: 512 MiB, DDR3
* eMMC: 4G
* Ethernet: 1x 1GbE

MAC:
LAN MAC: label on board

Flash instructions:
* For using the default ext4 layout, boot into a live system using
tftpboot in u-boot and flash an OpenWrt SD image onto /dev/mmcblk0.
* For the Turris layout, put the new rootfs into subvolume '@', not
forgetting to add Image, device tree, and boot.scr to /boot.

Misc:
* USB connection is only for power. For UART access use the pin header:
  1: GND
  2: +1.8V
  5: TX
  6: RX
* Flashing the image onto Turris Shield won't work. Use Turris MOX image
  instead.

Signed-off-by: Tomáš Macholda <tomas.macholda@nic.cz>
Link: https://github.com/openwrt/openwrt/pull/20031
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
package/boot/uboot-mvebu/Makefile
target/linux/mvebu/cortexa53/base-files/etc/board.d/01_leds
target/linux/mvebu/cortexa53/base-files/etc/board.d/02_network
target/linux/mvebu/files/arch/arm64/boot/dts/marvell/armada-3720-atlas-v5.dts [new file with mode: 0644]
target/linux/mvebu/image/cortexa53.mk
target/linux/mvebu/image/ripe-atlas.bootscript [new file with mode: 0644]

index 93e083d85fc81a7a0be60a7576133f552e4394d0..e3510985173990473e433739d8dd5d97f54165c0 100644 (file)
@@ -75,12 +75,20 @@ define U-Boot/rb5009
   UBOOT_IMAGE:=u-boot.elf
 endef
 
+define U-Boot/atlas
+  NAME:=RIPE Atlas Probe v5
+  BUILD_DEVICES:=ripe_atlas-v5
+  BUILD_SUBTARGET:=cortexa53
+  UBOOT_CONFIG:=turris_mox
+endef
+
 UBOOT_TARGETS:= \
        mox \
        clearfog \
        helios4 \
        omnia \
        espressobin \
+       atlas \
        uDPU \
        eDPU \
        rb5009
index 035fa4933bad9ed0738239c89b13c175073c07b1..2794aaeced018b5b07feebffda359bc13b44f909 100644 (file)
@@ -13,6 +13,9 @@ cznic,turris-mox)
 glinet,gl-mv1000)
        ucidef_set_led_netdev "wan" "WAN" "green:wan" "wan"
        ;;
+ripe,atlas-v5)
+       ucidef_set_led_heartbeat "lan" "LAN" "red:activity"
+       ;;
 esac
 
 board_config_flush
index c70af063cef61fcac31078219fc2edb649ad1767..c299a655c5b98d11535e039b92008e067c732170 100644 (file)
@@ -44,6 +44,9 @@ methode,edpu)
        ucidef_set_interfaces_lan_wan "eth1" "eth0"
        fi
        ;;
+ripe,atlas-v5)
+       ucidef_set_interface_lan "eth0"
+       ;;
 *)
        ucidef_set_interface_lan "eth0"
        ;;
diff --git a/target/linux/mvebu/files/arch/arm64/boot/dts/marvell/armada-3720-atlas-v5.dts b/target/linux/mvebu/files/arch/arm64/boot/dts/marvell/armada-3720-atlas-v5.dts
new file mode 100644 (file)
index 0000000..070d10a
--- /dev/null
@@ -0,0 +1,110 @@
+// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
+/*
+ * Device Tree file for RIPE Atlas Probe v5
+ * 2025 by Marek Behún <kabel@kernel.org>
+ */
+
+/dts-v1/;
+
+#include <dt-bindings/bus/moxtet.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/leds/common.h>
+#include "armada-372x.dtsi"
+
+/ {
+       model = "RIPE Atlas Probe v5";
+       compatible = "ripe,atlas-v5", "marvell,armada3720",
+                    "marvell,armada3710";
+
+       aliases {
+               ethernet0 = &eth0;
+               mmc0 = &sdhci0;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       memory@0 {
+               device_type = "memory";
+               reg = <0x00000000 0x00000000 0x00000000 0x20000000>;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               led {
+                       gpios = <&gpiosb 21 GPIO_ACTIVE_LOW>;
+                       function = LED_FUNCTION_ACTIVITY;
+                       color = <LED_COLOR_ID_RED>;
+                       linux,default-trigger = "default-on";
+               };
+       };
+
+       vsdc_reg: vsdc-reg {
+               compatible = "regulator-gpio";
+               regulator-name = "vsdc";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <3300000>;
+               regulator-boot-on;
+
+               gpios = <&gpiosb 23 GPIO_ACTIVE_HIGH>;
+               gpios-states = <0>;
+               states = <1800000 0x1
+                         3300000 0x0>;
+               enable-active-high;
+       };
+
+       firmware {
+               armada-3700-rwtm {
+                       compatible = "marvell,armada-3700-rwtm-firmware", "cznic,turris-mox-rwtm";
+               };
+       };
+};
+
+&uart0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart1_pins>;
+       status = "okay";
+};
+
+&eth0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&rgmii_pins>;
+       phy-mode = "rgmii-id";
+       phy-handle = <&phy1>;
+       status = "okay";
+};
+
+&sdhci0 {
+       non-removable;
+       bus-width = <4>;
+       mmc-ddr-1_8v;
+       mmc-hs400-1_8v;
+       sd-uhs-sdr104;
+       marvell,xenon-emmc;
+       marvell,xenon-tun-count = <9>;
+       marvell,pad-type = "fixed-1-8v";
+       vqmmc-supply = <&vsdc_reg>;
+
+       pinctrl-names = "default";
+       pinctrl-0 = <&mmc_pins>;
+       status = "okay";
+
+       #address-cells = <1>;
+       #size-cells = <0>;
+       mmccard: mmccard@0 {
+               compatible = "mmc-card";
+               reg = <0>;
+       };
+};
+
+&mdio {
+       pinctrl-names = "default";
+       pinctrl-0 = <&smi_pins>;
+       status = "okay";
+
+       phy1: ethernet-phy@1 {
+               reg = <1>;
+       };
+};
index f5cbd8a70bf1229375b625991e1c0d111c3784ee..bf0c9be2e6f13a1e870b79561e76ac25fcb90a40 100644 (file)
@@ -117,3 +117,12 @@ define Device/methode_edpu
   KERNEL_INITRAMFS := kernel-bin | gzip | fit gzip $$(KDIR)/image-$$(DEVICE_DTS).dtb
 endef
 TARGET_DEVICES += methode_edpu
+
+define Device/ripe_atlas-v5
+  $(call Device/Default-arm64)
+  DEVICE_VENDOR := RIPE
+  DEVICE_MODEL := Atlas v5
+  SOC := armada-3720
+  BOOT_SCRIPT := ripe-atlas
+endef
+TARGET_DEVICES += ripe_atlas-v5
diff --git a/target/linux/mvebu/image/ripe-atlas.bootscript b/target/linux/mvebu/image/ripe-atlas.bootscript
new file mode 100644 (file)
index 0000000..a75760d
--- /dev/null
@@ -0,0 +1,51 @@
+if part uuid ${devtype} ${devnum}:${distro_bootpart} bootuuid; then
+       if test "${bootfstype}" = "btrfs"; then
+               # Original BTRFS partition layout
+               rootdev="PARTUUID=${bootuuid}"
+               rootflags="commit=5,subvol=@"
+               bootpath="/@/boot"
+       else
+               # OpenWrt default ext4 bootpart + rootpart layout
+               setexpr rootpart ${distro_bootpart} + 1
+               rootdev="/dev/mmcblk0p${rootpart}"
+               rootflags="commit=5"
+               bootpath="/"
+       fi
+
+       load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${bootpath}/armada-3720-atlas-v5.dtb
+       if test "$filesize" != "0"; then
+               has_dtb=1
+       else
+               setenv has_dtb 0
+               echo "Cannot find device tree binary!"
+       fi
+
+       if test $has_dtb -eq 1; then
+               load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} ${bootpath}/Image
+               if test "$filesize" = "0"; then
+                       echo "Failed to load ${bootpath}/Image"
+                       echo "Now trying ${bootpath}/Image.lzma"
+                       tmp_addr_r=0x10000000
+                       load ${devtype} ${devnum}:${distro_bootpart} ${tmp_addr_r} ${bootpath}/Image.lzma
+                       if test "$filesize" != "0"; then
+                               if lzmadec ${tmp_addr_r} ${kernel_addr_r}; then
+                                       echo "Successfully decompressed Image.lzma"
+                               else
+                                       echo "Failed decompressing Image.lzma"
+                                       filesize=0
+                               fi
+                       else
+                               echo "Failed to load ${subvol}/boot/Image.lzma"
+                       fi
+               fi
+               if test "$filesize" != "0"; then
+                       setenv bootargs "earlyprintk console=ttyMV0,115200 earlycon=ar3700_uart,0xd0012000 rootfstype=${bootfstype} root=${rootdev} rootflags=${rootflags} rootwait ${contract} rw cfg80211.freg=${regdomain} ${quirks}"
+                       booti ${kernel_addr_r} - ${fdt_addr_r}
+                       echo "Booting Image failed"
+               else
+                       echo "Cannot load kernel binary"
+               fi
+       fi
+
+       env delete bootuuid rootpart
+fi