All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 1/3] arm: mvebu: Espressobin: move FDT fixup into a separate function
@ 2023-11-29 10:11 Robert Marko
  2023-11-29 10:11 ` [PATCH v3 2/3] arm: mvebu: Espressobin: move network setup " Robert Marko
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Robert Marko @ 2023-11-29 10:11 UTC (permalink / raw)
  To: sr, u-boot; +Cc: Robert Marko

Currently, Esspresobin FDT is being fixed up directly in ft_board_setup()
which makes it hard to add support for any other board to be fixed up.

So, lets just move the FDT fixup code to a separate function and call it
if compatible matches, there should be no functional change.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
Reviewed-by: Stefan Roese <sr@denx.de>
---
 board/Marvell/mvebu_armada-37xx/board.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
index 04124d8014..1471caa9a6 100644
--- a/board/Marvell/mvebu_armada-37xx/board.c
+++ b/board/Marvell/mvebu_armada-37xx/board.c
@@ -363,18 +363,14 @@ EVENT_SPY_SIMPLE(EVT_LAST_STAGE_INIT, last_stage_init);
 #endif
 
 #ifdef CONFIG_OF_BOARD_SETUP
-int ft_board_setup(void *blob, struct bd_info *bd)
+static int espressobin_fdt_setup(void *blob)
 {
-#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
 	int ret;
 	int spi_off;
 	int parts_off;
 	int part_off;
 
 	/* Fill SPI MTD partitions for Linux kernel on Espressobin */
-	if (!of_machine_is_compatible("globalscale,espressobin"))
-		return 0;
-
 	spi_off = fdt_node_offset_by_compatible(blob, -1, "jedec,spi-nor");
 	if (spi_off < 0)
 		return 0;
@@ -459,6 +455,14 @@ int ft_board_setup(void *blob, struct bd_info *bd)
 		return 0;
 	}
 
+	return 0;
+}
+
+int ft_board_setup(void *blob, struct bd_info *bd)
+{
+#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
+	if (of_machine_is_compatible("globalscale,espressobin"))
+		return espressobin_fdt_setup(blob);
 #endif
 	return 0;
 }
-- 
2.43.0


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

* [PATCH v3 2/3] arm: mvebu: Espressobin: move network setup into a separate function
  2023-11-29 10:11 [PATCH v3 1/3] arm: mvebu: Espressobin: move FDT fixup into a separate function Robert Marko
@ 2023-11-29 10:11 ` Robert Marko
  2024-01-10 14:13   ` Stefan Roese
  2023-11-29 10:11 ` [PATCH v3 3/3] arm: mvebu: eDPU: support new board revision Robert Marko
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 9+ messages in thread
From: Robert Marko @ 2023-11-29 10:11 UTC (permalink / raw)
  To: sr, u-boot; +Cc: Robert Marko

Currently, Esspresobin switch is being setup directly in last_stage_init()
which makes it hard to add support for any other board to be setup.

So, lets just move the switch setup code to a separate function and call it
if compatible matches, there should be no functional change.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
Reviewed-by: Stefan Roese <sr@denx.de>
---
Changes in v2:
* Rebase on top of current master and resolve conflicts

 board/Marvell/mvebu_armada-37xx/board.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
index 1471caa9a6..f532486b70 100644
--- a/board/Marvell/mvebu_armada-37xx/board.c
+++ b/board/Marvell/mvebu_armada-37xx/board.c
@@ -301,14 +301,12 @@ static int mii_multi_chip_mode_write(struct udevice *bus, int dev_smi_addr,
 	return 0;
 }
 
-/* Bring-up board-specific network stuff */
-static int last_stage_init(void)
+static int espressobin_last_stage_init(void)
 {
 	struct udevice *bus;
 	ofnode node;
 
-	if (!CONFIG_IS_ENABLED(DM_MDIO) ||
-	    !of_machine_is_compatible("globalscale,espressobin"))
+	if (!CONFIG_IS_ENABLED(DM_MDIO))
 		return 0;
 
 	node = ofnode_by_compatible(ofnode_null(), "marvell,orion-mdio");
@@ -358,8 +356,17 @@ static int last_stage_init(void)
 
 	return 0;
 }
-EVENT_SPY_SIMPLE(EVT_LAST_STAGE_INIT, last_stage_init);
 
+/* Bring-up board-specific network stuff */
+static int last_stage_init(void)
+{
+
+	if (of_machine_is_compatible("globalscale,espressobin"))
+		return espressobin_last_stage_init();
+
+	return 0;
+}
+EVENT_SPY_SIMPLE(EVT_LAST_STAGE_INIT, last_stage_init);
 #endif
 
 #ifdef CONFIG_OF_BOARD_SETUP
-- 
2.43.0


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

