diff options
Diffstat (limited to 'drivers/infiniband/hw/nes/nes_nic.c')
-rw-r--r-- | drivers/infiniband/hw/nes/nes_nic.c | 61 |
1 files changed, 9 insertions, 52 deletions
diff --git a/drivers/infiniband/hw/nes/nes_nic.c b/drivers/infiniband/hw/nes/nes_nic.c index 9384f5d3d33..a1d79b6856a 100644 --- a/drivers/infiniband/hw/nes/nes_nic.c +++ b/drivers/infiniband/hw/nes/nes_nic.c | |||
@@ -1243,8 +1243,8 @@ static void nes_netdev_get_ethtool_stats(struct net_device *netdev, | |||
1243 | target_stat_values[++index] = cm_packets_received; | 1243 | target_stat_values[++index] = cm_packets_received; |
1244 | target_stat_values[++index] = cm_packets_dropped; | 1244 | target_stat_values[++index] = cm_packets_dropped; |
1245 | target_stat_values[++index] = cm_packets_retrans; | 1245 | target_stat_values[++index] = cm_packets_retrans; |
1246 | target_stat_values[++index] = cm_listens_created; | 1246 | target_stat_values[++index] = atomic_read(&cm_listens_created); |
1247 | target_stat_values[++index] = cm_listens_destroyed; | 1247 | target_stat_values[++index] = atomic_read(&cm_listens_destroyed); |
1248 | target_stat_values[++index] = cm_backlog_drops; | 1248 | target_stat_values[++index] = cm_backlog_drops; |
1249 | target_stat_values[++index] = atomic_read(&cm_loopbacks); | 1249 | target_stat_values[++index] = atomic_read(&cm_loopbacks); |
1250 | target_stat_values[++index] = atomic_read(&cm_nodes_created); | 1250 | target_stat_values[++index] = atomic_read(&cm_nodes_created); |
@@ -1474,9 +1474,9 @@ static int nes_netdev_get_settings(struct net_device *netdev, struct ethtool_cmd | |||
1474 | } | 1474 | } |
1475 | return 0; | 1475 | return 0; |
1476 | } | 1476 | } |
1477 | if ((phy_type == NES_PHY_TYPE_IRIS) || | 1477 | if ((phy_type == NES_PHY_TYPE_ARGUS) || |
1478 | (phy_type == NES_PHY_TYPE_ARGUS) || | 1478 | (phy_type == NES_PHY_TYPE_SFP_D) || |
1479 | (phy_type == NES_PHY_TYPE_SFP_D)) { | 1479 | (phy_type == NES_PHY_TYPE_KR)) { |
1480 | et_cmd->transceiver = XCVR_EXTERNAL; | 1480 | et_cmd->transceiver = XCVR_EXTERNAL; |
1481 | et_cmd->port = PORT_FIBRE; | 1481 | et_cmd->port = PORT_FIBRE; |
1482 | et_cmd->supported = SUPPORTED_FIBRE; | 1482 | et_cmd->supported = SUPPORTED_FIBRE; |
@@ -1596,8 +1596,7 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev, | |||
1596 | struct net_device *netdev; | 1596 | struct net_device *netdev; |
1597 | struct nic_qp_map *curr_qp_map; | 1597 | struct nic_qp_map *curr_qp_map; |
1598 | u32 u32temp; | 1598 | u32 u32temp; |
1599 | u16 phy_data; | 1599 | u8 phy_type = nesdev->nesadapter->phy_type[nesdev->mac_index]; |
1600 | u16 temp_phy_data; | ||
1601 | 1600 | ||
1602 | netdev = alloc_etherdev(sizeof(struct nes_vnic)); | 1601 | netdev = alloc_etherdev(sizeof(struct nes_vnic)); |
1603 | if (!netdev) { | 1602 | if (!netdev) { |
@@ -1705,65 +1704,23 @@ struct net_device *nes_netdev_init(struct nes_device *nesdev, | |||
1705 | 1704 | ||
1706 | if ((nesdev->netdev_count == 0) && | 1705 | if ((nesdev->netdev_count == 0) && |
1707 | ((PCI_FUNC(nesdev->pcidev->devfn) == nesdev->mac_index) || | 1706 | ((PCI_FUNC(nesdev->pcidev->devfn) == nesdev->mac_index) || |
1708 | ((nesdev->nesadapter->phy_type[nesdev->mac_index] == NES_PHY_TYPE_PUMA_1G) && | 1707 | ((phy_type == NES_PHY_TYPE_PUMA_1G) && |
1709 | (((PCI_FUNC(nesdev->pcidev->devfn) == 1) && (nesdev->mac_index == 2)) || | 1708 | (((PCI_FUNC(nesdev->pcidev->devfn) == 1) && (nesdev->mac_index == 2)) || |
1710 | ((PCI_FUNC(nesdev->pcidev->devfn) == 2) && (nesdev->mac_index == 1)))))) { | 1709 | ((PCI_FUNC(nesdev->pcidev->devfn) == 2) && (nesdev->mac_index == 1)))))) { |
1711 | /* | ||
1712 | * nes_debug(NES_DBG_INIT, "Setting up PHY interrupt mask. Using register index 0x%04X\n", | ||
1713 | * NES_IDX_PHY_PCS_CONTROL_STATUS0 + (0x200 * (nesvnic->logical_port & 1))); | ||
1714 | */ | ||
1715 | u32temp = nes_read_indexed(nesdev, NES_IDX_PHY_PCS_CONTROL_STATUS0 + | 1710 | u32temp = nes_read_indexed(nesdev, NES_IDX_PHY_PCS_CONTROL_STATUS0 + |
1716 | (0x200 * (nesdev->mac_index & 1))); | 1711 | (0x200 * (nesdev->mac_index & 1))); |
1717 | if (nesdev->nesadapter->phy_type[nesdev->mac_index] != NES_PHY_TYPE_PUMA_1G) { | 1712 | if (phy_type != NES_PHY_TYPE_PUMA_1G) { |
1718 | u32temp |= 0x00200000; | 1713 | u32temp |= 0x00200000; |
1719 | nes_write_indexed(nesdev, NES_IDX_PHY_PCS_CONTROL_STATUS0 + | 1714 | nes_write_indexed(nesdev, NES_IDX_PHY_PCS_CONTROL_STATUS0 + |
1720 | (0x200 * (nesdev->mac_index & 1)), u32temp); | 1715 | (0x200 * (nesdev->mac_index & 1)), u32temp); |
1721 | } | 1716 | } |
1722 | 1717 | ||
1723 | u32temp = nes_read_indexed(nesdev, NES_IDX_PHY_PCS_CONTROL_STATUS0 + | ||
1724 | (0x200 * (nesdev->mac_index & 1))); | ||
1725 | |||
1726 | if ((u32temp&0x0f1f0000) == 0x0f0f0000) { | ||
1727 | if (nesdev->nesadapter->phy_type[nesdev->mac_index] == NES_PHY_TYPE_IRIS) { | ||
1728 | nes_init_phy(nesdev); | ||
1729 | nes_read_10G_phy_reg(nesdev, nesdev->nesadapter->phy_index[nesdev->mac_index], 1, 1); | ||
1730 | temp_phy_data = (u16)nes_read_indexed(nesdev, | ||
1731 | NES_IDX_MAC_MDIO_CONTROL); | ||
1732 | u32temp = 20; | ||
1733 | do { | ||
1734 | nes_read_10G_phy_reg(nesdev, nesdev->nesadapter->phy_index[nesdev->mac_index], 1, 1); | ||
1735 | phy_data = (u16)nes_read_indexed(nesdev, | ||
1736 | NES_IDX_MAC_MDIO_CONTROL); | ||
1737 | if ((phy_data == temp_phy_data) || (!(--u32temp))) | ||
1738 | break; | ||
1739 | temp_phy_data = phy_data; | ||
1740 | } while (1); | ||
1741 | if (phy_data & 4) { | ||
1742 | nes_debug(NES_DBG_INIT, "The Link is UP!!.\n"); | ||
1743 | nesvnic->linkup = 1; | ||
1744 | } else { | ||
1745 | nes_debug(NES_DBG_INIT, "The Link is DOWN!!.\n"); | ||
1746 | } | ||
1747 | } else { | ||
1748 | nes_debug(NES_DBG_INIT, "The Link is UP!!.\n"); | ||
1749 | nesvnic->linkup = 1; | ||
1750 | } | ||
1751 | } else if (nesdev->nesadapter->phy_type[nesdev->mac_index] == NES_PHY_TYPE_PUMA_1G) { | ||
1752 | nes_debug(NES_DBG_INIT, "mac_index=%d, logical_port=%d, u32temp=0x%04X, PCI_FUNC=%d\n", | ||
1753 | nesdev->mac_index, nesvnic->logical_port, u32temp, PCI_FUNC(nesdev->pcidev->devfn)); | ||
1754 | if (((nesdev->mac_index < 2) && ((u32temp&0x01010000) == 0x01010000)) || | ||
1755 | ((nesdev->mac_index > 1) && ((u32temp&0x02020000) == 0x02020000))) { | ||
1756 | nes_debug(NES_DBG_INIT, "The Link is UP!!.\n"); | ||
1757 | nesvnic->linkup = 1; | ||
1758 | } | ||
1759 | } | ||
1760 | /* clear the MAC interrupt status, assumes direct logical to physical mapping */ | 1718 | /* clear the MAC interrupt status, assumes direct logical to physical mapping */ |
1761 | u32temp = nes_read_indexed(nesdev, NES_IDX_MAC_INT_STATUS + (0x200 * nesdev->mac_index)); | 1719 | u32temp = nes_read_indexed(nesdev, NES_IDX_MAC_INT_STATUS + (0x200 * nesdev->mac_index)); |
1762 | nes_debug(NES_DBG_INIT, "Phy interrupt status = 0x%X.\n", u32temp); | 1720 | nes_debug(NES_DBG_INIT, "Phy interrupt status = 0x%X.\n", u32temp); |
1763 | nes_write_indexed(nesdev, NES_IDX_MAC_INT_STATUS + (0x200 * nesdev->mac_index), u32temp); | 1721 | nes_write_indexed(nesdev, NES_IDX_MAC_INT_STATUS + (0x200 * nesdev->mac_index), u32temp); |
1764 | 1722 | ||
1765 | if (nesdev->nesadapter->phy_type[nesdev->mac_index] != NES_PHY_TYPE_IRIS) | 1723 | nes_init_phy(nesdev); |
1766 | nes_init_phy(nesdev); | ||
1767 | 1724 | ||
1768 | } | 1725 | } |
1769 | 1726 | ||