Commit 1cc70259 authored by Thanneeru Srinivasulu's avatar Thanneeru Srinivasulu Committed by David S. Miller

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

Signed-off-by: default avatarThanneeru Srinivasulu <tsrinivasulu@cavium.com>
Signed-off-by: default avatarSunil Goutham <sgoutham@cavium.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 5271156b
......@@ -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;
......
......@@ -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);
}
}
......
......@@ -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);
......
......@@ -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,
......
......@@ -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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment