netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/4] ksz9477 dsa switch driver improvements
@ 2020-09-09 10:04 Paul Barker
  2020-09-09 10:04 ` [PATCH v3 1/4] net: dsa: microchip: Make switch detection more informative Paul Barker
                   ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: Paul Barker @ 2020-09-09 10:04 UTC (permalink / raw)
  To: Woojung Huh, Microchip Linux Driver Support, Andrew Lunn,
	Vivien Didelot, Florian Fainelli, David S . Miller
  Cc: Paul Barker, netdev

These changes were made while debugging the ksz9477 driver for use on a
custom board which uses the ksz9893 switch supported by this driver. The
patches have been runtime tested on top of Linux 5.8.4, I couldn't
runtime test them on top of 5.9-rc3 due to unrelated issues. They have
been build tested on top of net-next.

These changes can also be pulled from:

  https://gitlab.com/pbarker.dev/staging/linux.git
  tag: for-net-next/ksz-v3_2020-09-09

Changes from v2:

  * Fixed incorrect type in assignment error.
    Reported-by: kernel test robot <lkp@intel.com>

Changes from v1:

  * Rebased onto net-next.

  * Dropped unnecessary `#include <linux/printk.h>`.

  * Instead of printing the phy mode in `ksz9477_port_setup()`, modify
    the existing print in `ksz9477_config_cpu_port()` to always produce
    output and to be more clear.

Paul Barker (4):
  net: dsa: microchip: Make switch detection more informative
  net: dsa: microchip: Improve phy mode message
  net: dsa: microchip: Disable RGMII in-band status on KSZ9893
  net: dsa: microchip: Implement recommended reset timing

 drivers/net/dsa/microchip/ksz9477.c    | 25 ++++++++++++++++++++-----
 drivers/net/dsa/microchip/ksz_common.c |  3 ++-
 2 files changed, 22 insertions(+), 6 deletions(-)

-- 
2.28.0


Paul Barker (4):
  net: dsa: microchip: Make switch detection more informative
  net: dsa: microchip: Improve phy mode message
  net: dsa: microchip: Disable RGMII in-band status on KSZ9893
  net: dsa: microchip: Implement recommended reset timing

 drivers/net/dsa/microchip/ksz9477.c    | 26 +++++++++++++++++++++-----
 drivers/net/dsa/microchip/ksz_common.c |  3 ++-
 2 files changed, 23 insertions(+), 6 deletions(-)


base-commit: f5499c67477eb640e794428da0502c5e4c723119
-- 
2.28.0


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

* [PATCH v3 1/4] net: dsa: microchip: Make switch detection more informative
  2020-09-09 10:04 [PATCH v3 0/4] ksz9477 dsa switch driver improvements Paul Barker
@ 2020-09-09 10:04 ` Paul Barker
  2020-09-09 10:04 ` [PATCH v3 2/4] net: dsa: microchip: Improve phy mode message Paul Barker
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Paul Barker @ 2020-09-09 10:04 UTC (permalink / raw)
  To: Woojung Huh, Microchip Linux Driver Support, Andrew Lunn,
	Vivien Didelot, Florian Fainelli, David S . Miller
  Cc: Paul Barker, netdev

To make switch detection more informative print the result of the
ksz9477/ksz9893 compatibility check. With debug output enabled also
print the contents of the Chip ID registers as a 40-bit hex string.

As this detection is the first communication with the switch performed
by the driver, making it easy to see any errors here will help identify
issues with SPI data corruption or reset sequencing.

Signed-off-by: Paul Barker <pbarker@konsulko.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
---
 drivers/net/dsa/microchip/ksz9477.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchip/ksz9477.c
index 3cb22d149813..df5ecd0261fa 100644
--- a/drivers/net/dsa/microchip/ksz9477.c
+++ b/drivers/net/dsa/microchip/ksz9477.c
@@ -1426,10 +1426,12 @@ static int ksz9477_switch_detect(struct ksz_device *dev)
 	/* Default capability is gigabit capable. */
 	dev->features = GBIT_SUPPORT;
 