* [PATCH v3 3/3] arm: mvebu: eDPU: support new board revision
  2023-11-29 10:11 [PATCH v3 1/3] arm: mvebu: Espressobin: move FDT fixup into a separate function Robert Marko
  2023-11-29 10:11 ` [PATCH v3 2/3] arm: mvebu: Espressobin: move network setup " Robert Marko
@ 2023-11-29 10:11 ` Robert Marko
  2024-01-10 14:13   ` Stefan Roese
  2024-01-09 13:16 ` [PATCH v3 1/3] arm: mvebu: Espressobin: move FDT fixup into a separate function Robert Marko
  2024-01-10 14:10 ` Stefan Roese
  3 siblings, 1 reply; 9+ messages in thread
From: Robert Marko @ 2023-11-29 10:11 UTC (permalink / raw)
  To: sr, u-boot; +Cc: Robert Marko

There is a new eDPU revision that uses Marvell 88E6361 switch onboard.
We can rely on detecting the switch to enable and fixup the Linux DTS
so a single DTS can be used.

There is currently no support for the 88E6361 switch and thus no working
networking in U-Boot, so we disable both ports.

Signed-off-by: Robert Marko <robert.marko@sartura.hr>
Reviewed-by: Stefan Roese <sr@denx.de>
---
Changes in v3:
* Add check for DM_MDIO

 arch/arm/dts/armada-3720-eDPU-u-boot.dtsi |  13 ++-
 arch/arm/dts/armada-3720-eDPU.dts         |  47 ++++++++
 board/Marvell/mvebu_armada-37xx/board.c   | 128 ++++++++++++++++++++++
 configs/eDPU_defconfig                    |   1 +
 4 files changed, 184 insertions(+), 5 deletions(-)

diff --git a/arch/arm/dts/armada-3720-eDPU-u-boot.dtsi b/arch/arm/dts/armada-3720-eDPU-u-boot.dtsi
index cb02b70e54..c3d450dd83 100644
--- a/arch/arm/dts/armada-3720-eDPU-u-boot.dtsi
+++ b/arch/arm/dts/armada-3720-eDPU-u-boot.dtsi
@@ -32,14 +32,17 @@
 	bootph-all;
 };
 
-&eth0 {
-	/* G.hn does not work without additional configuration */
-	status = "disabled";
-};
-
 &eth1 {
 	fixed-link {
 		speed = <1000>;
 		full-duplex;
 	};
 };
+
+/*
+ * eDPU v2 has a MV88E6361 switch on the MDIO bus and U-boot is used
+ * to patch the Linux DTS if its found so enable MDIO by default.
+ */
+&mdio {
+	status = "okay";
+};
diff --git a/arch/arm/dts/armada-3720-eDPU.dts b/arch/arm/dts/armada-3720-eDPU.dts
index 57fc698e55..d6d37a1f6f 100644
--- a/arch/arm/dts/armada-3720-eDPU.dts
+++ b/arch/arm/dts/armada-3720-eDPU.dts
@@ -12,3 +12,50 @@
 &eth0 {
 	phy-mode = "2500base-x";
 };
+
+/*
+ * External MV88E6361 switch is only available on v2 of the board.
+ * U-Boot will enable the MDIO bus and switch nodes.
+ */
+&mdio {
+	status = "disabled";
+	pinctrl-names = "default";
+	pinctrl-0 = <&smi_pins>;
+
+	/* Actual device is MV88E6361 */
+	switch: switch@0 {
+		compatible = "marvell,mv88e6190";
+		#address-cells = <1>;
+		#size-cells = <0>;
+		reg = <0>;
+		status = "disabled";
+
+		ports {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			port@0 {
+				reg = <0>;
+				label = "cpu";
+				phy-mode = "2500base-x";
+				managed = "in-band-status";
+				ethernet = <&eth0>;
+			};
+
+			port@9 {
+				reg = <9>;
+				label = "downlink";
+				phy-mode = "2500base-x";
+				managed = "in-band-status";
+			};
+
+			port@a {
+				reg = <10>;
+				label = "uplink";
+				phy-mode = "2500base-x";
+				managed = "in-band-status";
+				sfp = <&sfp_eth1>;
+			};
+		};
+	};
+};
diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
index f532486b70..1685b12b84 100644
--- a/board/Marvell/mvebu_armada-37xx/board.c
+++ b/board/Marvell/mvebu_armada-37xx/board.c
@@ -14,6 +14,7 @@
 #include <mmc.h>
 #include <miiphy.h>
 #include <phy.h>
+#include <fdt_support.h>
 #include <asm/global_data.h>
 #include <asm/io.h>
 #include <asm/arch/cpu.h>
@@ -50,6 +51,7 @@ DECLARE_GLOBAL_DATA_PTR;
 /* Single-chip mode */
 /* Switch Port Registers */
 #define MVEBU_SW_LINK_CTRL_REG		(1)
+#define MVEBU_SW_PORT_SWITCH_ID		(3)
 #define MVEBU_SW_PORT_CTRL_REG		(4)
 #define MVEBU_SW_PORT_BASE_VLAN		(6)
 
@@ -57,6 +59,8 @@ DECLARE_GLOBAL_DATA_PTR;
 #define MVEBU_G2_SMI_PHY_CMD_REG	(24)
 #define MVEBU_G2_SMI_PHY_DATA_REG	(25)
 
+#define SWITCH_88E6361_PRODUCT_NUMBER	0x2610
+
 /*
  * Memory Controller Registers
  *
@@ -73,6 +77,30 @@ DECLARE_GLOBAL_DATA_PTR;
 #define A3700_MC_CTRL2_SDRAM_TYPE_DDR3	2
 #define A3700_MC_CTRL2_SDRAM_TYPE_DDR4	3
 
+static bool is_edpu_plus(void)
+{
+	struct udevice *bus;
+	ofnode node;
+	int val;
+
+	if (!CONFIG_IS_ENABLED(DM_MDIO))
+		return false;
+
+	node = ofnode_by_compatible(ofnode_null(), "marvell,orion-mdio");
+	if (!ofnode_valid(node) ||
+	    uclass_get_device_by_ofnode(UCLASS_MDIO, node, &bus) ||
+	    device_probe(bus)) {
+		printf("Cannot find MDIO bus\n");
+		return -ENODEV;
+	}
+
+	val = dm_mdio_read(bus, 0x0, MDIO_DEVAD_NONE, MVEBU_SW_PORT_SWITCH_ID);
+	if (val == SWITCH_88E6361_PRODUCT_NUMBER)
+		return true;
+	else
+		return false;
+}
+
 int board_early_init_f(void)
 {
 	return 0;
@@ -357,6 +385,41 @@ static int espressobin_last_stage_init(void)
 	return 0;
 }
 
+static int edpu_plus_last_stage_init(void)
+{
+	struct udevice *dev;
+	int ret;
+
+	if (is_edpu_plus()) {
+		ret = uclass_get_device_by_name(UCLASS_ETH,
+						"ethernet@40000",
+						&dev);
+		if (!ret) {
+			device_remove(dev, DM_REMOVE_NORMAL);
+			device_unbind(dev);
+		}
+
+		/* Currently no networking support on the eDPU+ board */
+		ret = uclass_get_device_by_name(UCLASS_ETH,
+						"ethernet@30000",
+						&dev);
+		if (!ret) {
+			device_remove(dev, DM_REMOVE_NORMAL);
+			device_unbind(dev);
+		}
+	} else {
+		ret = uclass_get_device_by_name(UCLASS_ETH,
+						"ethernet@30000",
+						&dev);
+		if (!ret) {
+			device_remove(dev, DM_REMOVE_NORMAL);
+			device_unbind(dev);
+		}
+	}
+
+	return 0;
+}
+
 /* Bring-up board-specific network stuff */
 static int last_stage_init(void)
 {
@@ -364,6 +427,9 @@ static int last_stage_init(void)
 	if (of_machine_is_compatible("globalscale,espressobin"))
 		return espressobin_last_stage_init();
 
+	if (of_machine_is_compatible("methode,edpu"))
+		return edpu_plus_last_stage_init();
+
 	return 0;
 }
 EVENT_SPY_SIMPLE(EVT_LAST_STAGE_INIT, last_stage_init);
@@ -465,12 +531,74 @@ static int espressobin_fdt_setup(void *blob)
 	return 0;
 }
 
+static int edpu_plus_fdt_setup(void *blob)
+{
+	const char *ports[] = { "downlink", "uplink" };
+	uint8_t mac[ETH_ALEN];
+	const char *path;
+	int i, ret;
+
+	if (is_edpu_plus()) {
+		ret = fdt_set_status_by_compatible(blob,
+						   "marvell,orion-mdio",
+						   FDT_STATUS_OKAY);
+		if (ret)
+			printf("Failed to enable MDIO!\n");
+
+		ret = fdt_set_status_by_alias(blob,
+					      "ethernet1",
+					      FDT_STATUS_DISABLED);
+		if (ret)
+			printf("Failed to disable ethernet1!\n");
+
+		path = fdt_get_alias(blob, "ethernet0");
+		if (path)
+			do_fixup_by_path_string(blob, path, "phy-mode", "2500base-x");
+		else
+			printf("Failed to update ethernet0 phy-mode to 2500base-x!\n");
+
+		ret = fdt_set_status_by_compatible(blob,
+						   "marvell,mv88e6190",
+						   FDT_STATUS_OKAY);
+		if (ret)
+			printf("Failed to enable MV88E6361!\n");
+
+		/*
+		 * MAC-s for Uplink and Downlink ports are stored under
+		 * non standard variable names, so lets manually fixup the
+		 * switch port nodes to have the desired MAC-s.
+		 */
+		for (i = 0; i < 2; i++) {
+			if (eth_env_get_enetaddr(ports[i], mac)) {
+				do_fixup_by_prop(blob,
+						 "label",
+						 ports[i],
+						 strlen(ports[i]) + 1,
+						 "mac-address",
+						 mac, ARP_HLEN, 1);
+
+				do_fixup_by_prop(blob,
+						 "label",
+						 ports[i],
+						 strlen(ports[i]) + 1,
+						 "local-mac-address",
+						 mac, ARP_HLEN, 1);
+			}
+		}
+	}
+
+	return 0;
+}
+
 int ft_board_setup(void *blob, struct bd_info *bd)
 {
 #ifdef CONFIG_ENV_IS_IN_SPI_FLASH
 	if (of_machine_is_compatible("globalscale,espressobin"))
 		return espressobin_fdt_setup(blob);
 #endif
+	if (of_machine_is_compatible("methode,edpu"))
+		return edpu_plus_fdt_setup(blob);
+
 	return 0;
 }
 #endif
diff --git a/configs/eDPU_defconfig b/configs/eDPU_defconfig
index 238f91cf6b..34c302485b 100644
--- a/configs/eDPU_defconfig
+++ b/configs/eDPU_defconfig
@@ -17,6 +17,7 @@ CONFIG_DEBUG_UART=y
 CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
 CONFIG_DISTRO_DEFAULTS=y
+CONFIG_OF_BOARD_SETUP=y
 CONFIG_USE_PREBOOT=y
 # CONFIG_DISPLAY_CPUINFO is not set
 # CONFIG_DISPLAY_BOARDINFO is not set
-- 
2.43.0


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

* Re: [PATCH v3 1/3] arm: mvebu: Espressobin: move FDT fixup into a separate function
  2023-11-29 10:11 [PATCH v3 1/3] arm: mvebu: Espressobin: move FDT fixup into a separate function Robert Marko
  2023-11-29 10:11 ` [PATCH v3 2/3] arm: mvebu: Espressobin: move network setup " Robert Marko
  2023-11-29 10:11 ` [PATCH v3 3/3] arm: mvebu: eDPU: support new board revision Robert Marko
@ 2024-01-09 13:16 ` Robert Marko
  2024-01-09 15:34   ` Stefan Roese
  2024-01-10 14:10 ` Stefan Roese
  3 siblings, 1 reply; 9+ messages in thread
From: Robert Marko @ 2024-01-09 13:16 UTC (permalink / raw)
  To: sr, u-boot

On Wed, Nov 29, 2023 at 11:11 AM Robert Marko <robert.marko@sartura.hr> wrote:
>
> Currently, Esspresobin FDT is being fixed up directly in ft_board_setup()
> which makes it hard to add support for any other board to be fixed up.
>
> So, lets just move the FDT fixup code to a separate function and call it
> if compatible matches, there should be no functional change.
>
> Signed-off-by: Robert Marko <robert.marko@sartura.hr>
> Reviewed-by: Stefan Roese <sr@denx.de>


Hi Stefan,
Since 2024.01 was released, can this series be pulled in now?

Regards,
Robert

>
> ---
>  board/Marvell/mvebu_armada-37xx/board.c | 14 +++++++++-----
>  1 file changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
> index 04124d8014..1471caa9a6 100644
> --- a/board/Marvell/mvebu_armada-37xx/board.c
> +++ b/board/Marvell/mvebu_armada-37xx/board.c
> @@ -363,18 +363,14 @@ EVENT_SPY_SIMPLE(EVT_LAST_STAGE_INIT, last_stage_init);
>  #endif
>
>  #ifdef CONFIG_OF_BOARD_SETUP
> -int ft_board_setup(void *blob, struct bd_info *bd)
> +static int espressobin_fdt_setup(void *blob)
>  {
> -#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
>         int ret;
>         int spi_off;
>         int parts_off;
>         int part_off;
>
>         /* Fill SPI MTD partitions for Linux kernel on Espressobin */
> -       if (!of_machine_is_compatible("globalscale,espressobin"))
> -               return 0;
> -
>         spi_off = fdt_node_offset_by_compatible(blob, -1, "jedec,spi-nor");
>         if (spi_off < 0)
>                 return 0;
> @@ -459,6 +455,14 @@ int ft_board_setup(void *blob, struct bd_info *bd)
>                 return 0;
>         }
>
> +       return 0;
> +}
> +
> +int ft_board_setup(void *blob, struct bd_info *bd)
> +{
> +#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
> +       if (of_machine_is_compatible("globalscale,espressobin"))
> +               return espressobin_fdt_setup(blob);
>  #endif
>         return 0;
>  }
> --
> 2.43.0
>


