* [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