All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 1/6] net: dsa: vsc73xx: convert to PHYLINK
@ 2023-06-21 19:12 Pawel Dembicki
  2023-06-21 19:12 ` [PATCH net-next 2/6] net: dsa: vsc73xx: add port_stp_state_set function Pawel Dembicki
                   ` (8 more replies)
  0 siblings, 9 replies; 28+ messages in thread
From: Pawel Dembicki @ 2023-06-21 19:12 UTC (permalink / raw)
  To: netdev
  Cc: linus.walleij, Pawel Dembicki, Andrew Lunn, Florian Fainelli,
	Vladimir Oltean, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Russell King, linux-kernel

This patch replaces the adjust_link api with the phylink apis that provide
equivalent functionality.

The remaining functionality from the adjust_link is now covered in the
phylink_mac_link_* and phylink_mac_config.

Removes:
.adjust_link
Adds:
.phylink_get_caps
.phylink_mac_link_down
.phylink_mac_link_up
.phylink_mac_link_down

Signed-off-by: Pawel Dembicki <paweldembicki@gmail.com>
---
 drivers/net/dsa/vitesse-vsc73xx-core.c | 179 ++++++++++++++-----------
 1 file changed, 99 insertions(+), 80 deletions(-)

diff --git a/drivers/net/dsa/vitesse-vsc73xx-core.c b/drivers/net/dsa/vitesse-vsc73xx-core.c
index ae55167ce0a6..e853b57b0bc8 100644
--- a/drivers/net/dsa/vitesse-vsc73xx-core.c
+++ b/drivers/net/dsa/vitesse-vsc73xx-core.c
@@ -39,6 +39,7 @@
 #define VSC73XX_BLOCK_SYSTEM	0x7 /* Only subblock 0 */
 
 #define CPU_PORT	6 /* CPU port */
+#define VSC73XX_TABLE_ATTEMPTS	10
 
 /* MAC Block registers */
 #define VSC73XX_MAC_CFG		0x00
@@ -715,8 +716,7 @@ static void vsc73xx_init_port(struct vsc73xx *vsc, int port)
 }
 
 static void vsc73xx_adjust_enable_port(struct vsc73xx *vsc,
-				       int port, struct phy_device *phydev,
-				       u32 initval)
+				       int port, u32 initval)
 {
 	u32 val = initval;
 	u8 seed;
@@ -754,12 +754,40 @@ static void vsc73xx_adjust_enable_port(struct vsc73xx *vsc,
 			    VSC73XX_MAC_CFG_TX_EN | VSC73XX_MAC_CFG_RX_EN);
 }
 
-static void vsc73xx_adjust_link(struct dsa_switch *ds, int port,
-				struct phy_device *phydev)
+static void vsc73xx_phylink_get_caps(struct dsa_switch *ds, int port,
+				     struct phylink_config *config)
 {
-	struct vsc73xx *vsc = ds->priv;
-	u32 val;
+	/* This switch only supports full-duplex at 1Gbps */
+	config->mac_capabilities = MAC_10 | MAC_100 | MAC_1000FD |
+				   MAC_ASYM_PAUSE | MAC_SYM_PAUSE;
 
+	if (port == CPU_PORT) {
+		__set_bit(PHY_INTERFACE_MODE_RGMII,
+			  config->supported_interfaces);
+		__set_bit(PHY_INTERFACE_MODE_GMII,
+			  config->supported_interfaces);
+	} else {
+		__set_bit(PHY_INTERFACE_MODE_INTERNAL,
+			  config->supported_interfaces);
+		/* Compatibility for phylib's default interface type when the
+		 * phy-mode property is absent
+		 */
+		__set_bit(PHY_INTERFACE_MODE_GMII,
+			  config->supported_interfaces);
+	}
+
+	/* This driver does not make use of the speed, duplex, pause or the
+	 * advertisement in its mac_config, so it is safe to mark this driver
+	 * as non-legacy.
+	 */
+	config->legacy_pre_march2020 = false;
+}
+
+static void vsc73xx_phylink_mac_config(struct dsa_switch *ds, int port,
+				       unsigned int mode,
+				       const struct phylink_link_state *state)
+{
+	struct vsc73xx *vsc = ds->priv;
 	/* Special handling of the CPU-facing port */
 	if (port == CPU_PORT) {
 		/* Other ports are already initialized but not this one */
@@ -775,104 +803,92 @@ static void vsc73xx_adjust_link(struct dsa_switch *ds, int port,
 			      VSC73XX_ADVPORTM_ENA_GTX |
 			      VSC73XX_ADVPORTM_DDR_MODE);
 	}
+}
 