-- 
Robert Marko
Staff Embedded Linux Engineer
Sartura Ltd.
Lendavska ulica 16a
10000 Zagreb, Croatia
Email: robert.marko@sartura.hr
Web: www.sartura.hr

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

* Re: [PATCH v3 1/3] arm: mvebu: Espressobin: move FDT fixup into a separate function
  2024-01-09 13:16 ` [PATCH v3 1/3] arm: mvebu: Espressobin: move FDT fixup into a separate function Robert Marko
@ 2024-01-09 15:34   ` Stefan Roese
  2024-01-10  8:29     ` Robert Marko
  0 siblings, 1 reply; 9+ messages in thread
From: Stefan Roese @ 2024-01-09 15:34 UTC (permalink / raw)
  To: Robert Marko, u-boot

Hi Robert,

On 1/9/24 14:16, Robert Marko wrote:
> On Wed, Nov 29, 2023 at 11:11 AM Robert Marko <robert.marko@sartura.hr> wrote:
>>
>> Currently, Esspresobin FDT is being fixed up directly in ft_board_setup()
>> which makes it hard to add support for any other board to be fixed up.
>>
>> So, lets just move the FDT fixup code to a separate function and call it
>> if compatible matches, there should be no functional change.
>>
>> Signed-off-by: Robert Marko <robert.marko@sartura.hr>
>> Reviewed-by: Stefan Roese <sr@denx.de>
> 
> 
> Hi Stefan,
> Since 2024.01 was released, can this series be pulled in now?

It's on my list. I actually already started with some CI build tests.
Hope to get this done by end of this week, before I leave for a
short vacation.

Thanks,
Stefan

> Regards,
> Robert
> 
>>
>> ---
>>   board/Marvell/mvebu_armada-37xx/board.c | 14 +++++++++-----
>>   1 file changed, 9 insertions(+), 5 deletions(-)
>>
>> diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
>> index 04124d8014..1471caa9a6 100644
>> --- a/board/Marvell/mvebu_armada-37xx/board.c
>> +++ b/board/Marvell/mvebu_armada-37xx/board.c
>> @@ -363,18 +363,14 @@ EVENT_SPY_SIMPLE(EVT_LAST_STAGE_INIT, last_stage_init);
>>   #endif
>>
>>   #ifdef CONFIG_OF_BOARD_SETUP
>> -int ft_board_setup(void *blob, struct bd_info *bd)
>> +static int espressobin_fdt_setup(void *blob)
>>   {
>> -#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
>>          int ret;
>>          int spi_off;
>>          int parts_off;
>>          int part_off;
>>
>>          /* Fill SPI MTD partitions for Linux kernel on Espressobin */
>> -       if (!of_machine_is_compatible("globalscale,espressobin"))
>> -               return 0;
>> -
>>          spi_off = fdt_node_offset_by_compatible(blob, -1, "jedec,spi-nor");
>>          if (spi_off < 0)
>>                  return 0;
>> @@ -459,6 +455,14 @@ int ft_board_setup(void *blob, struct bd_info *bd)
>>                  return 0;
>>          }
>>
>> +       return 0;
>> +}
>> +
>> +int ft_board_setup(void *blob, struct bd_info *bd)
>> +{
>> +#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
>> +       if (of_machine_is_compatible("globalscale,espressobin"))
>> +               return espressobin_fdt_setup(blob);
>>   #endif
>>          return 0;
>>   }
>> --
>> 2.43.0
>>
> 
> 

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] 9+ messages in thread

* Re: [PATCH v3 1/3] arm: mvebu: Espressobin: move FDT fixup into a separate function
  2024-01-09 15:34   ` Stefan Roese
