Commit fc26e70f authored by Yinjun Zhang's avatar Yinjun Zhang Committed by Jakub Kicinski

nfp: add support for reporting active FEC mode

The latest management firmware can now report the active FEC
mode. Adapt driver accordingly so that user can get the active
FEC mode by running command:

  # ethtool --show-fec <intf>

Also correct use of `fec` field.
Signed-off-by: default avatarYinjun Zhang <yinjun.zhang@corigine.com>
Signed-off-by: default avatarSimon Horman <simon.horman@corigine.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent f77a9f3c
...@@ -996,7 +996,7 @@ nfp_port_get_fecparam(struct net_device *netdev, ...@@ -996,7 +996,7 @@ nfp_port_get_fecparam(struct net_device *netdev,
return 0; return 0;
param->fec = nfp_port_fec_nsp_to_ethtool(eth_port->fec_modes_supported); param->fec = nfp_port_fec_nsp_to_ethtool(eth_port->fec_modes_supported);
param->active_fec = nfp_port_fec_nsp_to_ethtool(eth_port->fec); param->active_fec = nfp_port_fec_nsp_to_ethtool(BIT(eth_port->act_fec));
return 0; return 0;
} }
......
...@@ -132,6 +132,7 @@ enum nfp_eth_fec { ...@@ -132,6 +132,7 @@ enum nfp_eth_fec {
* @ports.interface: interface (module) plugged in * @ports.interface: interface (module) plugged in
* @ports.media: media type of the @interface * @ports.media: media type of the @interface
* @ports.fec: forward error correction mode * @ports.fec: forward error correction mode
* @ports.act_fec: active forward error correction mode
* @ports.aneg: auto negotiation mode * @ports.aneg: auto negotiation mode
* @ports.mac_addr: interface MAC address * @ports.mac_addr: interface MAC address
* @ports.label_port: port id * @ports.label_port: port id
...@@ -162,6 +163,7 @@ struct nfp_eth_table { ...@@ -162,6 +163,7 @@ struct nfp_eth_table {
enum nfp_eth_media media; enum nfp_eth_media media;
enum nfp_eth_fec fec; enum nfp_eth_fec fec;
enum nfp_eth_fec act_fec;
enum nfp_eth_aneg aneg; enum nfp_eth_aneg aneg;
u8 mac_addr[ETH_ALEN]; u8 mac_addr[ETH_ALEN];
......
...@@ -40,6 +40,7 @@ ...@@ -40,6 +40,7 @@
#define NSP_ETH_STATE_OVRD_CHNG BIT_ULL(22) #define NSP_ETH_STATE_OVRD_CHNG BIT_ULL(22)
#define NSP_ETH_STATE_ANEG GENMASK_ULL(25, 23) #define NSP_ETH_STATE_ANEG GENMASK_ULL(25, 23)
#define NSP_ETH_STATE_FEC GENMASK_ULL(27, 26) #define NSP_ETH_STATE_FEC GENMASK_ULL(27, 26)
#define NSP_ETH_STATE_ACT_FEC GENMASK_ULL(29, 28)
#define NSP_ETH_CTRL_CONFIGURED BIT_ULL(0) #define NSP_ETH_CTRL_CONFIGURED BIT_ULL(0)
#define NSP_ETH_CTRL_ENABLED BIT_ULL(1) #define NSP_ETH_CTRL_ENABLED BIT_ULL(1)
...@@ -170,7 +171,13 @@ nfp_eth_port_translate(struct nfp_nsp *nsp, const union eth_table_entry *src, ...@@ -170,7 +171,13 @@ nfp_eth_port_translate(struct nfp_nsp *nsp, const union eth_table_entry *src,
if (dst->fec_modes_supported) if (dst->fec_modes_supported)
dst->fec_modes_supported |= NFP_FEC_AUTO | NFP_FEC_DISABLED; dst->fec_modes_supported |= NFP_FEC_AUTO | NFP_FEC_DISABLED;
dst->fec = 1 << FIELD_GET(NSP_ETH_STATE_FEC, state); dst->fec = FIELD_GET(NSP_ETH_STATE_FEC, state);
dst->act_fec = dst->fec;
if (nfp_nsp_get_abi_ver_minor(nsp) < 33)
return;
dst->act_fec = FIELD_GET(NSP_ETH_STATE_ACT_FEC, state);
} }
static void static void
......
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