From: Russell King - ARM Linux admin <linux@armlinux.org.uk>
To: Jonathan McDowell <noodles@earth.li>
Cc: Andrew Lunn <andrew@lunn.ch>,
Vivien Didelot <vivien.didelot@gmail.com>,
Florian Fainelli <f.fainelli@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Jakub Kicinski <kuba@kernel.org>,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/2] net: dsa: qca8k: Switch to PHYLINK instead of PHYLIB
Date: Thu, 11 Jun 2020 09:55:23 +0100 [thread overview]
Message-ID: <20200611085523.GV1551@shell.armlinux.org.uk> (raw)
In-Reply-To: <78519bc421a1cb7000a68d05e43c4208b26f37e5.1591816172.git.noodles@earth.li>
On Wed, Jun 10, 2020 at 08:14:03PM +0100, Jonathan McDowell wrote:
> Update the driver to use the new PHYLINK callbacks, removing the
> legacy adjust_link callback.
Looks good, there's a couple of issues / questions
> static void
> +qca8k_phylink_mac_config(struct dsa_switch *ds, int port, unsigned int mode,
> + const struct phylink_link_state *state)
> {
> struct qca8k_priv *priv = ds->priv;
> u32 reg;
>
> + switch (port) {
...
> + case 6: /* 2nd CPU port / external PHY */
> + if (state->interface != PHY_INTERFACE_MODE_RGMII &&
> + state->interface != PHY_INTERFACE_MODE_RGMII_ID &&
> + state->interface != PHY_INTERFACE_MODE_SGMII &&
> + state->interface != PHY_INTERFACE_MODE_1000BASEX)
> + return;
> +
> + reg = QCA8K_REG_PORT6_PAD_CTRL;
> + break;
...
> + }
> +
> + if (port != 6 && phylink_autoneg_inband(mode)) {
> + dev_err(ds->dev, "%s: in-band negotiation unsupported\n",
> + __func__);
> + return;
> + }
> +
> + switch (state->interface) {
...
> + case PHY_INTERFACE_MODE_SGMII:
> + case PHY_INTERFACE_MODE_1000BASEX:
> + /* Enable SGMII on the port */
> + qca8k_write(priv, reg, QCA8K_PORT_PAD_SGMII_EN);
> + break;
Is inband mode configurable? What if the link partner does/doesn't
send the configuration word? How is the link state communicated to
the MAC?
> +static int
> +qca8k_phylink_mac_link_state(struct dsa_switch *ds, int port,
> + struct phylink_link_state *state)
> +{
> + struct qca8k_priv *priv = ds->priv;
> + u32 reg;
>
> + reg = qca8k_read(priv, QCA8K_REG_PORT_STATUS(port));
> +
> + state->link = !!(reg & QCA8K_PORT_STATUS_LINK_UP);
> + state->an_complete = state->link;
> + state->an_enabled = !!(reg & QCA8K_PORT_STATUS_LINK_AUTO);
> + state->duplex = (reg & QCA8K_PORT_STATUS_DUPLEX) ? DUPLEX_FULL :
> + DUPLEX_HALF;
> +
> + switch (reg & QCA8K_PORT_STATUS_SPEED) {
> + case QCA8K_PORT_STATUS_SPEED_10:
> + state->speed = SPEED_10;
> + break;
> + case QCA8K_PORT_STATUS_SPEED_100:
> + state->speed = SPEED_100;
> + break;
> + case QCA8K_PORT_STATUS_SPEED_1000:
> + state->speed = SPEED_1000;
> + break;
> + default:
> + state->speed = SPEED_UNKNOWN;
Maybe also force the link down in this case, since the state is invalid?
Do you have access to the link partner's configuration word? If you do,
you should use that to fill in state->lp_advertising.
> + break;
> + }
> +
> + state->pause = MLO_PAUSE_NONE;
> + if (reg & QCA8K_PORT_STATUS_RXFLOW)
> + state->pause |= MLO_PAUSE_RX;
> + if (reg & QCA8K_PORT_STATUS_TXFLOW)
> + state->pause |= MLO_PAUSE_TX;
> +
> + return 1;
> +}
> +
> +static void
> +qca8k_phylink_mac_link_down(struct dsa_switch *ds, int port, unsigned int mode,
> + phy_interface_t interface)
> +{
> + struct qca8k_priv *priv = ds->priv;
>
> qca8k_port_set_status(priv, port, 0);
If operating in in-band mode, forcing the link down unconditionally
will prevent the link coming up if the SGMII/1000base-X block
automatically updates the MAC, and if this takes precedence.
When using in-band mode, you need to call dsa_port_phylink_mac_change()
to keep phylink updated with the link status.
Alternatively, phylink supports polling mode, but due to the layered
way DSA is written, DSA drivers don't have access to that as that is
in the DSA upper levels in net/dsa/slave.c (dsa_slave_phy_setup(),
it would be dp->pl_config.pcs_poll).
Apart from those points, I think it looks fine, thanks.
--
RMK's Patch system: https://www.armlinux.org.uk/developer/patches/
FTTC for 0.8m (est. 1762m) line in suburbia: sync at 13.1Mbps down 503kbps up
next prev parent reply other threads:[~2020-06-11 8:55 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-06-05 18:08 [PATCH 0/2] net: dsa: qca8k: Add SGMII configuration options Jonathan McDowell
2020-06-05 18:10 ` [PATCH 1/2] dt-bindings: net: dsa: qca8k: document SGMII properties Jonathan McDowell
2020-06-15 17:45 ` Rob Herring
2020-06-15 18:15 ` Jonathan McDowell
2020-06-05 18:10 ` [PATCH 2/2] net: dsa: qca8k: introduce SGMII configuration options Jonathan McDowell
2020-06-05 18:28 ` Marek Behun
2020-06-05 18:38 ` Andrew Lunn
2020-06-06 7:49 ` Jonathan McDowell
2020-06-06 8:37 ` Russell King - ARM Linux admin
2020-06-06 10:59 ` Jonathan McDowell
2020-06-06 13:43 ` Russell King - ARM Linux admin
2020-06-06 18:02 ` Jonathan McDowell
2020-06-06 14:03 ` Andrew Lunn
2020-06-08 18:39 ` [RFC PATCH v2] net: dsa: qca8k: Improve SGMII interface handling Jonathan McDowell
2020-06-08 19:05 ` Andrew Lunn
2020-06-08 19:10 ` Russell King - ARM Linux admin
2020-06-10 19:13 ` [RFC PATCH v3 0/2] " Jonathan McDowell
2020-06-10 19:14 ` [PATCH 1/2] net: dsa: qca8k: Switch to PHYLINK instead of PHYLIB Jonathan McDowell
2020-06-11 3:15 ` Florian Fainelli
2020-06-11 8:55 ` Russell King - ARM Linux admin [this message]
2020-06-11 9:01 ` Vladimir Oltean
2020-06-12 11:53 ` Jonathan McDowell
2020-06-11 8:58 ` Vladimir Oltean
2020-06-11 11:04 ` Jonathan McDowell
2020-06-10 19:15 ` [PATCH 2/2] net: dsa: qca8k: Improve SGMII interface handling Jonathan McDowell
2020-06-11 3:31 ` Florian Fainelli
2020-06-11 17:47 ` Jonathan McDowell
2020-06-11 8:58 ` Russell King - ARM Linux admin
2020-06-10 23:29 ` [RFC PATCH v3 0/2] " David Miller
2020-06-13 11:31 ` [RFC PATCH v4 " Jonathan McDowell
2020-06-13 11:31 ` [RFC PATCH v4 1/2] net: dsa: qca8k: Switch to PHYLINK instead of PHYLIB Jonathan McDowell
2020-06-13 19:30 ` Vladimir Oltean
2020-06-13 11:32 ` [RFC PATCH v4 2/2] net: dsa: qca8k: Improve SGMII interface handling Jonathan McDowell
2020-06-13 20:10 ` Vladimir Oltean
2020-06-14 17:20 ` Jonathan McDowell
2020-06-20 10:30 ` [PATCH net-next v5 0/3] " Jonathan McDowell
2020-06-20 10:30 ` [PATCH net-next v5 1/3] net: dsa: qca8k: Switch to PHYLINK instead of PHYLIB Jonathan McDowell
2020-06-20 10:31 ` [PATCH net-next v5 2/3] net: dsa: qca8k: Improve SGMII interface handling Jonathan McDowell
2020-06-20 10:31 ` [PATCH net-next v5 3/3] net: dsa: qca8k: Minor comment spelling fix Jonathan McDowell
2020-06-22 22:54 ` [PATCH net-next v5 0/3] net: dsa: qca8k: Improve SGMII interface handling David Miller
2020-06-19 8:12 ` [PATCH 2/2] net: dsa: qca8k: introduce SGMII configuration options Dan Carpenter
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=20200611085523.GV1551@shell.armlinux.org.uk \
--to=linux@armlinux.org.uk \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=f.fainelli@gmail.com \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=noodles@earth.li \
--cc=vivien.didelot@gmail.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;
as well as URLs for NNTP newsgroup(s).