@ 2024-01-10  8:29     ` Robert Marko
  0 siblings, 0 replies; 9+ messages in thread
From: Robert Marko @ 2024-01-10  8:29 UTC (permalink / raw)
  To: Stefan Roese; +Cc: u-boot

On Tue, Jan 9, 2024 at 4:34 PM Stefan Roese <sr@denx.de> wrote:
>
> Hi Robert,
>
> On 1/9/24 14:16, Robert Marko wrote:
> > On Wed, Nov 29, 2023 at 11:11 AM Robert Marko <robert.marko@sartura.hr> wrote:
> >>
> >> Currently, Esspresobin FDT is being fixed up directly in ft_board_setup()
> >> which makes it hard to add support for any other board to be fixed up.
> >>
> >> So, lets just move the FDT fixup code to a separate function and call it
> >> if compatible matches, there should be no functional change.
> >>
> >> Signed-off-by: Robert Marko <robert.marko@sartura.hr>
> >> Reviewed-by: Stefan Roese <sr@denx.de>
> >
> >
> > Hi Stefan,
> > Since 2024.01 was released, can this series be pulled in now?
>
> It's on my list. I actually already started with some CI build tests.
> Hope to get this done by end of this week, before I leave for a
> short vacation.

Sounds good.

Regards,
Robert
>
> Thanks,
> Stefan
>
> > Regards,
> > Robert
> >
> >>
> >> ---
> >>   board/Marvell/mvebu_armada-37xx/board.c | 14 +++++++++-----
> >>   1 file changed, 9 insertions(+), 5 deletions(-)
> >>
> >> diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
> >> index 04124d8014..1471caa9a6 100644
> >> --- a/board/Marvell/mvebu_armada-37xx/board.c
> >> +++ b/board/Marvell/mvebu_armada-37xx/board.c
> >> @@ -363,18 +363,14 @@ EVENT_SPY_SIMPLE(EVT_LAST_STAGE_INIT, last_stage_init);
> >>   #endif
> >>
> >>   #ifdef CONFIG_OF_BOARD_SETUP
> >> -int ft_board_setup(void *blob, struct bd_info *bd)
> >> +static int espressobin_fdt_setup(void *blob)
> >>   {
> >> -#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
> >>          int ret;
> >>          int spi_off;
> >>          int parts_off;
> >>          int part_off;
> >>
> >>          /* Fill SPI MTD partitions for Linux kernel on Espressobin */
> >> -       if (!of_machine_is_compatible("globalscale,espressobin"))
> >> -               return 0;
> >> -
> >>          spi_off = fdt_node_offset_by_compatible(blob, -1, "jedec,spi-nor");
> >>          if (spi_off < 0)
> >>                  return 0;
> >> @@ -459,6 +455,14 @@ int ft_board_setup(void *blob, struct bd_info *bd)
> >>                  return 0;
> >>          }
> >>
> >> +       return 0;
> >> +}
> >> +
> >> +int ft_board_setup(void *blob, struct bd_info *bd)
> >> +{
> >> +#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
> >> +       if (of_machine_is_compatible("globalscale,espressobin"))
> >> +               return espressobin_fdt_setup(blob);
> >>   #endif
> >>          return 0;
> >>   }
> >> --
> >> 2.43.0
> >>
> >
> >
>
> 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



-- 
Robert Marko
Staff Embedded Linux Engineer
Sartura Ltd.
Lendavska ulica 16a
10000 Zagreb, Croatia
Email: robert.marko@sartura.hr
Web: www.sartura.hr

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

* Re: [PATCH v3 1/3] arm: mvebu: Espressobin: move FDT fixup into a separate function
  2023-11-29 10:11 [PATCH v3 1/3] arm: mvebu: Espressobin: move FDT fixup into a separate function Robert Marko
                   ` (2 preceding siblings ...)
  2024-01-09 13:16 ` [PATCH v3 1/3] arm: mvebu: Espressobin: move FDT fixup into a separate function Robert Marko
@ 2024-01-10 14:10 ` Stefan Roese
  3 siblings, 0 replies; 9+ messages in thread
From: Stefan Roese @ 2024-01-10 14:10 UTC (permalink / raw)
  To: Robert Marko, u-boot

On 11/29/23 11:11, Robert Marko wrote:
> Currently, Esspresobin FDT is being fixed up directly in ft_board_setup()
> which makes it hard to add support for any other board to be fixed up.
> 
> So, lets just move the FDT fixup code to a separate function and call it
> if compatible matches, there should be no functional change.
> 
> Signed-off-by: Robert Marko <robert.marko@sartura.hr>
> Reviewed-by: Stefan Roese <sr@denx.de>

Applied to u-boot-marvell/master

Thanks,
Stefan

