On Wed, 6 Dec 2023 15:35:56 +0100
Marek Mojík <marek.mo...@nic.cz> wrote:

> The mv88e6xxx driver does not currently initialize the smi_addr field, but
> instead keeps the default zero value. This leads to driver being unusable
> on devices where the switch is not on address zero of the mdio bus. Fix
> this problem by reading the SMI address from device tree.
> 
> Signed-off-by: Marek Mojík <marek.mo...@nic.cz>
> ---
>  drivers/net/mv88e6xxx.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
> 
> diff --git a/drivers/net/mv88e6xxx.c b/drivers/net/mv88e6xxx.c
> index c073f81e72..8fbbc1cacc 100644
> --- a/drivers/net/mv88e6xxx.c
> +++ b/drivers/net/mv88e6xxx.c
> @@ -745,6 +745,7 @@ static int mv88e6xxx_probe(struct udevice *dev)
>  {
>       struct dsa_pdata *dsa_pdata = dev_get_uclass_plat(dev);
>       struct mv88e6xxx_priv *priv = dev_get_priv(dev);
> +     fdt_addr_t smi_addr;
>       int val, ret;
>  
>       if (ofnode_valid(dev_ofnode(dev)) &&
> @@ -753,6 +754,13 @@ static int mv88e6xxx_probe(struct udevice *dev)
>               return -ENODEV;
>       }
>  
> +     smi_addr = dev_read_addr(dev);
> +     if (smi_addr == FDT_ADDR_T_NONE) {
> +             dev_err(dev, "Missing SMI address\n");
> +             return -EINVAL;
> +     }
> +     priv->smi_addr = smi_addr;
> +
>       /* probe internal mdio bus */
>       ret = mv88e6xxx_probe_mdio(dev);
>       if (ret)

Reviewed-by: Marek Behún <ka...@kernel.org>

Reply via email to