]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
arm: mvebu: turris_mox: Extend to support RIPE Atlas Probe
authorMarek Behún <kabel@kernel.org>
Fri, 20 Oct 2023 14:29:16 +0000 (16:29 +0200)
committerStefan Roese <sr@denx.de>
Thu, 26 Oct 2023 12:49:36 +0000 (14:49 +0200)
Extend Turris Mox board code to support CZ.NIC's RIPE Atlas Probe.

Signed-off-by: Marek Behún <kabel@kernel.org>
Reviewed-by: Stefan Roese <sr@denx.de>
arch/arm/dts/Makefile
arch/arm/dts/armada-3720-ripe-atlas.dts [new file with mode: 0644]
arch/arm/mach-mvebu/Kconfig
board/CZ.NIC/turris_mox/mox_sp.c
board/CZ.NIC/turris_mox/mox_sp.h
board/CZ.NIC/turris_mox/turris_mox.c
configs/turris_mox_defconfig

index 70079974fa68e86eb631d67d7f094d9faac133db..55aceb51cdb00eb3f10477a0e886d081b0b6f930 100644 (file)
@@ -322,6 +322,7 @@ else
 dtb-$(CONFIG_ARCH_MVEBU) +=                    \
        armada-3720-db.dtb                      \
        armada-3720-espressobin.dtb             \
+       armada-3720-ripe-atlas.dtb              \
        armada-3720-turris-mox.dtb              \
        armada-3720-eDPU.dtb                    \
        armada-3720-uDPU.dtb                    \
diff --git a/arch/arm/dts/armada-3720-ripe-atlas.dts b/arch/arm/dts/armada-3720-ripe-atlas.dts
new file mode 100644 (file)
index 0000000..4457845
--- /dev/null
@@ -0,0 +1,91 @@
+// SPDX-License-Identifier: GPL-2.0+ or X11
+/*
+ * Device Tree file for CZ.NIC' RIPE Atlas Probe
+ * 2021 by Marek Behún <marek.behun@nic.cz>
+ */
+
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/leds/common.h>
+#include "armada-372x.dtsi"
+
+/ {
+       model = "CZ.NIC's RIPE Atlas Probe";
+       compatible = "cznic,ripe-atlas", "marvell,armada3720",
+                    "marvell,armada3710";
+
+       aliases {
+               ethernet0 = &eth0;
+               mmc0 = &sdhci0;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       memory {
+               device_type = "memory";
+               reg = <0x00000000 0x00000000 0x00000000 0x20000000>;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               led {
+                       gpios = <&gpiosb 21 GPIO_ACTIVE_LOW>;
+                       color = <LED_COLOR_ID_RED>;
+                       function = LED_FUNCTION_ACTIVITY;
+               };
+       };
+
+       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;
+       };
+};
+
+&comphy {
+       status = "disabled";
+};
+
+&mdio {
+       pinctrl-names = "default";
+       pinctrl-0 = <&smi_pins>;
+       status = "okay";
+
+       phy1: ethernet-phy@1 {
+               reg = <1>;
+       };
+};
+
+&eth0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&rgmii_pins>;
+       phy-mode = "rgmii";
+       phy-handle = <&phy1>;
+       status = "okay";
+};
+
+&sdhci0 {
+       bus-width = <8>;
+       non-removable;
+       vqmmc-supply = <&vsdc_reg>;
+       marvell,pad-type = "sd";
+       status = "okay";
+};
+
+&uart0 {
+       pinctrl-names = "default";
+       pinctrl-0 = <&uart1_pins>;
+       status = "okay";
+};
index 5c7f4bf964afc133cbf7af4b288314d5ef453032..c80d8587b14935bfe6854122bdafcd382c0154d4 100644 (file)
@@ -144,8 +144,12 @@ config TARGET_TURRIS_OMNIA
        select ATSHA204A
 
 config TARGET_TURRIS_MOX
-       bool "Support Turris Mox"
+       bool "Support CZ.NIC's Turris Mox / RIPE Atlas Probe"
        select ARMADA_3700
+       select BOARD_TYPES
+       select ENV_IS_IN_MMC
+       select ENV_IS_IN_SPI_FLASH
+       select MULTI_DTB_FIT
 
 config TARGET_MVEBU_ARMADA_8K
        bool "Support Armada 7k/8k platforms"
