mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Kyle Switch <kyle.switch@motor-comm.com>
To: Andrew Lunn <andrew@lunn.ch>
Cc: olteanv@gmail.com, davem@davemloft.net, edumazet@google.com,
	kuba@kernel.org, pabeni@redhat.com, mmyangfl@gmail.com,
	horms@kernel.org, linux@armlinux.org.uk, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org, ming.xu@motor-comm.com,
	xiaolin.xu@motor-comm.com, jianmin.wang@motor-comm.com,
	wei.zhang@gl-inet.com, sijia.huang@gl-inet.com
Subject: Re: [PATCH net-next v14 5/5] net: dsa: motorcomm: Add support for Motorcomm YT922x
Date: Sun, 18 Oct 2026 11:10:55 +0800	[thread overview]
Message-ID: <0ce7a944-4a12-47be-a413-4706f8eb8258@motor-comm.com> (raw)
In-Reply-To: <bc293fd1-4414-4d0e-9247-a5a91db90f15@lunn.ch>


On 10/13/26 09:51, Andrew Lunn wrote:
>> +++ b/drivers/net/dsa/motorcomm/mdio_bus.c
>> @@ -299,3 +299,42 @@ int yt921x_mbus_ext_init(struct yt921x_priv *priv, struct device_node *mnp)
>>   
>>   	return 0;
>>   }
>> +
>> +/* intif extend register read/write api */
>> +int
>> +yt921x_intif_ext_write(struct yt921x_priv *priv, int port, int reg, u16 val)
>> +{
>> +	int res;
>> +
>> +	if (port > priv->series->max_ports)
>> +		return -ENODEV;
>> +
>> +	res = yt921x_intif_write(priv, port, YT92XX_PAGE_SELECT, reg);
>> +	if (res)
>> +		return res;
>> +
>> +	res = yt921x_intif_write(priv, port, YT92XX_PAGE, val);
>> +	if (res)
>> +		return res;
>> +
>> +	return 0;
>> +}
>> +
>> +int
>> +yt921x_intif_ext_read(struct yt921x_priv *priv, int port, int reg, u16 *valp)
>> +{
>> +	int res;
>> +
>> +	if (port > priv->series->max_ports)
>> +		return -ENODEV;
>> +
>> +	res = yt921x_intif_write(priv, port, YT92XX_PAGE_SELECT, reg);
>> +	if (res)
>> +		return res;
>> +
>> +	res = yt921x_intif_read(priv, port, YT92XX_PAGE, valp);
>> +	if (res)
>> +		return res;
>> +
>> +	return 0;
>> +}
> Why are these in mdio_bus? They don't have anything to do with MDIO.
>
> Since they build on yt921x_intif_read they seem to fit in yt921x.c
> better? Or am i missing something?

These two interfaces access the extend registers of the Phy/serdes.

Following the existing code style-where the PHY/SerDes MII registers

were placed in the mdio_bus.c,these two interfaces are also placed

in the mdio_bus.c.

>> +static void yt922x_pcs_get_state(struct phylink_pcs *pcs, unsigned int neg_mode,
>> +				 struct phylink_link_state *state)
>> +{
>> +	struct yt921x_port *pp = pcs_to_yt921x_port(pcs);
>> +	struct yt921x_priv *priv = yt921x_port_to_priv(pp);
>> +	int port = pp->index;
>> +	int res = 0;
>> +	u16 data;
>> +	int addr;
>> +	u16 lp;
>> +
>> +	addr = yt922x_sds_phyaddr_get(port, YT922X_PHY_REG_TYPE_MII);
>> +	if (addr < 0) {
>> +		state->link = false;
>> +		return;
>> +	}
>> +
>> +	mutex_lock(&priv->reg_lock);
>> +	switch (state->interface) {
>> +	case PHY_INTERFACE_MODE_SGMII:
>> +	case PHY_INTERFACE_MODE_1000BASEX:
>> +	case PHY_INTERFACE_MODE_2500BASEX:
>> +		res = yt921x_intif_read(priv, addr, MII_BMSR, &data);
>> +		if (res)
>> +			goto err;
>> +		res = yt921x_intif_read(priv, addr, MII_LPA, &lp);
>> +		if (res)
>> +			goto err;
>> +		phylink_mii_c22_pcs_decode_state(state, neg_mode, data, lp);
>
> Rather than data, call it bmsr. It then fits:
>
> void phylink_mii_c22_pcs_decode_state(struct phylink_link_state *state,
> 				      unsigned int neg_mode, u16 bmsr, u16 lpa)
Okay.
>
>> +static void yt922x_pcs_an_restart(struct phylink_pcs *pcs)
>> +{
>> +	struct yt921x_port *pp = pcs_to_yt921x_port(pcs);
>> +	struct yt921x_priv *priv = yt921x_port_to_priv(pp);
>> +	struct device *dev = to_device(priv);
>> +	int port = pp->index;
>> +	u16 data;
>> +	int addr;
>> +	int res;
>> +
>> +	mutex_lock(&priv->reg_lock);
>> +	addr = yt922x_sds_phyaddr_get(port, YT922X_PHY_REG_TYPE_MII);
>> +	if (addr < 0) {
>> +		res = addr;
>> +		goto err;
>> +	}
>> +	res = yt921x_intif_read(priv, addr, MII_BMCR, &data);
>> +	if (res)
>> +		goto err;
>> +	data |= BMCR_ANRESTART;
>> +	res = yt921x_intif_write(priv, addr, MII_BMCR, data);
> Again, bmcr. It then looks a lot like
> phylink_mii_c22_pcs_an_restart().
Okay.
>> +	if (res)
>> +		goto err;
>> +	mutex_unlock(&priv->reg_lock);
>> +	return;
>> +
>> +err:
>> +	mutex_unlock(&priv->reg_lock);
>> +	if (res)
>> +		dev_err(dev, "Failed to %s PCS port %d: %i\n", "an restart",
>> +			port, res);
>> +}
>> +
>> +static int yt922x_pcs_config(struct phylink_pcs *pcs, unsigned int neg_mode,
>> +			     phy_interface_t interface,
>> +			     const unsigned long *advertising,
>> +			     bool permit_pause_to_mac)
>> +{
> advertising does not appear to be used here. Does this pcs not support
> it? That would be odd, because you looked at lpa in earlier functions.

advertising and neg_mode will been handled in next patch version.

>
> 	Andrew

  reply	other threads:[~2026-10-18  3:11 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-13  1:11 [PATCH net-next v14 0/5] net: dsa: motorcomm: add support yt922x driver Kyle Switch
2026-10-13  1:11 ` [PATCH net-next v14 1/5] net: dsa: motorcomm: initialize dsa_switch based on chipid Kyle Switch
2026-10-14  1:59   ` netdev-bot+sashiko
2026-10-13  1:11 ` [PATCH net-next v14 2/5] net: dsa: motorcomm: use max_ports in series for port bounds checking Kyle Switch
2026-10-13  1:11 ` [PATCH net-next v14 3/5] net: dsa: motorcomm: use fixed-width GENMASK_U*() helpers Kyle Switch
2026-10-14  1:59   ` netdev-bot+sashiko
2026-10-16 19:38   ` David Yang
2026-10-18  3:26     ` Kyle Switch
2026-10-13  1:11 ` [PATCH net-next v14 4/5] net: dsa: tag_yt922x: add support for Motorcomm YT922x tags Kyle Switch
2026-10-14  1:59   ` netdev-bot+sashiko
2026-10-13  1:11 ` [PATCH net-next v14 5/5] net: dsa: motorcomm: Add support for Motorcomm YT922x Kyle Switch
2026-10-13  1:51   ` Andrew Lunn
2026-10-18  3:10     ` Kyle Switch [this message]
2026-10-14  1:59   ` netdev-bot+sashiko
2026-10-16 20:15   ` David Yang
2026-10-18  3:02     ` Kyle Switch

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=0ce7a944-4a12-47be-a413-4706f8eb8258@motor-comm.com \
    --to=kyle.switch@motor-comm.com \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=horms@kernel.org \
    --cc=jianmin.wang@motor-comm.com \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=ming.xu@motor-comm.com \
    --cc=mmyangfl@gmail.com \
    --cc=netdev@vger.kernel.org \
    --cc=olteanv@gmail.com \
    --cc=pabeni@redhat.com \
    --cc=sijia.huang@gl-inet.com \
    --cc=wei.zhang@gl-inet.com \
    --cc=xiaolin.xu@motor-comm.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®