fix(core): QAT VF bind 20/39320/1
authorpmikus <peter.mikus@protonmail.ch>
Fri, 4 Aug 2023 06:48:29 +0000 (06:48 +0000)
committerpmikus <peter.mikus@protonmail.ch>
Fri, 4 Aug 2023 06:48:29 +0000 (06:48 +0000)
Signed-off-by: pmikus <peter.mikus@protonmail.ch>
Change-Id: Iafae1a1f538b928d3bb80bf9610a0bf7de646f8a

resources/libraries/python/QATUtil.py
resources/libraries/robot/shared/default.robot

index e709aad..34a8e3b 100644 (file)
@@ -22,7 +22,7 @@ class QATUtil:
     """Contains methods for setting up QATs."""
 
     @staticmethod
     """Contains methods for setting up QATs."""
 
     @staticmethod
-    def crypto_device_verify(node, crypto_type, numvfs, force_init=False):
+    def crypto_device_verify(node, crypto_type, numvfs, force_init=True):
         """Verify if Crypto QAT device virtual functions are initialized on all
         DUTs. If parameter force initialization is set to True, then try to
         initialize or remove VFs on QAT.
         """Verify if Crypto QAT device virtual functions are initialized on all
         DUTs. If parameter force initialization is set to True, then try to
         initialize or remove VFs on QAT.
@@ -41,16 +41,20 @@ class QATUtil:
                               to False.
         """
         pci_addr = Topology.get_cryptodev(node)
                               to False.
         """
         pci_addr = Topology.get_cryptodev(node)
-        sriov_numvfs = DUTSetup.get_sriov_numvfs(node, pci_addr)
-
-        if sriov_numvfs != numvfs:
-            if force_init:
-                # QAT is not initialized and we want to initialize with numvfs
-                QATUtil.crypto_device_init(node, crypto_type, numvfs)
-            else:
-                raise RuntimeError(
-                    f"QAT device failed to create VFs on {node[u'host']}"
-                )
+
+        if force_init:
+            # QAT is not initialized and we want to initialize with numvfs.
+            QATUtil.crypto_device_init(node, crypto_type, numvfs)
+        else:
+            raise RuntimeError(
+                f"QAT device failed to create VFs on {node[u'host']}"
+            )
+
+        # QAT VF devices must be re-bound to vfio-pci driver before use.
+        pci_addr = Topology.get_cryptodev(node)
+        for i in range(numvfs):
+            DUTSetup.pci_vf_driver_unbind(node, pci_addr, i)
+            DUTSetup.pci_vf_driver_bind(node, pci_addr, i, "vfio-pci")
 
     @staticmethod
     def crypto_device_init(node, crypto_type, numvfs):
 
     @staticmethod
     def crypto_device_init(node, crypto_type, numvfs):
index 755bc1a..be68958 100644 (file)
 | |
 | | ... | \| Configure crypto device on all DUTs \| HW_DH895xcc \| ${32} \|
 | |
 | |
 | | ... | \| Configure crypto device on all DUTs \| HW_DH895xcc \| ${32} \|
 | |
-| | [Arguments] | ${crypto_type} | ${numvfs} | ${force_init}=${False}
+| | [Arguments] | ${crypto_type} | ${numvfs} | ${force_init}=${True}
 | |
 | | FOR | ${dut} | IN | @{duts}
 | | | Crypto Device Verify | ${nodes['${dut}']} | ${crypto_type}
 | |
 | | FOR | ${dut} | IN | @{duts}
 | | | Crypto Device Verify | ${nodes['${dut}']} | ${crypto_type}