> ---
>   board/Marvell/mvebu_armada-37xx/board.c | 14 +++++++++-----
>   1 file changed, 9 insertions(+), 5 deletions(-)
> 
> diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
> index 04124d8014..1471caa9a6 100644
> --- a/board/Marvell/mvebu_armada-37xx/board.c
> +++ b/board/Marvell/mvebu_armada-37xx/board.c
> @@ -363,18 +363,14 @@ EVENT_SPY_SIMPLE(EVT_LAST_STAGE_INIT, last_stage_init);
>   #endif
>   
>   #ifdef CONFIG_OF_BOARD_SETUP
> -int ft_board_setup(void *blob, struct bd_info *bd)
> +static int espressobin_fdt_setup(void *blob)
>   {
> -#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
>   	int ret;
>   	int spi_off;
>   	int parts_off;
>   	int part_off;
>   
>   	/* Fill SPI MTD partitions for Linux kernel on Espressobin */
> -	if (!of_machine_is_compatible("globalscale,espressobin"))
> -		return 0;
> -
>   	spi_off = fdt_node_offset_by_compatible(blob, -1, "jedec,spi-nor");
>   	if (spi_off < 0)
>   		return 0;
> @@ -459,6 +455,14 @@ int ft_board_setup(void *blob, struct bd_info *bd)
>   		return 0;
>   	}
>   
> +	return 0;
> +}
> +
> +int ft_board_setup(void *blob, struct bd_info *bd)
> +{
> +#ifdef CONFIG_ENV_IS_IN_SPI_FLASH
> +	if (of_machine_is_compatible("globalscale,espressobin"))
> +		return espressobin_fdt_setup(blob);
>   #endif
>   	return 0;
>   }

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] 9+ messages in thread

* Re: [PATCH v3 2/3] arm: mvebu: Espressobin: move network setup into a separate function
  2023-11-29 10:11 ` [PATCH v3 2/3] arm: mvebu: Espressobin: move network setup " Robert Marko
@ 2024-01-10 14:13   ` Stefan Roese
  0 siblings, 0 replies; 9+ messages in thread
From: Stefan Roese @ 2024-01-10 14:13 UTC (permalink / raw)
  To: Robert Marko, u-boot

On 11/29/23 11:11, Robert Marko wrote:
> Currently, Esspresobin switch is being setup directly in last_stage_init()
> which makes it hard to add support for any other board to be setup.
> 
> So, lets just move the switch setup code to a separate function and call it
> if compatible matches, there should be no functional change.
> 
> Signed-off-by: Robert Marko <robert.marko@sartura.hr>
> Reviewed-by: Stefan Roese <sr@denx.de>

Applied to u-boot-marvell/master

Thanks,
Stefan

> ---
> Changes in v2:
> * Rebase on top of current master and resolve conflicts
> 
>   board/Marvell/mvebu_armada-37xx/board.c | 17 ++++++++++++-----
>   1 file changed, 12 insertions(+), 5 deletions(-)
> 
> diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
> index 1471caa9a6..f532486b70 100644
> --- a/board/Marvell/mvebu_armada-37xx/board.c
> +++ b/board/Marvell/mvebu_armada-37xx/board.c
> @@ -301,14 +301,12 @@ static int mii_multi_chip_mode_write(struct udevice *bus, int dev_smi_addr,
>   	return 0;
>   }
>   
> -/* Bring-up board-specific network stuff */
> -static int last_stage_init(void)
> +static int espressobin_last_stage_init(void)
>   {
>   	struct udevice *bus;
>   	ofnode node;
>   
> -	if (!CONFIG_IS_ENABLED(DM_MDIO) ||
> -	    !of_machine_is_compatible("globalscale,espressobin"))
> +	if (!CONFIG_IS_ENABLED(DM_MDIO))
>   		return 0;
>   
>   	node = ofnode_by_compatible(ofnode_null(), "marvell,orion-mdio");
> @@ -358,8 +356,17 @@ static int last_stage_init(void)
>   
>   	return 0;
>   }
> -EVENT_SPY_SIMPLE(EVT_LAST_STAGE_INIT, last_stage_init);
>   
> +/* Bring-up board-specific network stuff */
> +static int last_stage_init(void)
> +{
> +
> +	if (of_machine_is_compatible("globalscale,espressobin"))
> +		return espressobin_last_stage_init();
> +
> +	return 0;
> +}
> +EVENT_SPY_SIMPLE(EVT_LAST_STAGE_INIT, last_stage_init);
>   #endif
>   
>   #ifdef CONFIG_OF_BOARD_SETUP

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] 9+ messages in thread

* Re: [PATCH v3 3/3] arm: mvebu: eDPU: support new board revision
  2023-11-29 10:11 ` [PATCH v3 3/3] arm: mvebu: eDPU: support new board revision Robert Marko
@ 2024-01-10 14:13   ` Stefan Roese
  0 siblings, 0 replies; 9+ messages in thread
From: Stefan Roese @ 2024-01-10 14:13 UTC (permalink / raw)
  To: Robert Marko, u-boot

On 11/29/23 11:11, Robert Marko wrote:
> There is a new eDPU revision that uses Marvell 88E6361 switch onboard.
> We can rely on detecting the switch to enable and fixup the Linux DTS
> so a single DTS can be used.
> 
> There is currently no support for the 88E6361 switch and thus no working
> networking in U-Boot, so we disable both ports.
> 
> Signed-off-by: Robert Marko <robert.marko@sartura.hr>
> Reviewed-by: Stefan Roese <sr@denx.de>

Applied to u-boot-marvell/master

Thanks,
Stefan

