public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [PATCH u-boot-marvell] arm: mvebu: turris_mox: Extend to support RIPE Atlas Probe
@ 2023-10-20 14:29 Marek Behún
  2023-10-26  7:10 ` Stefan Roese
  0 siblings, 1 reply; 3+ messages in thread
From: Marek Behún @ 2023-10-20 14:29 UTC (permalink / raw)
  To: Stefan Roese
  Cc: U-Boot Mailing List, Michal Hrušecký, Marek Mojík,
	Maximilián Maliar, Marek Behún

Extend Turris Mox board code to support CZ.NIC's RIPE Atlas Probe.

Signed-off-by: Marek Behún <kabel@kernel.org>
---
 arch/arm/dts/Makefile                   |  1 +
 arch/arm/dts/armada-3720-ripe-atlas.dts | 91 +++++++++++++++++++++++++
 arch/arm/mach-mvebu/Kconfig             |  6 +-
 board/CZ.NIC/turris_mox/mox_sp.c        | 12 +++-
 board/CZ.NIC/turris_mox/mox_sp.h        |  8 ++-
 board/CZ.NIC/turris_mox/turris_mox.c    | 72 +++++++++++++++++--
 configs/turris_mox_defconfig            |  3 +-
 7 files changed, 180 insertions(+), 13 deletions(-)
 create mode 100644 arch/arm/dts/armada-3720-ripe-atlas.dts

diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
index 4569483d5f..e39a7647b4 100644
--- a/arch/arm/dts/Makefile
+++ b/arch/arm/dts/Makefile
@@ -319,6 +319,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
index 0000000000..4457845266
--- /dev/null
+++ b/arch/arm/dts/armada-3720-ripe-atlas.dts
@@ -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";
+};
diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig
index 5c7f4bf964..c80d8587b1 100644
--- a/arch/arm/mach-mvebu/Kconfig
+++ b/arch/arm/mach-mvebu/Kconfig
@@ -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"
diff --git a/board/CZ.NIC/turris_mox/mox_sp.c b/board/CZ.NIC/turris_mox/mox_sp.c
index 87f67512fb..11d8756471 100644
--- a/board/CZ.NIC/turris_mox/mox_sp.c
+++ b/board/CZ.NIC/turris_mox/mox_sp.c
@@ -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;
 }
diff --git a/board/CZ.NIC/turris_mox/mox_sp.h b/board/CZ.NIC/turris_mox/mox_sp.h
index 83b6037458..720880d5df 100644
--- a/board/CZ.NIC/turris_mox/mox_sp.h
+++ b/board/CZ.NIC/turris_mox/mox_sp.h
@@ -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_ */
diff --git a/board/CZ.NIC/turris_mox/turris_mox.c b/board/CZ.NIC/turris_mox/turris_mox.c
index 370c2668b0..63b8699219 100644
--- a/board/CZ.NIC/turris_mox/turris_mox.c
+++ b/board/CZ.NIC/turris_mox/turris_mox.c
@@ -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>
@@ -45,6 +46,26 @@
 
 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.
diff --git a/configs/turris_mox_defconfig b/configs/turris_mox_defconfig
index e0ca6337bd..c9815b612f 100644
--- a/configs/turris_mox_defconfig
+++ b/configs/turris_mox_defconfig
@@ -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
-- 
2.41.0


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH u-boot-marvell] arm: mvebu: turris_mox: Extend to support RIPE Atlas Probe
  2023-10-20 14:29 [PATCH u-boot-marvell] arm: mvebu: turris_mox: Extend to support RIPE Atlas Probe Marek Behún
@ 2023-10-26  7:10 ` Stefan Roese
  2023-10-27  6:47   ` Stefan Roese
  0 siblings, 1 reply; 3+ messages in thread
From: Stefan Roese @ 2023-10-26  7:10 UTC (permalink / raw)
  To: Marek Behún
  Cc: U-Boot Mailing List, Michal Hrušecký, Marek Mojík,
	Maximilián Maliar

On 10/20/23 16:29, Marek Behún wrote:
> 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>

Thanks,
Stefan


> ---
>   arch/arm/dts/Makefile                   |  1 +
>   arch/arm/dts/armada-3720-ripe-atlas.dts | 91 +++++++++++++++++++++++++
>   arch/arm/mach-mvebu/Kconfig             |  6 +-
>   board/CZ.NIC/turris_mox/mox_sp.c        | 12 +++-
>   board/CZ.NIC/turris_mox/mox_sp.h        |  8 ++-
>   board/CZ.NIC/turris_mox/turris_mox.c    | 72 +++++++++++++++++--
>   configs/turris_mox_defconfig            |  3 +-
>   7 files changed, 180 insertions(+), 13 deletions(-)
>   create mode 100644 arch/arm/dts/armada-3720-ripe-atlas.dts
> 
> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
> index 4569483d5f..e39a7647b4 100644
> --- a/arch/arm/dts/Makefile
> +++ b/arch/arm/dts/Makefile
> @@ -319,6 +319,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
> index 0000000000..4457845266
> --- /dev/null
> +++ b/arch/arm/dts/armada-3720-ripe-atlas.dts
> @@ -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";
> +};
> diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig
> index 5c7f4bf964..c80d8587b1 100644
> --- a/arch/arm/mach-mvebu/Kconfig
> +++ b/arch/arm/mach-mvebu/Kconfig
> @@ -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"
> diff --git a/board/CZ.NIC/turris_mox/mox_sp.c b/board/CZ.NIC/turris_mox/mox_sp.c
> index 87f67512fb..11d8756471 100644
> --- a/board/CZ.NIC/turris_mox/mox_sp.c
> +++ b/board/CZ.NIC/turris_mox/mox_sp.c
> @@ -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;
>   }
> diff --git a/board/CZ.NIC/turris_mox/mox_sp.h b/board/CZ.NIC/turris_mox/mox_sp.h
> index 83b6037458..720880d5df 100644
> --- a/board/CZ.NIC/turris_mox/mox_sp.h
> +++ b/board/CZ.NIC/turris_mox/mox_sp.h
> @@ -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_ */
> diff --git a/board/CZ.NIC/turris_mox/turris_mox.c b/board/CZ.NIC/turris_mox/turris_mox.c
> index 370c2668b0..63b8699219 100644
> --- a/board/CZ.NIC/turris_mox/turris_mox.c
> +++ b/board/CZ.NIC/turris_mox/turris_mox.c
> @@ -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>
> @@ -45,6 +46,26 @@
>   
>   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.
> diff --git a/configs/turris_mox_defconfig b/configs/turris_mox_defconfig
> index e0ca6337bd..c9815b612f 100644
> --- a/configs/turris_mox_defconfig
> +++ b/configs/turris_mox_defconfig
> @@ -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

Viele Grüße,
Stefan Roese

-- 
DENX Software Engineering GmbH,      Managing Director: Erika Unter
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH u-boot-marvell] arm: mvebu: turris_mox: Extend to support RIPE Atlas Probe
  2023-10-26  7:10 ` Stefan Roese
