All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michal Kubiak <michal.kubiak@intel.com>
To: Christian Eggers <ceggers@arri.de>
Cc: Andrew Lunn <andrew@lunn.ch>,
	Florian Fainelli <f.fainelli@gmail.com>,
	Vladimir Oltean <olteanv@gmail.com>,
	"David S . Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Juergen Beisert <jbe@pengutronix.de>, Stefan Roese <sr@denx.de>,
	Juergen Borleis <kernel@pengutronix.de>, <netdev@vger.kernel.org>,
	<linux-kernel@vger.kernel.org>
Subject: Re: [PATCH net 1/2] dsa: lan9303: Fix mapping between DSA port number and PHY address
Date: Wed, 3 Jul 2024 18:04:20 +0200	[thread overview]
Message-ID: <ZoV2hNiGvHnDfIcU@localhost.localdomain> (raw)
In-Reply-To: <20240703145718.19951-1-ceggers@arri.de>

On Wed, Jul 03, 2024 at 04:57:17PM +0200, Christian Eggers wrote:
> The 'phy' parameter supplied to lan9303_phy_read/_write was sometimes a
> DSA port number and sometimes a PHY address. This isn't a problem as
> long as they are equal.  But if the external phy_addr_sel_strap pin is
> wired to 'high', the PHY addresses change from 0-1-2 to 1-2-3 (CPU,
> slave0, slave1).  In this case, lan9303_phy_read/_write must translate
> between DSA port numbers and the corresponding PHY address.
> 
> Fixes: a1292595e006 ("net: dsa: add new DSA switch driver for the SMSC-LAN9303")
> Signed-off-by: Christian Eggers <ceggers@arri.de>
> ---
>  drivers/net/dsa/lan9303-core.c | 23 ++++++++++-------------
>  1 file changed, 10 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/net/dsa/lan9303-core.c b/drivers/net/dsa/lan9303-core.c
> index 02f07b870f10..268949939636 100644
> --- a/drivers/net/dsa/lan9303-core.c
> +++ b/drivers/net/dsa/lan9303-core.c
> @@ -1047,31 +1047,31 @@ static int lan9303_get_sset_count(struct dsa_switch *ds, int port, int sset)
>  	return ARRAY_SIZE(lan9303_mib);
>  }
>  
> -static int lan9303_phy_read(struct dsa_switch *ds, int phy, int regnum)
> +static int lan9303_phy_read(struct dsa_switch *ds, int port, int regnum)
>  {
>  	struct lan9303 *chip = ds->priv;
>  	int phy_base = chip->phy_addr_base;
>  
> -	if (phy == phy_base)
> +	if (port == 0)
>  		return lan9303_virt_phy_reg_read(chip, regnum);
> -	if (phy > phy_base + 2)
> +	if (port > 2)
>  		return -ENODEV;
>  
> -	return chip->ops->phy_read(chip, phy, regnum);
> +	return chip->ops->phy_read(chip, phy_base + port, regnum);
>  }
>  
> -static int lan9303_phy_write(struct dsa_switch *ds, int phy, int regnum,
> +static int lan9303_phy_write(struct dsa_switch *ds, int port, int regnum,
>  			     u16 val)
>  {
>  	struct lan9303 *chip = ds->priv;
>  	int phy_base = chip->phy_addr_base;
>  
> -	if (phy == phy_base)
> +	if (port == 0)
>  		return lan9303_virt_phy_reg_write(chip, regnum, val);
> -	if (phy > phy_base + 2)
> +	if (port > 2)
>  		return -ENODEV;
>  
> -	return chip->ops->phy_write(chip, phy, regnum, val);
> +	return chip->ops->phy_write(chip, phy_base + port, regnum, val);
>  }
>  
>  static int lan9303_port_enable(struct dsa_switch *ds, int port,
> @@ -1099,7 +1099,7 @@ static void lan9303_port_disable(struct dsa_switch *ds, int port)
>  	vlan_vid_del(dsa_port_to_conduit(dp), htons(ETH_P_8021Q), port);
>  
>  	lan9303_disable_processing_port(chip, port);
> -	lan9303_phy_write(ds, chip->phy_addr_base + port, MII_BMCR, BMCR_PDOWN);
> +	lan9303_phy_write(ds, port, MII_BMCR, BMCR_PDOWN);
>  }
>  
>  static int lan9303_port_bridge_join(struct dsa_switch *ds, int port,
> @@ -1374,8 +1374,6 @@ static const struct dsa_switch_ops lan9303_switch_ops = {
>  
>  static int lan9303_register_switch(struct lan9303 *chip)
>  {
> -	int base;
> -
>  	chip->ds = devm_kzalloc(chip->dev, sizeof(*chip->ds), GFP_KERNEL);
>  	if (!chip->ds)
>  		return -ENOMEM;
> @@ -1385,8 +1383,7 @@ static int lan9303_register_switch(struct lan9303 *chip)
>  	chip->ds->priv = chip;
>  	chip->ds->ops = &lan9303_switch_ops;
>  	chip->ds->phylink_mac_ops = &lan9303_phylink_mac_ops;
> -	base = chip->phy_addr_base;
> -	chip->ds->phys_mii_mask = GENMASK(LAN9303_NUM_PORTS - 1 + base, base);
> +	chip->ds->phys_mii_mask = GENMASK(LAN9303_NUM_PORTS - 1, 0);
>  
>  	return dsa_register_switch(chip->ds);
>  }
> -- 
> 2.43.0
> 
> 

The patch looks OK.

Thanks,
Reviewed-by: Michal Kubiak <michal.kubiak@intel.com>

  parent reply	other threads:[~2024-07-03 16:04 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-03 14:57 [PATCH net 1/2] dsa: lan9303: Fix mapping between DSA port number and PHY address Christian Eggers
2024-07-03 14:57 ` [PATCH net 2/2] dsa: lan9303: consistent naming for PHY address parameter Christian Eggers
2024-07-03 16:08   ` Michal Kubiak
2024-07-04 14:51   ` Florian Fainelli
2024-07-05  2:20   ` Jakub Kicinski
2024-07-08 12:13     ` Vladimir Oltean
2024-07-08 16:33       ` Jakub Kicinski
2024-07-03 16:04 ` Michal Kubiak [this message]
2024-07-04 14:50 ` [PATCH net 1/2] dsa: lan9303: Fix mapping between DSA port number and PHY address Florian Fainelli
2024-07-04 17:29 ` Vladimir Oltean
2024-07-05  2:30 ` patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZoV2hNiGvHnDfIcU@localhost.localdomain \
    --to=michal.kubiak@intel.com \
    --cc=andrew@lunn.ch \
    --cc=ceggers@arri.de \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=f.fainelli@gmail.com \
    --cc=jbe@pengutronix.de \
    --cc=kernel@pengutronix.de \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=olteanv@gmail.com \
    --cc=pabeni@redhat.com \
    --cc=sr@denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.