Re: [RFC PATCH v4 net-next 00/23] add support for VSC75XX control over SPI

Colin Foster
2021-11-16T23:44:18Z

On Tue, Nov 16, 2021 at 10:56:54PM +0000, Vladimir Oltean wrote:
> On Mon, Nov 15, 2021 at 10:23:05PM -0800, Colin Foster wrote:
> > My apologies for this next RFC taking so long. Life got in the way.
> >
> >
> > The patch set in general is to add support for the VSC7511, VSC7512,
> > VSC7513 and VSC7514 devices controlled over SPI. The driver is
> > relatively functional for the internal phy ports (0-3) on the VSC7512.
> > As I'll discuss, it is not yet functional for other ports yet.
> >
> >
> > I still think there are enough updates to bounce by the community
> > in case I'm terribly off base or doomed to chase my tail.
>
> I wanted to do some regression-testing with this patch set on the
> Seville switch, but up until now I've been trying to actually make it
> compile. See the changes required for that. Note that "can compile"
> doesn't mean "can compile without warnings". Please check the build
> reports on each individual patch on Patchwork and make sure the next
> submission is warning-free. Note that there's a considerable amount of
> drivers to build-test in both on and off configurations.
> https://patchwork.kernel.org/project/netdevbpf/patch/20211116062328.1949151-21-colin.foster@in-advantage.com/

I'm very embarrassed. I scrambled at the end to try to clean things up
and didn't run enough tests. Sorry about that!

>
> -- >8 -------------------------------------------------------------------------
> diff --git a/drivers/net/dsa/ocelot/felix_vsc9959.c b/drivers/net/dsa/ocelot/felix_vsc9959.c
> index b1032b7abaea..fbe78357ca94 100644
> --- a/drivers/net/dsa/ocelot/felix_vsc9959.c
> +++ b/drivers/net/dsa/ocelot/felix_vsc9959.c
> @@ -1127,11 +1127,13 @@ static void vsc9959_mdio_bus_free(struct ocelot *ocelot)
>
> for (port = 0; port < ocelot->num_phys_ports; port++) {
> struct phylink_pcs *phylink_pcs = felix->pcs[port];
> + struct mdio_device *mdio_device;
>
> if (!phylink_pcs)
> continue;
>
> - mdio_device_free(phylink_pcs->mdio);
> + mdio_device = lynx_get_mdio_device(phylink_pcs);
> + mdio_device_free(mdio_device);
> lynx_pcs_destroy(phylink_pcs);
> }
> mdiobus_unregister(felix->imdio);
> diff --git a/drivers/net/dsa/ocelot/seville_vsc9953.c b/drivers/net/dsa/ocelot/seville_vsc9953.c
> index 268c09042824..12a87d8f977d 100644
> --- a/drivers/net/dsa/ocelot/seville_vsc9953.c
> +++ b/drivers/net/dsa/ocelot/seville_vsc9953.c
> @@ -1037,7 +1037,7 @@ static int vsc9953_mdio_bus_alloc(struct ocelot *ocelot)
> continue;
>
> mdio_device = mdio_device_create(felix->imdio, addr);
> - if (IS_ERR(pcs))
> + if (IS_ERR(mdio_device))
> continue;
>
> phylink_pcs = lynx_pcs_create(mdio_device);
> @@ -1066,7 +1066,7 @@ static void vsc9953_mdio_bus_free(struct ocelot *ocelot)
> if (!phylink_pcs)
> continue;
>
> - mdio_device = lynx_pcs_get_mdio(phylink_pcs);
> + mdio_device = lynx_get_mdio_device(phylink_pcs);
> mdio_device_free(mdio_device);
> lynx_pcs_destroy(phylink_pcs);
> }
> diff --git a/drivers/net/ethernet/freescale/enetc/enetc_pf.c b/drivers/net/ethernet/freescale/enetc/enetc_pf.c
> index 3d93ac1376c6..3ab581b777eb 100644
> --- a/drivers/net/ethernet/freescale/enetc/enetc_pf.c
> +++ b/drivers/net/ethernet/freescale/enetc/enetc_pf.c
> @@ -8,6 +8,7 @@
> #include <linux/of_platform.h>
> #include <linux/of_mdio.h>
> #include <linux/of_net.h>
> +#include <linux/pcs-lynx.h>
> #include "enetc_ierb.h"
> #include "enetc_pf.h"
>
> @@ -983,7 +984,7 @@ static void enetc_pl_mac_config(struct phylink_config *config,
>
> priv = netdev_priv(pf->si->ndev);
> if (pf->pcs)
> - phylink_set_pcs(priv->phylink, &pf->pcs);
> + phylink_set_pcs(priv->phylink, pf->pcs);
> }
>
> static void enetc_force_rgmii_mac(struct enetc_hw *hw, int speed, int duplex)
> diff --git a/drivers/pinctrl/pinctrl-ocelot.c b/drivers/pinctrl/pinctrl-ocelot.c
> index f8d2494b335c..5f9fc9252c79 100644
> --- a/drivers/pinctrl/pinctrl-ocelot.c
> +++ b/drivers/pinctrl/pinctrl-ocelot.c
> @@ -20,6 +20,7 @@
> #include <linux/platform_device.h>
> #include <linux/regmap.h>
> #include <linux/slab.h>
> +#include <soc/mscc/ocelot.h>
>
> #include "core.h"
> #include "pinconf.h"
> diff --git a/include/soc/mscc/ocelot.h b/include/soc/mscc/ocelot.h
> index 6aeb7eac73f5..7571becba545 100644
> --- a/include/soc/mscc/ocelot.h
> +++ b/include/soc/mscc/ocelot.h
> @@ -946,11 +946,12 @@ int ocelot_pinctrl_core_probe(struct device *dev,
> struct regmap *pincfg_base, u32 pincfg_offset,
> struct device_node *device_node);
> #else
> -int ocelot_pinctrl_core_probe(struct device *dev,
> - struct pinctrl_desc *pinctrl_desc,
> - struct regmap *regmap_base, u32 regmap_offset,
> - struct regmap *pincfg_base, u32 pincfg_offset,
> - struct device_node *device_node)
> +static inline int
> +ocelot_pinctrl_core_probe(struct device *dev,
> + struct pinctrl_desc *pinctrl_desc,
> + struct regmap *regmap_base, u32 regmap_offset,
> + struct regmap *pincfg_base, u32 pincfg_offset,
> + struct device_node *device_node)
> {
> return -EOPNOTSUPP;
> }
> @@ -960,8 +961,9 @@ int ocelot_pinctrl_core_probe(struct device *dev,
> int microchip_sgpio_core_probe(struct device *dev, struct device_node *node,
> struct regmap *regmap, u32 offset);
> #else
> -int microchip_sgpio_core_probe(struct device *dev, struct device_node *node,
> - struct regmap *regmap, u32 offset)
> +static inline int
> +microchip_sgpio_core_probe(struct device *dev, struct device_node *node,
> + struct regmap *regmap, u32 offset)
> {
> return -EOPNOTSUPP;
> }
> -- >8 -------------------------------------------------------------------------