@ 2023-10-27  6:47   ` Stefan Roese
  0 siblings, 0 replies; 3+ messages in thread
From: Stefan Roese @ 2023-10-27  6:47 UTC (permalink / raw)
  To: Marek Behún
  Cc: U-Boot Mailing List, Michal Hrušecký, Marek Mojík,
	Maximilián Maliar

On 10/26/23 09:10, Stefan Roese wrote:
> On 10/20/23 16:29, Marek Behún wrote:
>> 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>

Applied to u-boot-marvell/master

Thanks,
Stefan

> Thanks,
> Stefan
> 
> 
>> ---
>>   arch/arm/dts/Makefile                   |  1 +
>>   arch/arm/dts/armada-3720-ripe-atlas.dts | 91 +++++++++++++++++++++++++
>>   arch/arm/mach-mvebu/Kconfig             |  6 +-
>>   board/CZ.NIC/turris_mox/mox_sp.c        | 12 +++-
>>   board/CZ.NIC/turris_mox/mox_sp.h        |  8 ++-
>>   board/CZ.NIC/turris_mox/turris_mox.c    | 72 +++++++++++++++++--
>>   configs/turris_mox_defconfig            |  3 +-
>>   7 files changed, 180 insertions(+), 13 deletions(-)
>>   create mode 100644 arch/arm/dts/armada-3720-ripe-atlas.dts
>>
>> diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile
>> index 4569483d5f..e39a7647b4 100644
>> --- a/arch/arm/dts/Makefile
>> +++ b/arch/arm/dts/Makefile
>> @@ -319,6 +319,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
>> index 0000000000..4457845266
>> --- /dev/null
>> +++ b/arch/arm/dts/armada-3720-ripe-atlas.dts
>> @@ -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";
>> +};
>> diff --git a/arch/arm/mach-mvebu/Kconfig b/arch/arm/mach-mvebu/Kconfig
>> index 5c7f4bf964..c80d8587b1 100644
>> --- a/arch/arm/mach-mvebu/Kconfig
>> +++ b/arch/arm/mach-mvebu/Kconfig
>> @@ -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"
>> diff --git a/board/CZ.NIC/turris_mox/mox_sp.c 
>> b/board/CZ.NIC/turris_mox/mox_sp.c
>> index 87f67512fb..11d8756471 100644
>> --- a/board/CZ.NIC/turris_mox/mox_sp.c
>> +++ b/board/CZ.NIC/turris_mox/mox_sp.c
>> @@ -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;
>>   }
>> diff --git a/board/CZ.NIC/turris_mox/mox_sp.h 
>> b/board/CZ.NIC/turris_mox/mox_sp.h
>> index 83b6037458..720880d5df 100644
>> --- a/board/CZ.NIC/turris_mox/mox_sp.h
>> +++ b/board/CZ.NIC/turris_mox/mox_sp.h
>> @@ -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_ */
>> diff --git a/board/CZ.NIC/turris_mox/turris_mox.c 
>> b/board/CZ.NIC/turris_mox/turris_mox.c
>> index 370c2668b0..63b8699219 100644
>> --- a/board/CZ.NIC/turris_mox/turris_mox.c
>> +++ b/board/CZ.NIC/turris_mox/turris_mox.c
>> @@ -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>
>> @@ -45,6 +46,26 @@
>>   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.
>> diff --git a/configs/turris_mox_defconfig b/configs/turris_mox_defconfig
>> index e0ca6337bd..c9815b612f 100644
>> --- a/configs/turris_mox_defconfig
>> +++ b/configs/turris_mox_defconfig
>> @@ -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
> 
> Viele Grüße,
> Stefan Roese
> 

Viele Grüße,
Stefan Roese

-- 
DENX Software Engineering GmbH,      Managing Director: Erika Unter
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr@denx.de

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2023-10-27  6:48 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-10-20 14:29 [PATCH u-boot-marvell] arm: mvebu: turris_mox: Extend to support RIPE Atlas Probe Marek Behún
2023-10-26  7:10 ` Stefan Roese
2023-10-27  6:47   ` Stefan Roese

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox