netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] net: sfp: workaround GPIO input signals bounce
@ 2022-09-14  5:36 Baruch Siach
  2022-09-20 15:19 ` Jakub Kicinski
  0 siblings, 1 reply; 4+ messages in thread
From: Baruch Siach @ 2022-09-14  5:36 UTC (permalink / raw)
  To: Russell King; +Cc: netdev, Andrew Lunn, Baruch Siach

From: Baruch Siach <baruch.siach@siklu.com>

Add a trivial debounce to avoid miss of state changes when there is no
proper hardware debounce on the input signals. Otherwise a GPIO might
randomly indicate high level when the signal is actually going down,
and vice versa.

This fixes observed miss of link up event when LOS signal goes down on
Armada 8040 based system with an optical SFP module.

Signed-off-by: Baruch Siach <baruch.siach@siklu.com>
---
v2:
  Skip delay in the polling case (RMK)
---
 drivers/net/phy/sfp.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/net/phy/sfp.c b/drivers/net/phy/sfp.c
index 63f90fe9a4d2..b0ba144c9633 100644
--- a/drivers/net/phy/sfp.c
+++ b/drivers/net/phy/sfp.c
@@ -313,7 +313,9 @@ static unsigned long poll_jiffies;
 static unsigned int sfp_gpio_get_state(struct sfp *sfp)
 {
 	unsigned int i, state, v;
+	int repeat = 10;
 
+again:
 	for (i = state = 0; i < GPIO_MAX; i++) {
 		if (gpio_flags[i] != GPIOD_IN || !sfp->gpio[i])
 			continue;
@@ -323,6 +325,16 @@ static unsigned int sfp_gpio_get_state(struct sfp *sfp)
 			state |= BIT(i);
 	}
 
+	/* Trivial debounce for the interrupt case. When no state change is
+	 * detected, wait for up to a limited bound time interval for the
+	 * signal state to settle.
+	 */
+	if (state == sfp->state && !sfp->need_poll && repeat > 0) {
+		udelay(10);
+		repeat--;
+		goto again;
+	}
+
 	return state;
 }
 
-- 
2.35.1


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

end of thread, other threads:[~2022-09-21  5:31 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-09-14  5:36 [PATCH v2] net: sfp: workaround GPIO input signals bounce Baruch Siach
2022-09-20 15:19 ` Jakub Kicinski
2022-09-20 17:21   ` Russell King (Oracle)
2022-09-21  4:57     ` Baruch Siach

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