On Wed, Jun 23, 2021 at 1:36 AM Harman Kalra <hka...@marvell.com> wrote: > > Adding a new callback for reading the link status. PF can read it's > link status and can forward the same to VF once it comes up. > > Signed-off-by: Harman Kalra <hka...@marvell.com>
Series Acked-by: Jerin Jacob <jer...@marvell.com> Series applied to dpdk-next-net-mrvl/for-dpdk-main. Thanks. > --- > drivers/net/octeontx2/otx2_ethdev.c | 8 +++++++- > drivers/net/octeontx2/otx2_ethdev.h | 2 ++ > drivers/net/octeontx2/otx2_link.c | 23 +++++++++++++++++++++++ > 3 files changed, 32 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/octeontx2/otx2_ethdev.c > b/drivers/net/octeontx2/otx2_ethdev.c > index 0834de0cb1..471fa34da1 100644 > --- a/drivers/net/octeontx2/otx2_ethdev.c > +++ b/drivers/net/octeontx2/otx2_ethdev.c > @@ -42,7 +42,8 @@ nix_get_tx_offload_capa(struct otx2_eth_dev *dev) > > static const struct otx2_dev_ops otx2_dev_ops = { > .link_status_update = otx2_eth_dev_link_status_update, > - .ptp_info_update = otx2_eth_dev_ptp_info_update > + .ptp_info_update = otx2_eth_dev_ptp_info_update, > + .link_status_get = otx2_eth_dev_link_status_get > }; > > static int > @@ -2625,6 +2626,11 @@ otx2_eth_dev_uninit(struct rte_eth_dev *eth_dev, bool > mbox_close) > > nix_cgx_stop_link_event(dev); > > + /* Unregister the dev ops, this is required to stop VFs from > + * receiving link status updates on exit path. > + */ > + dev->ops = NULL; > + > /* Free up SQs */ > for (i = 0; i < eth_dev->data->nb_tx_queues; i++) { > otx2_nix_tx_queue_release(eth_dev->data->tx_queues[i]); > diff --git a/drivers/net/octeontx2/otx2_ethdev.h > b/drivers/net/octeontx2/otx2_ethdev.h > index ac50da7b18..08f9a2a7bc 100644 > --- a/drivers/net/octeontx2/otx2_ethdev.h > +++ b/drivers/net/octeontx2/otx2_ethdev.h > @@ -453,6 +453,8 @@ void otx2_nix_toggle_flag_link_cfg(struct otx2_eth_dev > *dev, bool set); > int otx2_nix_link_update(struct rte_eth_dev *eth_dev, int wait_to_complete); > void otx2_eth_dev_link_status_update(struct otx2_dev *dev, > struct cgx_link_user_info *link); > +void otx2_eth_dev_link_status_get(struct otx2_dev *dev, > + struct cgx_link_user_info *link); > int otx2_nix_dev_set_link_up(struct rte_eth_dev *eth_dev); > int otx2_nix_dev_set_link_down(struct rte_eth_dev *eth_dev); > int otx2_apply_link_speed(struct rte_eth_dev *eth_dev); > diff --git a/drivers/net/octeontx2/otx2_link.c > b/drivers/net/octeontx2/otx2_link.c > index a79b997376..5378e5c3b9 100644 > --- a/drivers/net/octeontx2/otx2_link.c > +++ b/drivers/net/octeontx2/otx2_link.c > @@ -47,6 +47,29 @@ nix_link_status_print(struct rte_eth_dev *eth_dev, struct > rte_eth_link *link) > otx2_info("Port %d: Link Down", > (int)(eth_dev->data->port_id)); > } > > +void > +otx2_eth_dev_link_status_get(struct otx2_dev *dev, > + struct cgx_link_user_info *link) > +{ > + struct otx2_eth_dev *otx2_dev = (struct otx2_eth_dev *)dev; > + struct rte_eth_link eth_link; > + struct rte_eth_dev *eth_dev; > + > + if (!link || !dev) > + return; > + > + eth_dev = otx2_dev->eth_dev; > + if (!eth_dev) > + return; > + > + rte_eth_linkstatus_get(eth_dev, ð_link); > + > + link->link_up = eth_link.link_status; > + link->speed = eth_link.link_speed; > + link->an = eth_link.link_autoneg; > + link->full_duplex = eth_link.link_duplex; > +} > + > void > otx2_eth_dev_link_status_update(struct otx2_dev *dev, > struct cgx_link_user_info *link) > -- > 2.18.0 >