octeon: add support for VF device 08/40408/3
authorMonendra Singh Kushwaha <kmonendra@marvell.com>
Fri, 23 Feb 2024 07:29:47 +0000 (12:59 +0530)
committerDamjan Marion <dmarion@0xa5.net>
Tue, 5 Mar 2024 18:50:36 +0000 (18:50 +0000)
This patch adds support for VF and loopback device.

Type: feature

Change-Id: I1ea92f3a1161851957206300ab921c27290b0305
Signed-off-by: Monendra Singh Kushwaha <kmonendra@marvell.com>
src/plugins/dev_octeon/init.c
src/plugins/dev_octeon/octeon.h
src/plugins/dev_octeon/port.c

index d3b6814..47be8a8 100644 (file)
@@ -51,6 +51,7 @@ static struct
   }
 
   _ (0xa063, RVU_PF, "Marvell Octeon Resource Virtualization Unit PF"),
+  _ (0xa0f8, RVU_VF, "Marvell Octeon Resource Virtualization Unit VF"),
   _ (0xa0f3, CPT_VF, "Marvell Octeon Cryptographic Accelerator Unit VF"),
 #undef _
 };
@@ -238,7 +239,7 @@ oct_init (vlib_main_t *vm, vnet_dev_t *dev)
   strncpy ((char *) cd->plt_pci_dev.name, dev->device_id,
           sizeof (cd->plt_pci_dev.name) - 1);
 
-  if (cd->type == OCT_DEVICE_TYPE_RVU_PF)
+  if (cd->type == OCT_DEVICE_TYPE_RVU_PF || cd->type == OCT_DEVICE_TYPE_RVU_VF)
     return oct_init_nix (vm, dev);
   else if (cd->type == OCT_DEVICE_TYPE_CPT_VF)
     return oct_init_cpt (vm, dev);
index 39501d0..fd8a92c 100644 (file)
@@ -19,6 +19,7 @@ typedef enum
 {
   OCT_DEVICE_TYPE_UNKNOWN = 0,
   OCT_DEVICE_TYPE_RVU_PF,
+  OCT_DEVICE_TYPE_RVU_VF,
   OCT_DEVICE_TYPE_CPT_VF,
 } __clib_packed oct_device_type_t;
 
index f1ae15a..00ad8b9 100644 (file)
@@ -10,8 +10,9 @@
 #include <dev_octeon/common.h>
 #include <vnet/ethernet/ethernet.h>
 
-#define OCT_FLOW_PREALLOC_SIZE 1
-#define OCT_FLOW_MAX_PRIORITY  7
+#define OCT_FLOW_PREALLOC_SIZE 1
+#define OCT_FLOW_MAX_PRIORITY  7
+#define OCT_ETH_LINK_SPEED_100G 100000 /**< 100 Gbps */
 
 VLIB_REGISTER_LOG_CLASS (oct_log, static) = {
   .class_name = "octeon",
@@ -171,9 +172,19 @@ oct_port_poll (vlib_main_t *vm, vnet_dev_port_t *port)
   vnet_dev_port_state_changes_t changes = {};
   int rrv;
 
-  rrv = roc_nix_mac_link_info_get (nix, &link_info);
-  if (rrv)
-    return;
+  if (roc_nix_is_lbk (nix))
+    {
+      link_info.status = 1;
+      link_info.full_duplex = 1;
+      link_info.autoneg = 0;
+      link_info.speed = OCT_ETH_LINK_SPEED_100G;
+    }
+  else
+    {
+      rrv = roc_nix_mac_link_info_get (nix, &link_info);
+      if (rrv)
+       return;
+    }
 
   if (cd->status != link_info.status)
     {