mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 22:44:27 -05:00 
			
		
		
		
	Add Nokia GPON ONT SFP fix for tx_fault in net-next. Signed-off-by: Scott Roberts <ttocsr@gmail.com>
		
			
				
	
	
		
			56 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From 4d6bfb6fbb00af38402db4d1ce464e22def9fd9e Mon Sep 17 00:00:00 2001
 | 
						|
From: Russell King <rmk+kernel@armlinux.org.uk>
 | 
						|
Date: Thu, 28 Nov 2019 14:24:40 +0000
 | 
						|
Subject: [PATCH 1/4] net: sfp: use a definition for the fault recovery
 | 
						|
 attempts
 | 
						|
 | 
						|
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
 | 
						|
---
 | 
						|
 drivers/net/phy/sfp.c | 14 +++++++++++---
 | 
						|
 1 file changed, 11 insertions(+), 3 deletions(-)
 | 
						|
 | 
						|
--- a/drivers/net/phy/sfp.c
 | 
						|
+++ b/drivers/net/phy/sfp.c
 | 
						|
@@ -170,6 +170,14 @@ static const enum gpiod_flags gpio_flags
 | 
						|
 #define T_RESET_US		10
 | 
						|
 #define T_FAULT_RECOVER		msecs_to_jiffies(1000)
 | 
						|
 
 | 
						|
+/* N_FAULT_INIT is the number of recovery attempts at module initialisation
 | 
						|
+ * time. If the TX_FAULT signal is not deasserted after this number of
 | 
						|
+ * attempts at clearing it, we decide that the module is faulty.
 | 
						|
+ * N_FAULT is the same but after the module has initialised.
 | 
						|
+ */
 | 
						|
+#define N_FAULT_INIT		5
 | 
						|
+#define N_FAULT			5
 | 
						|
+
 | 
						|
 /* SFP module presence detection is poor: the three MOD DEF signals are
 | 
						|
  * the same length on the PCB, which means it's possible for MOD DEF 0 to
 | 
						|
  * connect before the I2C bus on MOD DEF 1/2.
 | 
						|
@@ -1820,7 +1828,7 @@ static void sfp_sm_main(struct sfp *sfp,
 | 
						|
 		sfp_module_tx_enable(sfp);
 | 
						|
 
 | 
						|
 		/* Initialise the fault clearance retries */
 | 
						|
-		sfp->sm_retries = 5;
 | 
						|
+		sfp->sm_retries = N_FAULT_INIT;
 | 
						|
 
 | 
						|
 		/* We need to check the TX_FAULT state, which is not defined
 | 
						|
 		 * while TX_DISABLE is asserted. The earliest we want to do
 | 
						|
@@ -1860,7 +1868,7 @@ static void sfp_sm_main(struct sfp *sfp,
 | 
						|
 			 * or t_start_up, so assume there is a fault.
 | 
						|
 			 */
 | 
						|
 			sfp_sm_fault(sfp, SFP_S_INIT_TX_FAULT,
 | 
						|
-				     sfp->sm_retries == 5);
 | 
						|
+				     sfp->sm_retries == N_FAULT_INIT);
 | 
						|
 		} else if (event == SFP_E_TIMEOUT || event == SFP_E_TX_CLEAR) {
 | 
						|
 	init_done:	/* TX_FAULT deasserted or we timed out with TX_FAULT
 | 
						|
 			 * clear.  Probe for the PHY and check the LOS state.
 | 
						|
@@ -1873,7 +1881,7 @@ static void sfp_sm_main(struct sfp *sfp,
 | 
						|
 			sfp_sm_link_check_los(sfp);
 | 
						|
 
 | 
						|
 			/* Reset the fault retry count */
 | 
						|
-			sfp->sm_retries = 5;
 | 
						|
+			sfp->sm_retries = N_FAULT;
 | 
						|
 		}
 | 
						|
 		break;
 | 
						|
 
 |