+	dev_dbg(dev->dev, "Switch detect: ID=%08x%02x\n", id32, data8);
 	id_hi = (u8)(id32 >> 16);
 	id_lo = (u8)(id32 >> 8);
 	if ((id_lo & 0xf) == 3) {
 		/* Chip is from KSZ9893 design. */
+		dev_info(dev->dev, "Found KSZ9893\n");
 		dev->features |= IS_9893;
 
 		/* Chip does not support gigabit. */
@@ -1438,6 +1440,7 @@ static int ksz9477_switch_detect(struct ksz_device *dev)
 		dev->mib_port_cnt = 3;
 		dev->phy_port_cnt = 2;
 	} else {
+		dev_info(dev->dev, "Found KSZ9477 or compatible\n");
 		/* Chip uses new XMII register definitions. */
 		dev->features |= NEW_XMII;
 
-- 
2.28.0


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

* [PATCH v3 2/4] net: dsa: microchip: Improve phy mode message
  2020-09-09 10:04 [PATCH v3 0/4] ksz9477 dsa switch driver improvements Paul Barker
  2020-09-09 10:04 ` [PATCH v3 1/4] net: dsa: microchip: Make switch detection more informative Paul Barker
@ 2020-09-09 10:04 ` Paul Barker
  2020-09-09 10:04 ` [PATCH v3 3/4] net: dsa: microchip: Disable RGMII in-band status on KSZ9893 Paul Barker
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Paul Barker @ 2020-09-09 10:04 UTC (permalink / raw)
  To: Woojung Huh, Microchip Linux Driver Support, Andrew Lunn,
	Vivien Didelot, Florian Fainelli, David S . Miller
  Cc: Paul Barker, netdev

Always print the selected phy mode for the CPU port when using the
ksz9477 driver. If the phy mode was changed, also print the previous
mode to aid in debugging.

To make the message more clear, prefix it with the port number which it
applies to and improve the language a little.

Signed-off-by: Paul Barker <pbarker@konsulko.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
---
 drivers/net/dsa/microchip/ksz9477.c | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchip/ksz9477.c
index df5ecd0261fa..d9030820f406 100644
--- a/drivers/net/dsa/microchip/ksz9477.c
+++ b/drivers/net/dsa/microchip/ksz9477.c
@@ -1265,6 +1265,8 @@ static void ksz9477_config_cpu_port(struct dsa_switch *ds)
 	for (i = 0; i < dev->port_cnt; i++) {
 		if (dsa_is_cpu_port(ds, i) && (dev->cpu_ports & (1 << i))) {
 			phy_interface_t interface;
+			const char *prev_msg;
+			const char *prev_mode;
 
 			dev->cpu_port = i;
 			dev->host_mask = (1 << dev->cpu_port);
@@ -1277,11 +1279,19 @@ static void ksz9477_config_cpu_port(struct dsa_switch *ds)
 			interface = ksz9477_get_interface(dev, i);
 			if (!dev->interface)
 				dev->interface = interface;
-			if (interface && interface != dev->interface)
-				dev_info(dev->dev,
-					 "use %s instead of %s\n",
-					  phy_modes(dev->interface),
-					  phy_modes(interface));
+			if (interface && interface != dev->interface) {
+				prev_msg = " instead of ";
+				prev_mode = phy_modes(interface);
+			} else {
+				prev_msg = "";
+				prev_mode = "";
+			}
+			dev_info(dev->dev,
+				 "Port%d: using phy mode %s%s%s\n",
+				 i,
+				 phy_modes(dev->interface),
+				 prev_msg,
+				 prev_mode);
 
 			/* enable cpu port */
 			ksz9477_port_setup(dev, i, true);
-- 
2.28.0


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

* [PATCH v3 3/4] net: dsa: microchip: Disable RGMII in-band status on KSZ9893
  2020-09-09 10:04 [PATCH v3 0/4] ksz9477 dsa switch driver improvements Paul Barker
  2020-09-09 10:04 ` [PATCH v3 1/4] net: dsa: microchip: Make switch detection more informative Paul Barker
  2020-09-09 10:04 ` [PATCH v3 2/4] net: dsa: microchip: Improve phy mode message Paul Barker
@ 2020-09-09 10:04 ` Paul Barker
  2020-09-09 10:04 ` [PATCH v3 4/4] net: dsa: microchip: Implement recommended reset timing Paul Barker
  2020-09-09 18:26 ` [PATCH v3 0/4] ksz9477 dsa switch driver improvements David Miller
  4 siblings, 0 replies; 7+ messages in thread
From: Paul Barker @ 2020-09-09 10:04 UTC (permalink / raw)
  To: Woojung Huh, Microchip Linux Driver Support, Andrew Lunn,
	Vivien Didelot, Florian Fainelli, David S . Miller
  Cc: Paul Barker, netdev

We can't assume that the link partner supports the in-band status
reporting which is enabled by default on the KSZ9893 when using RGMII
for the upstream port.

Signed-off-by: Paul Barker <pbarker@konsulko.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
---
 drivers/net/dsa/microchip/ksz9477.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/dsa/microchip/ksz9477.c b/drivers/net/dsa/microchip/ksz9477.c
index d9030820f406..b62dd64470a8 100644
--- a/drivers/net/dsa/microchip/ksz9477.c
+++ b/drivers/net/dsa/microchip/ksz9477.c
@@ -1235,6 +1235,9 @@ static void ksz9477_port_setup(struct ksz_device *dev, int port, bool cpu_port)
 			if (dev->interface == PHY_INTERFACE_MODE_RGMII_ID ||
 			    dev->interface == PHY_INTERFACE_MODE_RGMII_TXID)
 				data8 |= PORT_RGMII_ID_EG_ENABLE;
+			/* On KSZ9893, disable RGMII in-band status support */
+			if (dev->features & IS_9893)
+				data8 &= ~PORT_MII_MAC_MODE;
 			p->phydev.speed = SPEED_1000;
 			break;
 		}
