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 { ...@@ -292,6 +292,7 @@ struct nicvf {
u8 node; u8 node;
u8 cpi_alg; u8 cpi_alg;
bool link_up; bool link_up;
u8 mac_type;
u8 duplex; u8 duplex;
u32 speed; u32 speed;
bool tns_mode; bool tns_mode;
...@@ -446,6 +447,7 @@ struct bgx_stats_msg { ...@@ -446,6 +447,7 @@ struct bgx_stats_msg {
/* Physical interface link status */ /* Physical interface link status */
struct bgx_link_status { struct bgx_link_status {
u8 msg; u8 msg;
u8 mac_type;
u8 link_up; u8 link_up;
u8 duplex; u8 duplex;
u32 speed; u32 speed;
......
...@@ -1258,6 +1258,7 @@ static void nic_poll_for_link(struct work_struct *work) ...@@ -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.link_up = link.link_up;
mbx.link_status.duplex = link.duplex; mbx.link_status.duplex = link.duplex;
mbx.link_status.speed = link.speed; mbx.link_status.speed = link.speed;
mbx.link_status.mac_type = link.mac_type;
nic_send_msg_to_vf(nic, vf, &mbx); nic_send_msg_to_vf(nic, vf, &mbx);
} }
} }
......
...@@ -130,12 +130,42 @@ static int nicvf_get_settings(struct net_device *netdev, ...@@ -130,12 +130,42 @@ static int nicvf_get_settings(struct net_device *netdev,
return 0; return 0;
} }
if (nic->speed <= 1000) { switch (nic->speed) {
cmd->port = PORT_MII; case SPEED_1000:
cmd->port = PORT_MII | PORT_TP;
cmd->autoneg = AUTONEG_ENABLE; 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->port = PORT_FIBRE;
cmd->autoneg = AUTONEG_DISABLE; cmd->autoneg = AUTONEG_DISABLE;
cmd->supported |= SUPPORTED_FIBRE;
cmd->supported |= SUPPORTED_40000baseCR4_Full;
break;
} }
cmd->duplex = nic->duplex; cmd->duplex = nic->duplex;
ethtool_cmd_speed_set(cmd, nic->speed); ethtool_cmd_speed_set(cmd, nic->speed);
......
...@@ -221,6 +221,7 @@ static void nicvf_handle_mbx_intr(struct nicvf *nic) ...@@ -221,6 +221,7 @@ static void nicvf_handle_mbx_intr(struct nicvf *nic)
nic->link_up = mbx.link_status.link_up; nic->link_up = mbx.link_status.link_up;
nic->duplex = mbx.link_status.duplex; nic->duplex = mbx.link_status.duplex;
nic->speed = mbx.link_status.speed; nic->speed = mbx.link_status.speed;
nic->mac_type = mbx.link_status.mac_type;
if (nic->link_up) { if (nic->link_up) {
netdev_info(nic->netdev, "%s: Link is Up %d Mbps %s\n", netdev_info(nic->netdev, "%s: Link is Up %d Mbps %s\n",
nic->netdev->name, nic->speed, nic->netdev->name, nic->speed,
......
...@@ -161,6 +161,7 @@ void bgx_get_lmac_link_state(int node, int bgx_idx, int lmacid, void *status) ...@@ -161,6 +161,7 @@ void bgx_get_lmac_link_state(int node, int bgx_idx, int lmacid, void *status)
return; return;
lmac = &bgx->lmac[lmacid]; lmac = &bgx->lmac[lmacid];
link->mac_type = lmac->lmac_type;
link->link_up = lmac->link_up; link->link_up = lmac->link_up;
link->duplex = lmac->last_duplex; link->duplex = lmac->last_duplex;
link->speed = lmac->last_speed; 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