@@ -1410,37 +1410,39 @@ static void sfp_sm_phy_detach(struct sfp *sfp)
1410
1410
sfp -> mod_phy = NULL ;
1411
1411
}
1412
1412
1413
- static void sfp_sm_probe_phy (struct sfp * sfp , bool is_c45 )
1413
+ static int sfp_sm_probe_phy (struct sfp * sfp , bool is_c45 )
1414
1414
{
1415
1415
struct phy_device * phy ;
1416
1416
int err ;
1417
1417
1418
1418
phy = get_phy_device (sfp -> i2c_mii , SFP_PHY_ADDR , is_c45 );
1419
1419
if (phy == ERR_PTR (- ENODEV )) {
1420
1420
dev_info (sfp -> dev , "no PHY detected\n" );
1421
- return ;
1421
+ return 0 ;
1422
1422
}
1423
1423
if (IS_ERR (phy )) {
1424
1424
dev_err (sfp -> dev , "mdiobus scan returned %ld\n" , PTR_ERR (phy ));
1425
- return ;
1425
+ return PTR_ERR ( phy ) ;
1426
1426
}
1427
1427
1428
1428
err = phy_device_register (phy );
1429
1429
if (err ) {
1430
1430
phy_device_free (phy );
1431
1431
dev_err (sfp -> dev , "phy_device_register failed: %d\n" , err );
1432
- return ;
1432
+ return err ;
1433
1433
}
1434
1434
1435
1435
err = sfp_add_phy (sfp -> sfp_bus , phy );
1436
1436
if (err ) {
1437
1437
phy_device_remove (phy );
1438
1438
phy_device_free (phy );
1439
1439
dev_err (sfp -> dev , "sfp_add_phy failed: %d\n" , err );
1440
- return ;
1440
+ return err ;
1441
1441
}
1442
1442
1443
1443
sfp -> mod_phy = phy ;
1444
+
1445
+ return 0 ;
1444
1446
}
1445
1447
1446
1448
static void sfp_sm_link_up (struct sfp * sfp )
@@ -1513,21 +1515,24 @@ static void sfp_sm_fault(struct sfp *sfp, unsigned int next_state, bool warn)
1513
1515
* Clause 45 copper SFP+ modules (10G) appear to switch their interface
1514
1516
* mode according to the negotiated line speed.
1515
1517
*/
1516
- static void sfp_sm_probe_for_phy (struct sfp * sfp )
1518
+ static int sfp_sm_probe_for_phy (struct sfp * sfp )
1517
1519
{
1520
+ int err = 0 ;
1521
+
1518
1522
switch (sfp -> id .base .extended_cc ) {
1519
1523
case SFF8024_ECC_10GBASE_T_SFI :
1520
1524
case SFF8024_ECC_10GBASE_T_SR :
1521
1525
case SFF8024_ECC_5GBASE_T :
1522
1526
case SFF8024_ECC_2_5GBASE_T :
1523
- sfp_sm_probe_phy (sfp , true);
1527
+ err = sfp_sm_probe_phy (sfp , true);
1524
1528
break ;
1525
1529
1526
1530
default :
1527
1531
if (sfp -> id .base .e1000_base_t )
1528
- sfp_sm_probe_phy (sfp , false);
1532
+ err = sfp_sm_probe_phy (sfp , false);
1529
1533
break ;
1530
1534
}
1535
+ return err ;
1531
1536
}
1532
1537
1533
1538
static int sfp_module_parse_power (struct sfp * sfp )
@@ -1938,7 +1943,10 @@ static void sfp_sm_main(struct sfp *sfp, unsigned int event)
1938
1943
init_done : /* TX_FAULT deasserted or we timed out with TX_FAULT
1939
1944
* clear. Probe for the PHY and check the LOS state.
1940
1945
*/
1941
- sfp_sm_probe_for_phy (sfp );
1946
+ if (sfp_sm_probe_for_phy (sfp )) {
1947
+ sfp_sm_next (sfp , SFP_S_FAIL , 0 );
1948
+ break ;
1949
+ }
1942
1950
if (sfp_module_start (sfp -> sfp_bus )) {
1943
1951
sfp_sm_next (sfp , SFP_S_FAIL , 0 );
1944
1952
break ;
0 commit comments