-- 
2.28.0


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

* [PATCH v3 4/4] net: dsa: microchip: Implement recommended reset timing
  2020-09-09 10:04 [PATCH v3 0/4] ksz9477 dsa switch driver improvements Paul Barker
                   ` (2 preceding siblings ...)
  2020-09-09 10:04 ` [PATCH v3 3/4] net: dsa: microchip: Disable RGMII in-band status on KSZ9893 Paul Barker
@ 2020-09-09 10:04 ` Paul Barker
  2020-09-09 18:26 ` [PATCH v3 0/4] ksz9477 dsa switch driver improvements David Miller
  4 siblings, 0 replies; 7+ messages in thread
From: Paul Barker @ 2020-09-09 10:04 UTC (permalink / raw)
  To: Woojung Huh, Microchip Linux Driver Support, Andrew Lunn,
	Vivien Didelot, Florian Fainelli, David S . Miller
  Cc: Paul Barker, netdev

The datasheet for the ksz9893 and ksz9477 switches recommend waiting at
least 100us after the de-assertion of reset before trying to program the
device through any interface.

Also switch the existing msleep() call to usleep_range() as recommended
in Documentation/timers/timers-howto.rst. The 2ms range used here is
somewhat arbitrary, as long as the reset is asserted for at least 10ms
we should be ok.

Signed-off-by: Paul Barker <pbarker@konsulko.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
---
 drivers/net/dsa/microchip/ksz_common.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/net/dsa/microchip/ksz_common.c b/drivers/net/dsa/microchip/ksz_common.c