index 87f67512fbad751e9f684039260edb998c660a93..11d875647170d5096297d6fabeceda3d3cb28b7d 100644 (file)
@@ -10,6 +10,8 @@
 #include <linux/delay.h>
 #include <mach/mbox.h>
 
+#include "mox_sp.h"
+
 const char *mox_sp_get_ecdsa_public_key(void)
 {
        static char public_key[135];
@@ -42,12 +44,13 @@ static inline void res_to_mac(u8 *mac, u32 t1, u32 t2)
        mac[5] = t2;
 }
 
-int mbox_sp_get_board_info(u64 *sn, u8 *mac1, u8 *mac2, int *bv, int *ram)
+int mbox_sp_get_board_info(u64 *sn, u8 *mac1, u8 *mac2, int *bv, int *ram,
+                          enum cznic_a3720_board *board)
 {
-       u32 out[8];
+       u32 out[9];
        int res;
 
-       res = mbox_do_cmd(MBOX_CMD_BOARD_INFO, NULL, 0, out, 8);
+       res = mbox_do_cmd(MBOX_CMD_BOARD_INFO, NULL, 0, out, 9);
        if (res < 0)
                return res;
 
@@ -69,5 +72,8 @@ int mbox_sp_get_board_info(u64 *sn, u8 *mac1, u8 *mac2, int *bv, int *ram)
        if (mac2)
                res_to_mac(mac2, out[6], out[7]);
 
+       if (board)
+               *board = out[8] + 1;
+
        return 0;
 }
index 83b6037458546f0d8647ea59c0255692fe3c967f..720880d5df328806452cc2b43b50e683436a50b6 100644 (file)
@@ -8,8 +8,14 @@
 
 #include <common.h>
 
+enum cznic_a3720_board {
+       BOARD_UNDEFINED         = 0x0,
+       BOARD_TURRIS_MOX        = 0x1,
+       BOARD_RIPE_ATLAS        = 0x3,
+};
+
 const char *mox_sp_get_ecdsa_public_key(void);
 int mbox_sp_get_board_info(u64 *sn, u8 *mac1, u8 *mac2, int *bv,
-                          int *ram);
+                          int *ram, enum cznic_a3720_board *board);
 
 #endif /* _BOARD_CZNIC_TURRIS_MOX_MOX_SP_H_ */
index 370c2668b081e68f5d94483fce0515846d30b7e1..63b869921943200cf85b5cd5379c4843878e1115 100644 (file)
@@ -15,6 +15,7 @@
 #include <dm.h>
 #include <dm/of_extra.h>
 #include <env.h>
+#include <env_internal.h>
 #include <event.h>
 #include <fdt_support.h>
 #include <init.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
