aboutsummaryrefslogtreecommitdiffstats
path: root/resources/libraries/python/QATUtil.py
diff options
context:
space:
mode:
authorpmikus <peter.mikus@protonmail.ch>2023-08-10 09:40:33 +0000
committerPeter Mikus <peter.mikus@protonmail.ch>2023-08-11 11:17:04 +0000
commit0202f7d927dbaf40235e0f6d573f69e66a6427b2 (patch)
tree631714dfd3f322e631f1dcc9402e38a3724e4a40 /resources/libraries/python/QATUtil.py
parent4f4177abee17e177978b4dd96c2c578aa8d57925 (diff)
feat(core): QAT initialization refactor
Signed-off-by: pmikus <peter.mikus@protonmail.ch> Change-Id: Idc91da55ab0b5c6b8eb53e8b4ce4da18a1ae891c
Diffstat (limited to 'resources/libraries/python/QATUtil.py')
-rw-r--r--resources/libraries/python/QATUtil.py103
1 files changed, 34 insertions, 69 deletions
diff --git a/resources/libraries/python/QATUtil.py b/resources/libraries/python/QATUtil.py
index 34a8e3b8d9..be8cc9561e 100644
--- a/resources/libraries/python/QATUtil.py
+++ b/resources/libraries/python/QATUtil.py
@@ -14,7 +14,7 @@
"""QAT util library."""
from resources.libraries.python.DUTSetup import DUTSetup
-from resources.libraries.python.topology import Topology
+from resources.libraries.python.topology import NodeType, Topology
from resources.libraries.python.VPPUtil import VPPUtil
@@ -22,88 +22,53 @@ class QATUtil:
"""Contains methods for setting up QATs."""
@staticmethod
- 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.
+ def crypto_device_verify_on_all_duts(nodes):
+ """Verify if Crypto QAT device and its virtual functions are initialized
+ on all DUTs.
- :param node: DUT node.
- :crypto_type: Crypto device type - HW_DH895xcc, HW_C3xxx, HW_C4xxx
- or HW_4xxx.
- :param numvfs: Number of VFs to initialize, 0 - disable the VFs.
- :param force_init: If True then try to initialize to specific value.
- :type node: dict
- :type crypto_type: string
- :type numvfs: int
- :type force_init: bool
- :returns: nothing
- :raises RuntimeError: If QAT VFs are not created and force init is set
- to False.
+ :param nodes: Nodes in the topology.
+ :type nodes: dict
"""
- pci_addr = Topology.get_cryptodev(node)
-
- 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']}"
- )
+ VPPUtil.stop_vpp_service_on_all_duts(nodes)
- # 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")
+ for node in nodes.values():
+ if node["type"] == NodeType.DUT:
+ cryptodevs = Topology.get_cryptodev(node)
+ if not cryptodevs:
+ return
+ for device in cryptodevs.values():
+ QATUtil.crypto_device_init(node, device)
@staticmethod
- def crypto_device_init(node, crypto_type, numvfs):
+ def crypto_device_init(node, device):
"""Init Crypto QAT device virtual functions on DUT.
:param node: DUT node.
- :crypto_type: Crypto device type - HW_DH895xcc, HW_C3xxx, HW_C4xxx
- or HW_4xxx.
- :param numvfs: Number of VFs to initialize, 0 - disable the VFs.
+ :device: Crypto device entry from topology file.
:type node: dict
- :type crypto_type: string
- :type numvfs: int
- :returns: nothing
- :raises RuntimeError: If failed to stop VPP or QAT failed to initialize.
+ :type device: dict
"""
- if crypto_type == u"HW_DH895xcc":
- kernel_mod = u"qat_dh895xcc"
- kernel_drv = u"dh895xcc"
- elif crypto_type == u"HW_C3xxx":
- kernel_mod = u"qat_c3xxx"
- kernel_drv = u"c3xxx"
- elif crypto_type == u"HW_C4xxx":
- kernel_mod = u"qat_c4xxx"
- kernel_drv = u"c4xxx"
- elif crypto_type == u"HW_4xxx":
- kernel_mod = u"qat_4xxx"
- kernel_drv = u"4xxx"
- else:
- raise RuntimeError(
- f"Unsupported crypto device type on {node[u'host']}"
- )
-
- pci_addr = Topology.get_cryptodev(node)
-
- # QAT device must be re-bound to kernel driver before initialization.
- DUTSetup.verify_kernel_module(node, kernel_mod, force_load=True)
-
- # Stop VPP to prevent deadlock.
- VPPUtil.stop_vpp_service(node)
+ DUTSetup.verify_kernel_module(node, device["module"], force_load=True)
current_driver = DUTSetup.get_pci_dev_driver(
- node, pci_addr.replace(u":", r"\:")
+ node, device["pci_address"].replace(":", r"\:")
)
if current_driver is not None:
- DUTSetup.pci_driver_unbind(node, pci_addr)
-
+ DUTSetup.pci_driver_unbind(node, device["pci_address"])
# Bind to kernel driver.
- DUTSetup.pci_driver_bind(node, pci_addr, kernel_drv)
+ DUTSetup.pci_driver_bind(node, device["pci_address"], device["driver"])
# Initialize QAT VFs.
- if numvfs > 0:
- DUTSetup.set_sriov_numvfs(node, pci_addr, numvfs) \ No newline at end of file
+ if int(device["numvfs"]) > 0:
+ DUTSetup.set_sriov_numvfs(
+ node, device["pci_address"], type="drivers/4xxx",
+ numvfs=device["numvfs"]
+ )
+
+ for cvf in range(int(device["numvfs"])):
+ DUTSetup.pci_vf_driver_unbind(
+ node, device["pci_address"], cvf
+ )
+ DUTSetup.pci_vf_driver_bind(
+ node, device["pci_address"], cvf, "vfio-pci"
+ )