* [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;
};
-ð0 {
- /* G.hn does not work without additional configuration */
- status = "disabled";
-};
-
ð1 {
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 @@
ð0 {
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 = <ð0>;
+ };
+
+ 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;
> };
>
> -ð0 {
> - /* G.hn does not work without additional configuration */
> - status = "disabled";
> -};
> -
> ð1 {
> 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 @@
> ð0 {
> 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 = <ð0>;
> + };
> +
> + 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.