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

From: "Russell King (Oracle)" <[email-masked]>
Date: Mon, 16 Aug 2021 00:14:54 +0100

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!