Re: [RFC PATCH v3 net-next 09/10] net: dsa: ocelot: felix: add support for VSC75XX control over SPI

From: Russell King (Oracle)
Date: Sun Aug 15 2021 - 19:15:10 EST


On Sun, Aug 15, 2021 at 01:41:49PM -0700, Colin Foster wrote:
> I also came across some curious code in Seville where it is callocing a
> struct phy_device * array instead of struct lynx_pcs *. I'm not sure if
> that's technically a bug or if the thought is "a pointer array is a
> pointer array."

I won't comment on that, but a few things I spotted in the patch:

> diff --git a/drivers/net/dsa/ocelot/felix_vsc9959.c b/drivers/net/dsa/ocelot/felix_vsc9959.c
> index a84129d18007..d0b3f6be360f 100644
> --- a/drivers/net/dsa/ocelot/felix_vsc9959.c
> +++ b/drivers/net/dsa/ocelot/felix_vsc9959.c
> @@ -1046,7 +1046,7 @@ static int vsc9959_mdio_bus_alloc(struct ocelot *ocelot)
> int rc;
>
> felix->pcs = devm_kcalloc(dev, felix->info->num_ports,
> - sizeof(struct lynx_pcs *),
> + sizeof(struct phylink_pcs *),
> GFP_KERNEL);
> if (!felix->pcs) {
> dev_err(dev, "failed to allocate array for PCS PHYs\n");
> @@ -1095,8 +1095,8 @@ static int vsc9959_mdio_bus_alloc(struct ocelot *ocelot)
>
> for (port = 0; port < felix->info->num_ports; port++) {
> struct ocelot_port *ocelot_port = ocelot->ports[port];
> + struct phylink_pcs *phylink;
> struct mdio_device *pcs;
> - struct lynx_pcs *lynx;

Normally, "phylink" is used to refer to the main phylink data
structure, so I'm not too thrilled to see it getting re-used for the
PCS. However, as you have a variable called "pcs" already, I suppose
you don't have much choice.

That said, it would be nice to have consistent naming through at
least a single file, and you do have "pcs" below to refer to this
same thing.

Maybe using plpcs or ppcs would suffice? Or maybe use the "long name"
of phylink_pcs ?

>
> if (dsa_is_unused_port(felix->ds, port))
> continue;
> @@ -1108,13 +1108,13 @@ static int vsc9959_mdio_bus_alloc(struct ocelot *ocelot)
> if (IS_ERR(pcs))
> continue;
>
> - lynx = lynx_pcs_create(pcs);
> + phylink = lynx_pcs_create(pcs);
> if (!lynx) {

I think you want to change this test.

> mdio_device_free(pcs);
> continue;
> }
>
> - felix->pcs[port] = lynx;
> + felix->pcs[port] = phylink;
>
> dev_info(dev, "Found PCS at internal MDIO address %d\n", port);
> }
> @@ -1128,7 +1128,7 @@ static void vsc9959_mdio_bus_free(struct ocelot *ocelot)
> int port;
>
> for (port = 0; port < ocelot->num_phys_ports; port++) {
> - struct lynx_pcs *pcs = felix->pcs[port];
> + struct phylink_pcs *pcs = felix->pcs[port];
>
> if (!pcs)
> continue;
> diff --git a/drivers/net/dsa/ocelot/seville_vsc9953.c b/drivers/net/dsa/ocelot/seville_vsc9953.c
> index 540cf5bc9c54..8200cc5dd24d 100644
> --- a/drivers/net/dsa/ocelot/seville_vsc9953.c
> +++ b/drivers/net/dsa/ocelot/seville_vsc9953.c
> @@ -1007,7 +1007,7 @@ static int vsc9953_mdio_bus_alloc(struct ocelot *ocelot)
> int rc;
>
> felix->pcs = devm_kcalloc(dev, felix->info->num_ports,
> - sizeof(struct phy_device *),
> + sizeof(struct phylink_pcs *),
> GFP_KERNEL);
> if (!felix->pcs) {
> dev_err(dev, "failed to allocate array for PCS PHYs\n");
> @@ -1029,8 +1029,8 @@ static int vsc9953_mdio_bus_alloc(struct ocelot *ocelot)
> for (port = 0; port < felix->info->num_ports; port++) {
> struct ocelot_port *ocelot_port = ocelot->ports[port];
> int addr = port + 4;
> + struct phylink_pcs *phylink;
> struct mdio_device *pcs;
> - struct lynx_pcs *lynx;
>
> if (dsa_is_unused_port(felix->ds, port))
> continue;
> @@ -1042,13 +1042,13 @@ static int vsc9953_mdio_bus_alloc(struct ocelot *ocelot)
> if (IS_ERR(pcs))
> continue;
>
> - lynx = lynx_pcs_create(pcs);
> + phylink = lynx_pcs_create(pcs);
> if (!lynx) {

Same here.

--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTP is here! 40Mbps down 10Mbps up. Decent connectivity at last!