+int board_fit_config_name_match(const char *name)
+{
+       if (!gd->board_type) {
+               enum cznic_a3720_board board;
+
+               if (mbox_sp_get_board_info(NULL, NULL, NULL, NULL, NULL,
+                                          &board) < 0) {
+                       printf("Cannot determine board, defaulting to Turris MOX!\n");
+                       board = BOARD_TURRIS_MOX;
+               }
+
+               gd->board_type = board;
+       }
+
+       return !((gd->board_type == BOARD_TURRIS_MOX &&
+                 !strcmp(name, "armada-3720-turris-mox")) ||
+                (gd->board_type == BOARD_RIPE_ATLAS &&
+                 !strcmp(name, "armada-3720-ripe-atlas")));
+}
+
 #if defined(CONFIG_OF_BOARD_FIXUP)
 int board_fix_fdt(void *blob)
 {
@@ -53,6 +74,9 @@ int board_fix_fdt(void *blob)
        int i, size, ret;
        bool eth1_sgmii;
 
+       if (gd->board_type != BOARD_TURRIS_MOX)
+               return 0;
+
        /*
         * SPI driver is not loaded in driver model yet, but we have to find out
         * if pcie should be enabled in U-Boot's device tree. Therefore we have
@@ -388,16 +412,23 @@ static void load_spi_dtb(void)
 
 int misc_init_r(void)
 {
+       int i, ret, addrcnt;
        u8 mac[2][6];
-       int i, ret;
 
-       ret = mbox_sp_get_board_info(NULL, mac[0], mac[1], NULL, NULL);
+       ret = mbox_sp_get_board_info(NULL, mac[0], mac[1], NULL, NULL, NULL);
        if (ret < 0) {
                printf("Cannot read data from OTP!\n");
                return 0;
        }
 
-       for (i = 0; i < 2; ++i) {
+       if (gd->board_type == BOARD_TURRIS_MOX)
+               addrcnt = 2;
+       else if (gd->board_type == BOARD_RIPE_ATLAS)
+               addrcnt = 1;
+       else
+               addrcnt = 0;
+
+       for (i = 0; i < addrcnt; ++i) {
                u8 oldmac[6];
 
                if (is_valid_ethaddr(mac[i]) &&
@@ -405,7 +436,13 @@ int misc_init_r(void)
                        eth_env_set_enetaddr_by_index("eth", i, mac[i]);
        }
 
-       load_spi_dtb();
+       if (gd->board_type == BOARD_RIPE_ATLAS) {
+               env_set("board", "ripe_atlas");
+               env_set("board_name", "ripe_atlas");
+               env_set("fdtfile", "marvell/armada-3720-ripe-atlas.dtb");
+       } else {
+               load_spi_dtb();
+       }
 
        return 0;
 }
@@ -528,14 +565,15 @@ static void handle_reset_button(void)
 int show_board_info(void)
 {
        int i, ret, board_version, ram_size, is_sd;
-       const char *pub_key;
+       const char *pub_key, *model;
        const u8 *topology;
        u64 serial_number;
 
-       printf("Model: CZ.NIC Turris Mox Board\n");
+       model = fdt_getprop(gd->fdt_blob, 0, "model", NULL);
+       printf("Model: %s\n", model);
 
        ret = mbox_sp_get_board_info(&serial_number, NULL, NULL, &board_version,
-                                    &ram_size);
+                                    &ram_size, NULL);
        if (ret < 0) {
                printf("  Cannot read board info: %i\n", ret);
        } else {
@@ -550,6 +588,9 @@ int show_board_info(void)
        else
                printf("  Cannot read ECDSA Public Key\n");
 
+       if (gd->board_type != BOARD_TURRIS_MOX)
+               return 0;
+
        ret = mox_get_topology(&topology, &module_count, &is_sd);
        if (ret)
                printf("Cannot read module topology!\n");
@@ -668,10 +709,24 @@ err:
        return NULL;
 }
 
+enum env_location env_get_location(enum env_operation op, int prio)
+{
+       if (prio > 0)
+               return ENVL_UNKNOWN;
+
+       if (gd->board_type == BOARD_RIPE_ATLAS)
+               return ENVL_MMC;
+
+       return ENVL_SPI_FLASH;
+}
+
 static int last_stage_init(void)
 {
        struct gpio_desc reset_gpio = {};
 
+       if (gd->board_type != BOARD_TURRIS_MOX)
+               return 0;
+
        /* configure modules */
        if (get_reset_gpio(&reset_gpio) < 0)
                goto handle_reset_btn;
@@ -801,6 +856,9 @@ int ft_board_setup(void *blob, struct bd_info *bd)
 {
        int res;
 
+       if (gd->board_type != BOARD_TURRIS_MOX)
+               return 0;
+
        /*
         * If MOX B (PCI), MOX F (USB) or MOX G (Passthrough PCI) modules are
         * connected, enable the PCIe node.
index e0ca6337bd654ac06f8a9172fd521ab1f4dff982..c9815b612f0d24027c9197a80c9fe0b2269c8706 100644 (file)
@@ -52,9 +52,10 @@ CONFIG_CMD_HASH=y
 CONFIG_CMD_BTRFS=y
 CONFIG_CMD_EXT4_WRITE=y
 CONFIG_MAC_PARTITION=y
+CONFIG_OF_LIST="armada-3720-turris-mox armada-3720-ripe-atlas"
 CONFIG_ENV_OVERWRITE=y
-CONFIG_ENV_IS_IN_SPI_FLASH=y
 CONFIG_SYS_RELOC_GD_ENV_ADDR=y
+CONFIG_SYS_MMC_ENV_PART=2
 CONFIG_ARP_TIMEOUT=200
 CONFIG_NET_RETRY_COUNT=50
 CONFIG_NETCONSOLE=y