[PATCH u-boot-marvell 05/19] arm: mvebu: Espressobin: Use DM registered MDIO to configure switch
Stefan Roese
sr at denx.de
Mon May 2 08:48:54 CEST 2022
On 27.04.22 12:41, Marek Behún wrote:
> From: Marek Behún <marek.behun at nic.cz>
>
> In order to be able to get rid of the non-DM MDIO bus registered in
> mvneta driver, we need to stop using board_network_enable() and instead
> use the DM registered MDIO device to configure switch in
> last_stage_init().
>
> Signed-off-by: Marek Behún <marek.behun at nic.cz>
Reviewed-by: Stefan Roese <sr at denx.de>
Thanks,
Stefan
> ---
> board/Marvell/mvebu_armada-37xx/board.c | 26 ++++++++++++++++-----
> configs/mvebu_espressobin-88f3720_defconfig | 1 +
> 2 files changed, 21 insertions(+), 6 deletions(-)
>
> diff --git a/board/Marvell/mvebu_armada-37xx/board.c b/board/Marvell/mvebu_armada-37xx/board.c
> index 98e1b36d11..3e5e0a0b5c 100644
> --- a/board/Marvell/mvebu_armada-37xx/board.c
> +++ b/board/Marvell/mvebu_armada-37xx/board.c
> @@ -11,6 +11,7 @@
> #include <i2c.h>
> #include <init.h>
> #include <mmc.h>
> +#include <miiphy.h>
> #include <phy.h>
> #include <asm/global_data.h>
> #include <asm/io.h>
> @@ -254,14 +255,15 @@ int board_xhci_enable(fdt_addr_t base)
> return 0;
> }
>
> +#ifdef CONFIG_LAST_STAGE_INIT
> /* Helper function for accessing switch devices in multi-chip connection mode */
> -static int mii_multi_chip_mode_write(struct mii_dev *bus, int dev_smi_addr,
> +static int mii_multi_chip_mode_write(struct udevice *bus, int dev_smi_addr,
> int smi_addr, int reg, u16 value)
> {
> u16 smi_cmd = 0;
>
> - if (bus->write(bus, dev_smi_addr, 0,
> - MVEBU_SW_SMI_DATA_REG, value) != 0) {
> + if (dm_mdio_write(bus, dev_smi_addr, MDIO_DEVAD_NONE,
> + MVEBU_SW_SMI_DATA_REG, value) != 0) {
> printf("Error writing to the PHY addr=%02x reg=%02x\n",
> smi_addr, reg);
> return -EFAULT;
> @@ -272,8 +274,8 @@ static int mii_multi_chip_mode_write(struct mii_dev *bus, int dev_smi_addr,
> (1 << SW_SMI_CMD_SMI_OP_OFF) |
> (smi_addr << SW_SMI_CMD_DEV_ADDR_OFF) |
> (reg << SW_SMI_CMD_REG_ADDR_OFF);
> - if (bus->write(bus, dev_smi_addr, 0,
> - MVEBU_SW_SMI_CMD_REG, smi_cmd) != 0) {
> + if (dm_mdio_write(bus, dev_smi_addr, MDIO_DEVAD_NONE,
> + MVEBU_SW_SMI_CMD_REG, smi_cmd) != 0) {
> printf("Error writing to the PHY addr=%02x reg=%02x\n",
> smi_addr, reg);
> return -EFAULT;
> @@ -283,11 +285,22 @@ static int mii_multi_chip_mode_write(struct mii_dev *bus, int dev_smi_addr,
> }
>
> /* Bring-up board-specific network stuff */
> -int board_network_enable(struct mii_dev *bus)
> +int last_stage_init(void)
> {
> + struct udevice *bus;
> + ofnode node;
> +
> if (!of_machine_is_compatible("globalscale,espressobin"))
> return 0;
>
> + 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 0;
> + }
> +
> /*
> * FIXME: remove this code once Topaz driver gets available
> * A3720 Community Board Only
> @@ -327,6 +340,7 @@ int board_network_enable(struct mii_dev *bus)
>
> return 0;
> }
> +#endif
>
> #ifdef CONFIG_OF_BOARD_SETUP
> int ft_board_setup(void *blob, struct bd_info *bd)
> diff --git a/configs/mvebu_espressobin-88f3720_defconfig b/configs/mvebu_espressobin-88f3720_defconfig
> index af30f1b363..37e4fdc41e 100644
> --- a/configs/mvebu_espressobin-88f3720_defconfig
> +++ b/configs/mvebu_espressobin-88f3720_defconfig
> @@ -25,6 +25,7 @@ CONFIG_DISPLAY_BOARDINFO_LATE=y
> CONFIG_ARCH_EARLY_INIT_R=y
> CONFIG_BOARD_EARLY_INIT_F=y
> CONFIG_BOARD_LATE_INIT=y
> +CONFIG_LAST_STAGE_INIT=y
> # CONFIG_CMD_FLASH is not set
> CONFIG_CMD_FUSE=y
> CONFIG_CMD_GPIO=y
Viele Grüße,
Stefan Roese
--
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de
More information about the U-Boot
mailing list