index 8d53b12d40a8..a31738662d95 100644
--- a/drivers/net/dsa/microchip/ksz_common.c
+++ b/drivers/net/dsa/microchip/ksz_common.c
@@ -400,8 +400,9 @@ int ksz_switch_register(struct ksz_device *dev,
 
 	if (dev->reset_gpio) {
 		gpiod_set_value_cansleep(dev->reset_gpio, 1);
-		mdelay(10);
+		usleep_range(10000, 12000);
 		gpiod_set_value_cansleep(dev->reset_gpio, 0);
+		usleep_range(100, 1000);
 	}
 
 	mutex_init(&dev->dev_mutex);
-- 
2.28.0


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

* Re: [PATCH v3 0/4] ksz9477 dsa switch driver improvements
  2020-09-09 10:04 [PATCH v3 0/4] ksz9477 dsa switch driver improvements Paul Barker
                   ` (3 preceding siblings ...)
  2020-09-09 10:04 ` [PATCH v3 4/4] net: dsa: microchip: Implement recommended reset timing Paul Barker
@ 2020-09-09 18:26 ` David Miller
  2020-09-10  9:27   ` Paul Barker
  4 siblings, 1 reply; 7+ messages in thread
From: David Miller @ 2020-09-09 18:26 UTC (permalink / raw)
  To: pbarker
  Cc: woojung.huh, UNGLinuxDriver, andrew, vivien.didelot, f.fainelli,
	netdev

From: Paul Barker <pbarker@konsulko.com>
Date: Wed,  9 Sep 2020 11:04:13 +0100

> These changes were made while debugging the ksz9477 driver for use on a
> custom board which uses the ksz9893 switch supported by this driver. The
> patches have been runtime tested on top of Linux 5.8.4, I couldn't
> runtime test them on top of 5.9-rc3 due to unrelated issues. They have
> been build tested on top of net-next.
 ...

Series applied to net-next, thank you.


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

* Re: [PATCH v3 0/4] ksz9477 dsa switch driver improvements
  2020-09-09 18:26 ` [PATCH v3 0/4] ksz9477 dsa switch driver improvements David Miller
@ 2020-09-10  9:27   ` Paul Barker
  0 siblings, 0 replies; 7+ messages in thread
From: Paul Barker @ 2020-09-10  9:27 UTC (permalink / raw)
  To: David Miller
  Cc: Woojung Huh, Microchip Linux Driver Support, Andrew Lunn,
	Vivien Didelot, Florian Fainelli, netdev

On Wed, 9 Sep 2020 at 19:26, David Miller <davem@davemloft.net> wrote:
>
> From: Paul Barker <pbarker@konsulko.com>
> Date: Wed,  9 Sep 2020 11:04:13 +0100
>
> > These changes were made while debugging the ksz9477 driver for use on a
> > custom board which uses the ksz9893 switch supported by this driver. The
> > patches have been runtime tested on top of Linux 5.8.4, I couldn't
> > runtime test them on top of 5.9-rc3 due to unrelated issues. They have
> > been build tested on top of net-next.
>  ...
>
> Series applied to net-next, thank you.
>

Thanks David, and thanks Andrew and Florian for the reviews.

-- 
Paul Barker
Konsulko Group

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

end of thread, other threads:[~2020-09-10  9:28 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-09-09 10:04 [PATCH v3 0/4] ksz9477 dsa switch driver improvements Paul Barker
2020-09-09 10:04 ` [PATCH v3 1/4] net: dsa: microchip: Make switch detection more informative Paul Barker
2020-09-09 10:04 ` [PATCH v3 2/4] net: dsa: microchip: Improve phy mode message Paul Barker
2020-09-09 10:04 ` [PATCH v3 3/4] net: dsa: microchip: Disable RGMII in-band status on KSZ9893 Paul Barker
2020-09-09 10:04 ` [PATCH v3 4/4] net: dsa: microchip: Implement recommended reset timing Paul Barker
2020-09-09 18:26 ` [PATCH v3 0/4] ksz9477 dsa switch driver improvements David Miller
2020-09-10  9:27   ` Paul Barker

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).