-	/* This is the MAC confiuration that always need to happen
-	 * after a PHY or the CPU port comes up or down.
-	 */
-	if (!phydev->link) {
-		int maxloop = 10;
+static void vsc73xx_phylink_mac_link_down(struct dsa_switch *ds, int port,
+					  unsigned int mode,
+					  phy_interface_t interface)
+{
+	struct vsc73xx *vsc = ds->priv;
+	u32 val;
 
-		dev_dbg(vsc->dev, "port %d: went down\n",
-			port);
+	int maxloop = VSC73XX_TABLE_ATTEMPTS;
 
-		/* Disable RX on this port */
-		vsc73xx_update_bits(vsc, VSC73XX_BLOCK_MAC, port,
-				    VSC73XX_MAC_CFG,
-				    VSC73XX_MAC_CFG_RX_EN, 0);
+	dev_dbg(vsc->dev, "port %d: went down\n",
+		port);
 
-		/* Discard packets */
-		vsc73xx_update_bits(vsc, VSC73XX_BLOCK_ARBITER, 0,
-				    VSC73XX_ARBDISC, BIT(port), BIT(port));
+	/* Disable RX on this port */
+	vsc73xx_update_bits(vsc, VSC73XX_BLOCK_MAC, port,
+			    VSC73XX_MAC_CFG,
+			    VSC73XX_MAC_CFG_RX_EN, 0);
+
+	/* Discard packets */
+	vsc73xx_update_bits(vsc, VSC73XX_BLOCK_ARBITER, 0,
+			    VSC73XX_ARBDISC, BIT(port), BIT(port));
 
-		/* Wait until queue is empty */
+	/* Wait until queue is empty */
+	vsc73xx_read(vsc, VSC73XX_BLOCK_ARBITER, 0,
+		     VSC73XX_ARBEMPTY, &val);
+	while (!(val & BIT(port))) {
+		msleep(1);
 		vsc73xx_read(vsc, VSC73XX_BLOCK_ARBITER, 0,
 			     VSC73XX_ARBEMPTY, &val);
-		while (!(val & BIT(port))) {
-			msleep(1);
-			vsc73xx_read(vsc, VSC73XX_BLOCK_ARBITER, 0,
-				     VSC73XX_ARBEMPTY, &val);
-			if (--maxloop == 0) {
-				dev_err(vsc->dev,
-					"timeout waiting for block arbiter\n");
-				/* Continue anyway */
-				break;
-			}
+		if (--maxloop == 0) {
+			dev_err(vsc->dev,
+				"timeout waiting for block arbiter\n");
+			/* Continue anyway */
+			break;
 		}
+	}
 
-		/* Put this port into reset */
-		vsc73xx_write(vsc, VSC73XX_BLOCK_MAC, port, VSC73XX_MAC_CFG,
-			      VSC73XX_MAC_CFG_RESET);
-
-		/* Accept packets again */
-		vsc73xx_update_bits(vsc, VSC73XX_BLOCK_ARBITER, 0,
-				    VSC73XX_ARBDISC, BIT(port), 0);
+	/* Put this port into reset */
+	vsc73xx_write(vsc, VSC73XX_BLOCK_MAC, port, VSC73XX_MAC_CFG,
+		      VSC73XX_MAC_CFG_RESET);
 
-		/* Allow backward dropping of frames from this port */
-		vsc73xx_update_bits(vsc, VSC73XX_BLOCK_ARBITER, 0,
-				    VSC73XX_SBACKWDROP, BIT(port), BIT(port));
+	/* Accept packets again */
+	vsc73xx_update_bits(vsc, VSC73XX_BLOCK_ARBITER, 0,
+			    VSC73XX_ARBDISC, BIT(port), 0);
 
-		/* Receive mask (disable forwarding) */
-		vsc73xx_update_bits(vsc, VSC73XX_BLOCK_ANALYZER, 0,
-				    VSC73XX_RECVMASK, BIT(port), 0);
+	/* Allow backward dropping of frames from this port */
+	vsc73xx_update_bits(vsc, VSC73XX_BLOCK_ARBITER, 0,
+			    VSC73XX_SBACKWDROP, BIT(port), BIT(port));
 
-		return;
-	}
+	/* Receive mask (disable forwarding) */
+	vsc73xx_update_bits(vsc, VSC73XX_BLOCK_ANALYZER, 0,
+			    VSC73XX_RECVMASK, BIT(port), 0);
+}
 
-	/* Figure out what speed was negotiated */
-	if (phydev->speed == SPEED_1000) {
-		dev_dbg(vsc->dev, "port %d: 1000 Mbit mode full duplex\n",
-			port);
+static void vsc73xx_phylink_mac_link_up(struct dsa_switch *ds, int port,
+					unsigned int mode,
+					phy_interface_t interface,
+					struct phy_device *phydev,
+					int speed, int duplex,
+					bool tx_pause, bool rx_pause)
+{
+	struct vsc73xx *vsc = ds->priv;
+	u32 val;
 
+	switch (speed) {
+	case SPEED_1000:
 		/* Set up default for internal port or external RGMII */
-		if (phydev->interface == PHY_INTERFACE_MODE_RGMII)
+		if (interface == PHY_INTERFACE_MODE_RGMII)
 			val = VSC73XX_MAC_CFG_1000M_F_RGMII;
 		else
 			val = VSC73XX_MAC_CFG_1000M_F_PHY;
-		vsc73xx_adjust_enable_port(vsc, port, phydev, val);
-	} else if (phydev->speed == SPEED_100) {
-		if (phydev->duplex == DUPLEX_FULL) {
-			val = VSC73XX_MAC_CFG_100_10M_F_PHY;
-			dev_dbg(vsc->dev,
-				"port %d: 100 Mbit full duplex mode\n",
-				port);
-		} else {
-			val = VSC73XX_MAC_CFG_100_10M_H_PHY;
-			dev_dbg(vsc->dev,
-				"port %d: 100 Mbit half duplex mode\n",
-				port);
-		}
-		vsc73xx_adjust_enable_port(vsc, port, phydev, val);
-	} else if (phydev->speed == SPEED_10) {
-		if (phydev->duplex == DUPLEX_FULL) {
+		break;
+	case SPEED_100:
+	case SPEED_10:
+		if (duplex == DUPLEX_FULL)
 			val = VSC73XX_MAC_CFG_100_10M_F_PHY;
-			dev_dbg(vsc->dev,
-				"port %d: 10 Mbit full duplex mode\n",
-				port);
-		} else {
+		else
 			val = VSC73XX_MAC_CFG_100_10M_H_PHY;
-			dev_dbg(vsc->dev,
-				"port %d: 10 Mbit half duplex mode\n",
-				port);
-		}
-		vsc73xx_adjust_enable_port(vsc, port, phydev, val);
-	} else {
-		dev_err(vsc->dev,
-			"could not adjust link: unknown speed\n");
+		break;
 	}
 
 	/* Enable port (forwarding) in the receieve mask */
 	vsc73xx_update_bits(vsc, VSC73XX_BLOCK_ANALYZER, 0,
 			    VSC73XX_RECVMASK, BIT(port), BIT(port));
+	vsc73xx_adjust_enable_port(vsc, port, val);
 }
 
 static int vsc73xx_port_enable(struct dsa_switch *ds, int port,
@@ -1043,7 +1059,10 @@ static const struct dsa_switch_ops vsc73xx_ds_ops = {
 	.setup = vsc73xx_setup,
 	.phy_read = vsc73xx_phy_read,
 	.phy_write = vsc73xx_phy_write,
-	.adjust_link = vsc73xx_adjust_link,
+	.phylink_get_caps = vsc73xx_phylink_get_caps,
+	.phylink_mac_config = vsc73xx_phylink_mac_config,
+	.phylink_mac_link_down = vsc73xx_phylink_mac_link_down,
+	.phylink_mac_link_up = vsc73xx_phylink_mac_link_up,
 	.get_strings = vsc73xx_get_strings,
 	.get_ethtool_stats = vsc73xx_get_ethtool_stats,
 	.get_sset_count = vsc73xx_get_sset_count,
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 28+ messages in thread
* Re: [PATCH net-next 1/6] net: dsa: vsc73xx: convert to PHYLINK
@ 2023-06-30 14:19 kernel test robot
  0 siblings, 0 replies; 28+ messages in thread
From: kernel test robot @ 2023-06-30 14:19 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Dan Carpenter

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
In-Reply-To: <20230621191302.1405623-1-paweldembicki@gmail.com>
References: <20230621191302.1405623-1-paweldembicki@gmail.com>
TO: Pawel Dembicki <paweldembicki@gmail.com>
TO: netdev@vger.kernel.org
CC: linus.walleij@linaro.org
CC: Pawel Dembicki <paweldembicki@gmail.com>
CC: Andrew Lunn <andrew@lunn.ch>
CC: Florian Fainelli <f.fainelli@gmail.com>
CC: Vladimir Oltean <olteanv@gmail.com>
CC: Eric Dumazet <edumazet@google.com>
CC: Jakub Kicinski <kuba@kernel.org>
CC: Paolo Abeni <pabeni@redhat.com>
CC: Russell King <linux@armlinux.org.uk>
CC: linux-kernel@vger.kernel.org

Hi Pawel,

kernel test robot noticed the following build warnings:

[auto build test WARNING on net-next/main]

url:    https://github.com/intel-lab-lkp/linux/commits/Pawel-Dembicki/net-dsa-vsc73xx-add-port_stp_state_set-function/20230622-031529
base:   net-next/main
patch link:    https://lore.kernel.org/r/20230621191302.1405623-1-paweldembicki%40gmail.com
patch subject: [PATCH net-next 1/6] net: dsa: vsc73xx: convert to PHYLINK
:::::: branch date: 9 days ago
:::::: commit date: 9 days ago
config: parisc-randconfig-m041-20230629 (https://download.01.org/0day-ci/archive/20230630/202306302257.DWKHSgvF-lkp@intel.com/config)
compiler: hppa-linux-gcc (GCC) 12.3.0
reproduce: (https://download.01.org/0day-ci/archive/20230630/202306302257.DWKHSgvF-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202306302257.DWKHSgvF-lkp@intel.com/

smatch warnings:
drivers/net/dsa/vitesse-vsc73xx-core.c:891 vsc73xx_phylink_mac_link_up() error: uninitialized symbol 'val'.

vim +/val +891 drivers/net/dsa/vitesse-vsc73xx-core.c

05bd97fc559df4 drivers/net/dsa/vitesse-vsc73xx.c      Linus Walleij  2018-06-30  860  
33f498e941bbd8 drivers/net/dsa/vitesse-vsc73xx-core.c Pawel Dembicki 2023-06-21  861  static void vsc73xx_phylink_mac_link_up(struct dsa_switch *ds, int port,
33f498e941bbd8 drivers/net/dsa/vitesse-vsc73xx-core.c Pawel Dembicki 2023-06-21  862  					unsigned int mode,
33f498e941bbd8 drivers/net/dsa/vitesse-vsc73xx-core.c Pawel Dembicki 2023-06-21  863  					phy_interface_t interface,
33f498e941bbd8 drivers/net/dsa/vitesse-vsc73xx-core.c Pawel Dembicki 2023-06-21  864  					struct phy_device *phydev,
33f498e941bbd8 drivers/net/dsa/vitesse-vsc73xx-core.c Pawel Dembicki 2023-06-21  865  					int speed, int duplex,
33f498e941bbd8 drivers/net/dsa/vitesse-vsc73xx-core.c Pawel Dembicki 2023-06-21  866  					bool tx_pause, bool rx_pause)
33f498e941bbd8 drivers/net/dsa/vitesse-vsc73xx-core.c Pawel Dembicki 2023-06-21  867  {
33f498e941bbd8 drivers/net/dsa/vitesse-vsc73xx-core.c Pawel Dembicki 2023-06-21  868  	struct vsc73xx *vsc = ds->priv;
33f498e941bbd8 drivers/net/dsa/vitesse-vsc73xx-core.c Pawel Dembicki 2023-06-21  869  	u32 val;
05bd97fc559df4 drivers/net/dsa/vitesse-vsc73xx.c      Linus Walleij  2018-06-30  870  
33f498e941bbd8 drivers/net/dsa/vitesse-vsc73xx-core.c Pawel Dembicki 2023-06-21  871  	switch (speed) {
33f498e941bbd8 drivers/net/dsa/vitesse-vsc73xx-core.c Pawel Dembicki 2023-06-21  872  	case SPEED_1000:
05bd97fc559df4 drivers/net/dsa/vitesse-vsc73xx.c      Linus Walleij  2018-06-30  873  		/* Set up default for internal port or external RGMII */
33f498e941bbd8 drivers/net/dsa/vitesse-vsc73xx-core.c Pawel Dembicki 2023-06-21  874  		if (interface == PHY_INTERFACE_MODE_RGMII)
05bd97fc559df4 drivers/net/dsa/vitesse-vsc73xx.c      Linus Walleij  2018-06-30  875  			val = VSC73XX_MAC_CFG_1000M_F_RGMII;
05bd97fc559df4 drivers/net/dsa/vitesse-vsc73xx.c      Linus Walleij  2018-06-30  876  		else
05bd97fc559df4 drivers/net/dsa/vitesse-vsc73xx.c      Linus Walleij  2018-06-30  877  			val = VSC73XX_MAC_CFG_1000M_F_PHY;
33f498e941bbd8 drivers/net/dsa/vitesse-vsc73xx-core.c Pawel Dembicki 2023-06-21  878  		break;
33f498e941bbd8 drivers/net/dsa/vitesse-vsc73xx-core.c Pawel Dembicki 2023-06-21  879  	case SPEED_100:
33f498e941bbd8 drivers/net/dsa/vitesse-vsc73xx-core.c Pawel Dembicki 2023-06-21  880  	case SPEED_10:
33f498e941bbd8 drivers/net/dsa/vitesse-vsc73xx-core.c Pawel Dembicki 2023-06-21  881  		if (duplex == DUPLEX_FULL)
05bd97fc559df4 drivers/net/dsa/vitesse-vsc73xx.c      Linus Walleij  2018-06-30  882  			val = VSC73XX_MAC_CFG_100_10M_F_PHY;
33f498e941bbd8 drivers/net/dsa/vitesse-vsc73xx-core.c Pawel Dembicki 2023-06-21  883  		else
05bd97fc559df4 drivers/net/dsa/vitesse-vsc73xx.c      Linus Walleij  2018-06-30  884  			val = VSC73XX_MAC_CFG_100_10M_H_PHY;
33f498e941bbd8 drivers/net/dsa/vitesse-vsc73xx-core.c Pawel Dembicki 2023-06-21  885  		break;
05bd97fc559df4 drivers/net/dsa/vitesse-vsc73xx.c      Linus Walleij  2018-06-30  886  	}
05bd97fc559df4 drivers/net/dsa/vitesse-vsc73xx.c      Linus Walleij  2018-06-30  887  
05bd97fc559df4 drivers/net/dsa/vitesse-vsc73xx.c      Linus Walleij  2018-06-30  888  	/* Enable port (forwarding) in the receieve mask */
05bd97fc559df4 drivers/net/dsa/vitesse-vsc73xx.c      Linus Walleij  2018-06-30  889  	vsc73xx_update_bits(vsc, VSC73XX_BLOCK_ANALYZER, 0,
05bd97fc559df4 drivers/net/dsa/vitesse-vsc73xx.c      Linus Walleij  2018-06-30  890  			    VSC73XX_RECVMASK, BIT(port), BIT(port));
33f498e941bbd8 drivers/net/dsa/vitesse-vsc73xx-core.c Pawel Dembicki 2023-06-21 @891  	vsc73xx_adjust_enable_port(vsc, port, val);
05bd97fc559df4 drivers/net/dsa/vitesse-vsc73xx.c      Linus Walleij  2018-06-30  892  }
05bd97fc559df4 drivers/net/dsa/vitesse-vsc73xx.c      Linus Walleij  2018-06-30  893  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 28+ messages in thread

end of thread, other threads:[~2023-06-30 14:19 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-21 19:12 [PATCH net-next 1/6] net: dsa: vsc73xx: convert to PHYLINK Pawel Dembicki
2023-06-21 19:12 ` [PATCH net-next 2/6] net: dsa: vsc73xx: add port_stp_state_set function Pawel Dembicki
2023-06-21 19:33   ` Andrew Lunn
2023-06-21 20:38     ` Paweł Dembicki
2023-06-22 13:01       ` Andrew Lunn
2023-06-22 13:06         ` Vladimir Oltean
2023-06-21 21:27     ` Linus Walleij
2023-06-25 11:21       ` Vladimir Oltean
2023-06-25 11:47         ` Paweł Dembicki
2023-06-21 21:28   ` Linus Walleij
2023-06-22 17:24   ` Jakub Kicinski
2023-06-21 19:12 ` [PATCH net-next 3/6] net: dsa: vsc73xx: Add dsa tagging based on 8021q Pawel Dembicki
2023-06-21 21:32   ` Linus Walleij
2023-06-22  7:41   ` Simon Horman
2023-06-21 19:13 ` [PATCH net-next 4/6] net: dsa: vsc73xx: Add bridge support Pawel Dembicki
2023-06-21 21:33   ` Linus Walleij
2023-06-21 19:13 ` [PATCH net-next 5/6] net: dsa: vsc73xx: Add vlan filtering Pawel Dembicki
2023-06-21 21:34   ` Linus Walleij
2023-06-21 19:13 ` [PATCH net-next 6/6] net: dsa: vsc73xx: fix MTU configuration Pawel Dembicki
2023-06-21 21:35   ` Linus Walleij
2023-06-22  7:35   ` Simon Horman
2023-06-21 19:13 ` [PATCH net-next 0/6] net: dsa: vsc73xx: Make vsc73xx usable Pawel Dembicki
2023-06-25 11:59   ` Paweł Dembicki
2023-06-21 21:21 ` [PATCH net-next 1/6] net: dsa: vsc73xx: convert to PHYLINK Linus Walleij
2023-06-22  7:34 ` Simon Horman
2023-06-22 11:55 ` Russell King (Oracle)
2023-06-24  4:02   ` Paweł Dembicki
  -- strict thread matches above, loose matches on Subject: below --
2023-06-30 14:19 kernel test robot

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.