1
0
Fork 0

net: thunderx: Add ethtool support for supported ports and link modes.

Signed-off-by: Thanneeru Srinivasulu <tsrinivasulu@cavium.com>
Signed-off-by: Sunil Goutham <sgoutham@cavium.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
hifive-unleashed-5.1
Thanneeru Srinivasulu 2016-11-24 14:48:01 +05:30 committed by David S. Miller
parent 5271156b1a
commit 1cc702591b
5 changed files with 38 additions and 3 deletions

View File

@ -292,6 +292,7 @@ struct nicvf {
u8 node;
u8 cpi_alg;
bool link_up;
u8 mac_type;
u8 duplex;
u32 speed;
bool tns_mode;
@ -446,6 +447,7 @@ struct bgx_stats_msg {
/* Physical interface link status */
struct bgx_link_status {
u8 msg;
u8 mac_type;
u8 link_up;
u8 duplex;
u32 speed;

View File

@ -1258,6 +1258,7 @@ static void nic_poll_for_link(struct work_struct *work)
mbx.link_status.link_up = link.link_up;
mbx.link_status.duplex = link.duplex;
mbx.link_status.speed = link.speed;
mbx.link_status.mac_type = link.mac_type;
nic_send_msg_to_vf(nic, vf, &mbx);
}
}

View File

@ -130,12 +130,42 @@ static int nicvf_get_settings(struct net_device *netdev,
return 0;
}
if (nic->speed <= 1000) {
cmd->port = PORT_MII;
switch (nic->speed) {
case SPEED_1000:
cmd->port = PORT_MII | PORT_TP;
cmd->autoneg = AUTONEG_ENABLE;
} else {
cmd->supported |= SUPPORTED_MII | SUPPORTED_TP;
cmd->supported |= SUPPORTED_1000baseT_Full |
SUPPORTED_1000baseT_Half |
SUPPORTED_100baseT_Full |
SUPPORTED_100baseT_Half |
SUPPORTED_10baseT_Full |
SUPPORTED_10baseT_Half;
cmd->supported |= SUPPORTED_Autoneg;
cmd->advertising |= ADVERTISED_1000baseT_Full |
ADVERTISED_1000baseT_Half |
ADVERTISED_100baseT_Full |
ADVERTISED_100baseT_Half |
ADVERTISED_10baseT_Full |
ADVERTISED_10baseT_Half;
break;
case SPEED_10000:
if (nic->mac_type == BGX_MODE_RXAUI) {
cmd->port = PORT_TP;
cmd->supported |= SUPPORTED_TP;
} else {
cmd->port = PORT_FIBRE;
cmd->supported |= SUPPORTED_FIBRE;
}
cmd->autoneg = AUTONEG_DISABLE;
cmd->supported |= SUPPORTED_10000baseT_Full;
break;
case SPEED_40000:
cmd->port = PORT_FIBRE;
cmd->autoneg = AUTONEG_DISABLE;
cmd->supported |= SUPPORTED_FIBRE;
cmd->supported |= SUPPORTED_40000baseCR4_Full;
break;
}
cmd->duplex = nic->duplex;
ethtool_cmd_speed_set(cmd, nic->speed);

View File

@ -221,6 +221,7 @@ static void nicvf_handle_mbx_intr(struct nicvf *nic)
nic->link_up = mbx.link_status.link_up;
nic->duplex = mbx.link_status.duplex;
nic->speed = mbx.link_status.speed;
nic->mac_type = mbx.link_status.mac_type;
if (nic->link_up) {
netdev_info(nic->netdev, "%s: Link is Up %d Mbps %s\n",
nic->netdev->name, nic->speed,

View File

@ -161,6 +161,7 @@ void bgx_get_lmac_link_state(int node, int bgx_idx, int lmacid, void *status)
return;
lmac = &bgx->lmac[lmacid];
link->mac_type = lmac->lmac_type;
link->link_up = lmac->link_up;
link->duplex = lmac->last_duplex;
link->speed = lmac->last_speed;