octeontx2-pf: Configure VF mtu via representor
authorGeetha sowjanya <gakula@marvell.com>
Thu, 7 Nov 2024 16:08:34 +0000 (21:38 +0530)
committerDavid S. Miller <davem@davemloft.net>
Wed, 13 Nov 2024 11:57:11 +0000 (11:57 +0000)
Adds support to manage the mtu configuration for VF through representor.
On update of representor mtu a mbox notification is send
to VF to update its mtu.

This feature is implemented based on the "Network Function Representors"
kernel documentation.
"
Setting an MTU on the representor should cause that same MTU
to be reported to the representee.
"

Signed-off-by: Sai Krishna <saikrishnag@marvell.com>
Signed-off-by: Geetha sowjanya <gakula@marvell.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/marvell/octeontx2/nic/otx2_pf.c
drivers/net/ethernet/marvell/octeontx2/nic/rep.c

index ea5183f..0d62f16 100644 (file)
@@ -854,6 +854,11 @@ static int otx2_mbox_up_handler_rep_event_up_notify(struct otx2_nic *pf,
 {
        struct net_device *netdev = pf->netdev;
 
+       if (info->event == RVU_EVENT_MTU_CHANGE) {
+               netdev->mtu = info->evt_data.mtu;
+               return 0;
+       }
+
        if (info->event == RVU_EVENT_PORT_STATE) {
                if (info->evt_data.port_state) {
                        pf->flags |= OTX2_FLAG_PORT_UP;
index eec3e0d..d4e7801 100644 (file)
@@ -79,6 +79,22 @@ int rvu_event_up_notify(struct otx2_nic *pf, struct rep_event *info)
        return 0;
 }
 
+static int rvu_rep_change_mtu(struct net_device *dev, int new_mtu)
+{
+       struct rep_dev *rep = netdev_priv(dev);
+       struct otx2_nic *priv = rep->mdev;
+       struct rep_event evt = {0};
+
+       netdev_info(dev, "Changing MTU from %d to %d\n",
+                   dev->mtu, new_mtu);
+       dev->mtu = new_mtu;
+
+       evt.evt_data.mtu = new_mtu;
+       evt.pcifunc = rep->pcifunc;
+       rvu_rep_notify_pfvf(priv, RVU_EVENT_MTU_CHANGE, &evt);
+       return 0;
+}
+
 static void rvu_rep_get_stats(struct work_struct *work)
 {
        struct delayed_work *del_work = to_delayed_work(work);
@@ -226,6 +242,7 @@ static const struct net_device_ops rvu_rep_netdev_ops = {
        .ndo_stop               = rvu_rep_stop,
        .ndo_start_xmit         = rvu_rep_xmit,
        .ndo_get_stats64        = rvu_rep_get_stats64,
+       .ndo_change_mtu         = rvu_rep_change_mtu,
 };
 
 static int rvu_rep_napi_init(struct otx2_nic *priv,