> ---
> Changes in v3:
> * Add check for DM_MDIO
> 
>   arch/arm/dts/armada-3720-eDPU-u-boot.dtsi |  13 ++-
>   arch/arm/dts/armada-3720-eDPU.dts         |  47 ++++++++
>   board/Marvell/mvebu_armada-37xx/board.c   | 128 ++++++++++++++++++++++
>   configs/eDPU_defconfig                    |   1 +
>   4 files changed, 184 insertions(+), 5 deletions(-)
> 
> diff --git a/arch/arm/dts/armada-3720-eDPU-u-boot.dtsi b/arch/arm/dts/armada-3720-eDPU-u-boot.dtsi
> index cb02b70e54..c3d450dd83 100644
> --- a/arch/arm/dts/armada-3720-eDPU-u-boot.dtsi
> +++ b/arch/arm/dts/armada-3720-eDPU-u-boot.dtsi
> @@ -32,14 +32,17 @@
>   	bootph-all;
>   };
>   
> -&eth0 {
> -	/* G.hn does not work without additional configuration */
> -	status = "disabled";
> -};
> -
>   &eth1 {
>   	fixed-link {
>   		speed = <1000>;
>   		full-duplex;
>   	};
>   };
> +
> +/*
> + * eDPU v2 has a MV88E6361 switch on the MDIO bus and U-boot is used
> + * to patch the Linux DTS if its found so enable MDIO by default.
> + */
> +&mdio {
> +	status = "okay";
> +};
> diff --git a/arch/arm/dts/armada-3720-eDPU.dts b/arch/arm/dts/armada-3720-eDPU.dts
> index 57fc698e55..d6d37a1f6f 100644
> --- a/arch/arm/dts/armada-3720-eDPU.dts
> +++ b/arch/arm/dts/armada-3720-eDPU.dts
> @@ -12,3 +12,50 @@
>   &eth0 {
>   	phy-mode = "2500base-x";
>   };
> +
> +/*
> + * External MV88E6361 switch is only available on v2 of the board.
> + * U-Boot will enable the MDIO bus and switch nodes.
> + */
> +&mdio {
> +	status = "disabled";
> +	pinctrl-names = "default";
> +	pinctrl-0 = <&smi_pins>;
> +
> +	/* Actual device is MV88E6361 */
> +	switch: switch@0 {
> +		compatible = "marvell,mv88e6190";
> +		#address-cells = <1>;
> +		#size-cells = <0>;
> +		reg = <0>;
> +		status = "disabled";
> +
> +		ports {
> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +
> +			port@0 {
> +				reg = <0>;
> +				label = "cpu";
> +				phy-mode = "2500base-x";
> +				managed = "in-band-status";
> +				ethernet = <&eth0>;
> +			};
> +
> +			port@9 {
> +				reg = <9>;
> +				label = "downlink";
> +				phy-mode = "2500base-x";
> +				managed = "in-band-status";
> +			};
> +
> +			port@a {
> +				reg = <10>;
> +				label = "uplink";
> +				phy-mode = "2500base-x";
> +				managed = "in-band-status";
> +				sfp = <&sfp_eth1>;
> +			};
> +		};
> +	};
> +};
> diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
> index f532486b70..1685b12b84 100644
> --- a/board/Marvell/mvebu_armada-37xx/board.c
> +++ b/board/Marvell/mvebu_armada-37xx/board.c
> @@ -14,6 +14,7 @@
>   #include <mmc.h>
>   #include <miiphy.h>
>   #include <phy.h>
> +#include <fdt_support.h>
>   #include <asm/global_data.h>
>   #include <asm/io.h>
>   #include <asm/arch/cpu.h>
> @@ -50,6 +51,7 @@ DECLARE_GLOBAL_DATA_PTR;
>   /* Single-chip mode */
>   /* Switch Port Registers */
>   #define MVEBU_SW_LINK_CTRL_REG		(1)
> +#define MVEBU_SW_PORT_SWITCH_ID		(3)
>   #define MVEBU_SW_PORT_CTRL_REG		(4)
>   #define MVEBU_SW_PORT_BASE_VLAN		(6)
>   
> @@ -57,6 +59,8 @@ DECLARE_GLOBAL_DATA_PTR;
>   #define MVEBU_G2_SMI_PHY_CMD_REG	(24)
>   #define MVEBU_G2_SMI_PHY_DATA_REG	(25)
>   
> +#define SWITCH_88E6361_PRODUCT_NUMBER	0x2610
> +
>   /*
>    * Memory Controller Registers
>    *
> @@ -73,6 +77,30 @@ DECLARE_GLOBAL_DATA_PTR;
>   #define A3700_MC_CTRL2_SDRAM_TYPE_DDR3	2
>   #define A3700_MC_CTRL2_SDRAM_TYPE_DDR4	3
>   
> +static bool is_edpu_plus(void)
> +{
> +	struct udevice *bus;
> +	ofnode node;
> +	int val;
> +
> +	if (!CONFIG_IS_ENABLED(DM_MDIO))
> +		return false;
> +
> +	node = ofnode_by_compatible(ofnode_null(), "marvell,orion-mdio");
> +	if (!ofnode_valid(node) ||
> +	    uclass_get_device_by_ofnode(UCLASS_MDIO, node, &bus) ||
> +	    device_probe(bus)) {
> +		printf("Cannot find MDIO bus\n");
> +		return -ENODEV;
> +	}
> +
> +	val = dm_mdio_read(bus, 0x0, MDIO_DEVAD_NONE, MVEBU_SW_PORT_SWITCH_ID);
> +	if (val == SWITCH_88E6361_PRODUCT_NUMBER)
> +		return true;
> +	else
> +		return false;
> +}
> +
>   int board_early_init_f(void)
>   {
>   	return 0;
> @@ -357,6 +385,41 @@ static int espressobin_last_stage_init(void)
>   	return 0;
>   }
>   
> +static int edpu_plus_last_stage_init(void)
> +{
> +	struct udevice *dev;
> +	int ret;
> +
> +	if (is_edpu_plus()) {
> +		ret = uclass_get_device_by_name(UCLASS_ETH,
> +						"ethernet@40000",
> +						&dev);
> +		if (!ret) {
> +			device_remove(dev, DM_REMOVE_NORMAL);
> +			device_unbind(dev);
> +		}
> +
> +		/* Currently no networking support on the eDPU+ board */
> +		ret = uclass_get_device_by_name(UCLASS_ETH,
> +						"ethernet@30000",
> +						&dev);
> +		if (!ret) {
> +			device_remove(dev, DM_REMOVE_NORMAL);
> +			device_unbind(dev);
> +		}
> +	} else {
> +		ret = uclass_get_device_by_name(UCLASS_ETH,
> +						"ethernet@30000",
> +						&dev);
> +		if (!ret) {
> +			device_remove(dev, DM_REMOVE_NORMAL);
> +			device_unbind(dev);
> +		}
> +	}
> +
> +	return 0;
> +}
> +
>   /* Bring-up board-specific network stuff */
>   static int last_stage_init(void)
>   {
> @@ -364,6 +427,9 @@ static int last_stage_init(void)
>   	if (of_machine_is_compatible("globalscale,espressobin"))
>   		return espressobin_last_stage_init();
>   
> +	if (of_machine_is_compatible("methode,edpu"))
> +		return edpu_plus_last_stage_init();
> +
>   	return 0;
>   }
>   EVENT_SPY_SIMPLE(EVT_LAST_STAGE_INIT, last_stage_init);
> @@ -465,12 +531,74 @@ static int espressobin_fdt_setup(void *blob)
>   	return 0;
>   }
>   
> +static int edpu_plus_fdt_setup(void *blob)
> +{
> +	const char *ports[] = { "downlink", "uplink" };
> +	uint8_t mac[ETH_ALEN];
> +	const char *path;
> +	int i, ret;
> +
> +	if (is_edpu_plus()) {
> +		ret = fdt_set_status_by_compatible(blob,
> +						   "marvell,orion-mdio",
> +						   FDT_STATUS_OKAY);
> +		if (ret)
> +			printf("Failed to enable MDIO!\n");
> +
> +		ret = fdt_set_status_by_alias(blob,
> +					      "ethernet1",
> +					      FDT_STATUS_DISABLED);
> +		if (ret)
> +			printf("Failed to disable ethernet1!\n");
> +
> +		path = fdt_get_alias(blob, "ethernet0");
> +		if (path)
> +			do_fixup_by_path_string(blob, path, "phy-mode", "2500base-x");
> +		else
> +			printf("Failed to update ethernet0 phy-mode to 2500base-x!\n");
> +
> +		ret = fdt_set_status_by_compatible(blob,
> +						   "marvell,mv88e6190",
> +						   FDT_STATUS_OKAY);
> +		if (ret)
> +			printf("Failed to enable MV88E6361!\n");
> +
> +		/*
> +		 * MAC-s for Uplink and Downlink ports are stored under
> +		 * non standard variable names, so lets manually fixup the
> +		 * switch port nodes to have the desired MAC-s.
> +		 */
> +		for (i = 0; i < 2; i++) {
> +			if (eth_env_get_enetaddr(ports[i], mac)) {
> +				do_fixup_by_prop(blob,
> +						 "label",
> +						 ports[i],
> +						 strlen(ports[i]) + 1,
> +						 "mac-address",
> +						 mac, ARP_HLEN, 1);
> +
> +				do_fixup_by_prop(blob,
> +						 "label",
> +						 ports[i],
> +						 strlen(ports[i]) + 1,
> +						 "local-mac-address",
> +						 mac, ARP_HLEN, 1);
> +			}
> +		}
> +	}
> +
> +	return 0;
> +}
> +
>   int ft_board_setup(void *blob, struct bd_info *bd)
>   {
>   #ifdef CONFIG_ENV_IS_IN_SPI_FLASH
>   	if (of_machine_is_compatible("globalscale,espressobin"))
>   		return espressobin_fdt_setup(blob);
>   #endif
> +	if (of_machine_is_compatible("methode,edpu"))
> +		return edpu_plus_fdt_setup(blob);
> +
>   	return 0;
>   }
>   #endif
> diff --git a/configs/eDPU_defconfig b/configs/eDPU_defconfig
> index 238f91cf6b..34c302485b 100644
> --- a/configs/eDPU_defconfig
> +++ b/configs/eDPU_defconfig
> @@ -17,6 +17,7 @@ CONFIG_DEBUG_UART=y
>   CONFIG_FIT=y
>   CONFIG_FIT_VERBOSE=y
>   CONFIG_DISTRO_DEFAULTS=y
> +CONFIG_OF_BOARD_SETUP=y
>   CONFIG_USE_PREBOOT=y
>   # CONFIG_DISPLAY_CPUINFO is not set
>   # CONFIG_DISPLAY_BOARDINFO is not set

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] 9+ messages in thread

end of thread, other threads:[~2024-01-10 14:13 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-29 10:11 [PATCH v3 1/3] arm: mvebu: Espressobin: move FDT fixup into a separate function Robert Marko
2023-11-29 10:11 ` [PATCH v3 2/3] arm: mvebu: Espressobin: move network setup " Robert Marko
2024-01-10 14:13   ` Stefan Roese
2023-11-29 10:11 ` [PATCH v3 3/3] arm: mvebu: eDPU: support new board revision Robert Marko
2024-01-10 14:13   ` Stefan Roese
2024-01-09 13:16 ` [PATCH v3 1/3] arm: mvebu: Espressobin: move FDT fixup into a separate function Robert Marko
2024-01-09 15:34   ` Stefan Roese
2024-01-10  8:29     ` Robert Marko
2024-01-10 14:10 ` Stefan Roese

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.