sfp: fix RX_LOS signal handling
The options word is a be16 quantity, so we need to test the flags having converted the endian-ness. Convert the flag bits to be16, which can be optimised by the compiler, rather than converting a variable at runtime. Reported-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a0da456bbf
commit
acf1c02f02
|
@ -355,7 +355,7 @@ static void sfp_sm_link_check_los(struct sfp *sfp)
|
||||||
* SFP_OPTIONS_LOS_NORMAL are set? For now, we assume
|
* SFP_OPTIONS_LOS_NORMAL are set? For now, we assume
|
||||||
* the same as SFP_OPTIONS_LOS_NORMAL set.
|
* the same as SFP_OPTIONS_LOS_NORMAL set.
|
||||||
*/
|
*/
|
||||||
if (sfp->id.ext.options & SFP_OPTIONS_LOS_INVERTED)
|
if (sfp->id.ext.options & cpu_to_be16(SFP_OPTIONS_LOS_INVERTED))
|
||||||
los ^= SFP_F_LOS;
|
los ^= SFP_F_LOS;
|
||||||
|
|
||||||
if (los)
|
if (los)
|
||||||
|
@ -582,7 +582,8 @@ static void sfp_sm_event(struct sfp *sfp, unsigned int event)
|
||||||
if (event == SFP_E_TX_FAULT)
|
if (event == SFP_E_TX_FAULT)
|
||||||
sfp_sm_fault(sfp, true);
|
sfp_sm_fault(sfp, true);
|
||||||
else if (event ==
|
else if (event ==
|
||||||
(sfp->id.ext.options & SFP_OPTIONS_LOS_INVERTED ?
|
(sfp->id.ext.options &
|
||||||
|
cpu_to_be16(SFP_OPTIONS_LOS_INVERTED) ?
|
||||||
SFP_E_LOS_HIGH : SFP_E_LOS_LOW))
|
SFP_E_LOS_HIGH : SFP_E_LOS_LOW))
|
||||||
sfp_sm_link_up(sfp);
|
sfp_sm_link_up(sfp);
|
||||||
break;
|
break;
|
||||||
|
@ -592,7 +593,8 @@ static void sfp_sm_event(struct sfp *sfp, unsigned int event)
|
||||||
sfp_sm_link_down(sfp);
|
sfp_sm_link_down(sfp);
|
||||||
sfp_sm_fault(sfp, true);
|
sfp_sm_fault(sfp, true);
|
||||||
} else if (event ==
|
} else if (event ==
|
||||||
(sfp->id.ext.options & SFP_OPTIONS_LOS_INVERTED ?
|
(sfp->id.ext.options &
|
||||||
|
cpu_to_be16(SFP_OPTIONS_LOS_INVERTED) ?
|
||||||
SFP_E_LOS_LOW : SFP_E_LOS_HIGH)) {
|
SFP_E_LOS_LOW : SFP_E_LOS_HIGH)) {
|
||||||
sfp_sm_link_down(sfp);
|
sfp_sm_link_down(sfp);
|
||||||
sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0);
|
sfp_sm_next(sfp, SFP_S_WAIT_LOS, 0);
|
||||||
|
|
Loading…
Reference in New Issue