Commit 181f29da authored by Russell King's avatar Russell King Committed by David S. Miller

net: sfp: split the PHY probe from sfp_sm_mod_init()

Move the PHY probe into a separate function, splitting it from
sfp_sm_mod_init().  This will allow us to eliminate the 50ms mdelay()
inside the state machine.
Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8e210b6b
...@@ -1353,14 +1353,10 @@ static void sfp_sm_fault(struct sfp *sfp, bool warn) ...@@ -1353,14 +1353,10 @@ static void sfp_sm_fault(struct sfp *sfp, bool warn)
static void sfp_sm_mod_init(struct sfp *sfp) static void sfp_sm_mod_init(struct sfp *sfp)
{ {
sfp_module_tx_enable(sfp); sfp_module_tx_enable(sfp);
}
/* Wait t_init before indicating that the link is up, provided the static void sfp_sm_probe_for_phy(struct sfp *sfp)
* current state indicates no TX_FAULT. If TX_FAULT clears before {
* this time, that's fine too.
*/
sfp_sm_next(sfp, SFP_S_INIT, T_INIT_JIFFIES);
sfp->sm_retries = 5;
/* Setting the serdes link mode is guesswork: there's no /* Setting the serdes link mode is guesswork: there's no
* field in the EEPROM which indicates what mode should * field in the EEPROM which indicates what mode should
* be used. * be used.
...@@ -1645,8 +1641,17 @@ static void sfp_sm_main(struct sfp *sfp, unsigned int event) ...@@ -1645,8 +1641,17 @@ static void sfp_sm_main(struct sfp *sfp, unsigned int event)
switch (sfp->sm_state) { switch (sfp->sm_state) {
case SFP_S_DOWN: case SFP_S_DOWN:
if (sfp->sm_mod_state == SFP_MOD_PRESENT && if (sfp->sm_mod_state == SFP_MOD_PRESENT &&
sfp->sm_dev_state == SFP_DEV_UP) sfp->sm_dev_state == SFP_DEV_UP) {
sfp_sm_mod_init(sfp); sfp_sm_mod_init(sfp);
sfp_sm_probe_for_phy(sfp);
/* Wait t_init before indicating that the link is up,
* provided the current state indicates no TX_FAULT. If
* TX_FAULT clears before this time, that's fine too.
*/
sfp_sm_next(sfp, SFP_S_INIT, T_INIT_JIFFIES);
sfp->sm_retries = 5;
}
break; break;
case SFP_S_INIT: case SFP_S_INIT:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment