diff options
Diffstat (limited to 'drivers/infiniband/hw/nes/nes_nic.c')
-rw-r--r-- | drivers/infiniband/hw/nes/nes_nic.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c index b7c813f4be43..9f4cadf9f851 100644 --- a/drivers/infiniband/hw/nes/nes_nic.c +++ b/drivers/infiniband/hw/nes/nes_nic.c | |||
@@ -1461,11 +1461,14 @@ static int nes_netdev_get_settings(struct net_device *netdev, struct ethtool_cmd | |||
1461 | et_cmd->transceiver = XCVR_INTERNAL; | 1461 | et_cmd->transceiver = XCVR_INTERNAL; |
1462 | et_cmd->phy_address = mac_index; | 1462 | et_cmd->phy_address = mac_index; |
1463 | } else { | 1463 | } else { |
1464 | unsigned long flags; | ||
1464 | et_cmd->supported = SUPPORTED_1000baseT_Full | 1465 | et_cmd->supported = SUPPORTED_1000baseT_Full |
1465 | | SUPPORTED_Autoneg; | 1466 | | SUPPORTED_Autoneg; |
1466 | et_cmd->advertising = ADVERTISED_1000baseT_Full | 1467 | et_cmd->advertising = ADVERTISED_1000baseT_Full |
1467 | | ADVERTISED_Autoneg; | 1468 | | ADVERTISED_Autoneg; |
1469 | spin_lock_irqsave(&nesadapter->phy_lock, flags); | ||
1468 | nes_read_1G_phy_reg(nesdev, 0, phy_index, &phy_data); | 1470 | nes_read_1G_phy_reg(nesdev, 0, phy_index, &phy_data); |
1471 | spin_unlock_irqrestore(&nesadapter->phy_lock, flags); | ||
1469 | if (phy_data & 0x1000) | 1472 | if (phy_data & 0x1000) |
1470 | et_cmd->autoneg = AUTONEG_ENABLE; | 1473 | et_cmd->autoneg = AUTONEG_ENABLE; |
1471 | else | 1474 | else |
@@ -1503,12 +1506,15 @@ static int nes_netdev_set_settings(struct net_device *netdev, struct ethtool_cmd | |||
1503 | struct nes_vnic *nesvnic = netdev_priv(netdev); | 1506 | struct nes_vnic *nesvnic = netdev_priv(netdev); |
1504 | struct nes_device *nesdev = nesvnic->nesdev; | 1507 | struct nes_device *nesdev = nesvnic->nesdev; |
1505 | struct nes_adapter *nesadapter = nesdev->nesadapter; | 1508 | struct nes_adapter *nesadapter = nesdev->nesadapter; |
1506 | u16 phy_data; | ||
1507 | 1509 | ||
1508 | if ((nesadapter->OneG_Mode) && | 1510 | if ((nesadapter->OneG_Mode) && |
1509 | (nesadapter->phy_type[nesdev->mac_index] != NES_PHY_TYPE_PUMA_1G)) { | 1511 | (nesadapter->phy_type[nesdev->mac_index] != NES_PHY_TYPE_PUMA_1G)) { |
1510 | nes_read_1G_phy_reg(nesdev, 0, nesadapter->phy_index[nesdev->mac_index], | 1512 | unsigned long flags; |
1511 | &phy_data); | 1513 | u16 phy_data; |
1514 | u8 phy_index = nesadapter->phy_index[nesdev->mac_index]; | ||
1515 | |||
1516 | spin_lock_irqsave(&nesadapter->phy_lock, flags); | ||
1517 | nes_read_1G_phy_reg(nesdev, 0, phy_index, &phy_data); | ||
1512 | if (et_cmd->autoneg) { | 1518 | if (et_cmd->autoneg) { |
1513 | /* Turn on Full duplex, Autoneg, and restart autonegotiation */ | 1519 | /* Turn on Full duplex, Autoneg, and restart autonegotiation */ |
1514 | phy_data |= 0x1300; | 1520 | phy_data |= 0x1300; |
@@ -1516,8 +1522,8 @@ static int nes_netdev_set_settings(struct net_device *netdev, struct ethtool_cmd | |||
1516 | /* Turn off autoneg */ | 1522 | /* Turn off autoneg */ |
1517 | phy_data &= ~0x1000; | 1523 | phy_data &= ~0x1000; |
1518 | } | 1524 | } |
1519 | nes_write_1G_phy_reg(nesdev, 0, nesadapter->phy_index[nesdev->mac_index], | 1525 | nes_write_1G_phy_reg(nesdev, 0, phy_index, phy_data); |
1520 | phy_data); | 1526 | spin_unlock_irqrestore(&nesadapter->phy_lock, flags); |
1521 | } | 1527 | } |
1522 | 1528 | ||
1523 | return 0; | 1529 | return 0; |