[PATCH v3 4/6] drivers: net: add Felix DSA switch driver

Vladimir Oltean olteanv at gmail.com
Sun Dec 15 13:53:15 CET 2019


Hi Alex,

On Tue, 3 Dec 2019 at 18:18, Alex Marginean <alexandru.marginean at nxp.com> wrote:
> +static int felix_port_enable(struct udevice *dev, int port,
> +                            struct phy_device *phy)
> +{
> +       struct felix_priv *priv = dev_get_priv(dev);
> +       void *base = priv->regs_base;
> +
> +       out_le32(base + FELIX_GMII_MAC_ENA_CFG(port),
> +                FELIX_GMII_MAX_ENA_CFG_TX | FELIX_GMII_MAX_ENA_CFG_RX);
> +
> +       out_le32(base + FELIX_QSYS_SYSTEM_SW_PORT_MODE(port),
> +                FELIX_QSYS_SYSTEM_SW_PORT_ENA |
> +                FELIX_QSYS_SYSTEM_SW_PORT_LOSSY |
> +                FELIX_QSYS_SYSTEM_SW_PORT_SCH(1));
> +
> +       if (phy)
> +               phy_startup(phy);
> +       return 0;
> +}
> +
> +static void felix_port_disable(struct udevice *dev, int port,
> +                              struct phy_device *phy)
> +{
> +       struct felix_priv *priv = dev_get_priv(dev);
> +       void *base = priv->regs_base;
> +
> +       out_le32(base + FELIX_GMII_MAC_ENA_CFG(port), 0);
> +
> +       out_le32(base + FELIX_QSYS_SYSTEM_SW_PORT_MODE(port),
> +                FELIX_QSYS_SYSTEM_SW_PORT_LOSSY |
> +                FELIX_QSYS_SYSTEM_SW_PORT_SCH(1));
> +
> +       /*
> +        * we don't call phy_shutdown here to avoind waiting next time we use
> +        * the port, but the downside is that remote side will think we're
> +        * actively processing traffic although we are not.
> +        */
> +}
> --
> 2.17.1
>

What is the correct general procedure here, is it to call phy_startup
so late (felix_port_enable)? I'm trying to take this driver as an
example for sja1105, which has RGMII so PCS and no autonomous in-band
AN like felix does. On this switch, it is too late to do phy_startup
now. Instead, I would need to look at phy->speed which should have
been settled by now, and reprogram my MAC with it.
My question is: don't you think phy_startup() and phy_shutdown()
belong in the DSA uclass code?

Thanks,
-Vladimir


More information about the U-Boot mailing list