From ae20c0735c1accac4b18e6af8875752e6b5c006f Mon Sep 17 00:00:00 2001 From: Deepak Kumar Jain Date: Tue, 13 Sep 2016 11:41:55 +0100 Subject: [PATCH] crypto/qat: add C62x device Signed-off-by: Deepak Kumar Jain Acked-by: Fiona Trahe --- doc/guides/cryptodevs/qat.rst | 86 ++++++++++++++++++++++++-- doc/guides/rel_notes/release_16_11.rst | 1 + drivers/crypto/qat/rte_qat_cryptodev.c | 3 + 3 files changed, 85 insertions(+), 5 deletions(-) diff --git a/doc/guides/cryptodevs/qat.rst b/doc/guides/cryptodevs/qat.rst index 6957d5b660..aef76875ad 100644 --- a/doc/guides/cryptodevs/qat.rst +++ b/doc/guides/cryptodevs/qat.rst @@ -27,11 +27,12 @@ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -Quick Assist Crypto Poll Mode Driver -==================================== +Intel(R) QuickAssist (QAT) Crypto Poll Mode Driver +================================================== The QAT PMD provides poll mode crypto driver support for **Intel QuickAssist -Technology DH895xxC** hardware accelerator. +Technology DH895xxC** and **Intel QuickAssist Technology C62x** +hardware accelerator. Features @@ -100,10 +101,15 @@ If you are running on kernel 4.4 or greater, see instructions for `Installation using kernel.org driver`_ below. If you are on a kernel earlier than 4.4, see `Installation using 01.org QAT driver`_. +For **Intel QuickAssist Technology C62x** device, kernel 4.5 or greater is +needed. See instructions for `Installation using kernel.org driver`_ below. + Installation using 01.org QAT driver ------------------------------------ +NOTE: There is no driver available for **Intel QuickAssist Technology C62x** on 01.org. + Download the latest QuickAssist Technology Driver from `01.org `_ Consult the *Getting Started Guide* at the same URL for further information. @@ -180,6 +186,7 @@ If the build or install fails due to mismatching kernel sources you may need to Installation using kernel.org driver ------------------------------------ +For **Intel QuickAssist Technology DH895xxC**: Assuming you are running on at least a 4.4 kernel, you can use the stock kernel.org QAT driver to start the QAT hardware. @@ -199,9 +206,9 @@ You should see the following output:: qat_dh895xcc 5626 0 intel_qat 82336 1 qat_dh895xcc -Next, you need to expose the VFs using the sysfs file system. +Next, you need to expose the Virtual Functions (VFs) using the sysfs file system. -First find the bdf of the DH895xCC device:: +First find the bdf of the physical function (PF) of the DH895xCC device:: lspci -d : 435 @@ -239,10 +246,54 @@ cd to your linux source root directory and start the qat kernel modules: ``IOMMU should be enabled for SR-IOV to work correctly`` +For **Intel QuickAssist Technology C62x**: +Assuming you are running on at least a 4.5 kernel, you can use the stock kernel.org QAT +driver to start the QAT hardware. + +The steps below assume you are: + +* Running DPDK on a platform with one ``C62x`` device. +* On a kernel at least version 4.5. + +In BIOS ensure that SRIOV is enabled and VT-d is disabled. + +Ensure the QAT driver is loaded on your system, by executing:: + + lsmod | grep qat + +You should see the following output:: + + qat_c62x 16384 0 + intel_qat 122880 1 qat_c62x + +Next, you need to expose the VFs using the sysfs file system. + +First find the bdf of the C62x device:: + + lspci -d:37c8 + +You should see output similar to:: + + 1a:00.0 Co-processor: Intel Corporation Device 37c8 + 3d:00.0 Co-processor: Intel Corporation Device 37c8 + 3f:00.0 Co-processor: Intel Corporation Device 37c8 + +For each c62x device there are 3 PFs. +Using the sysfs, for each PF, enable the 16 VFs:: + + echo 16 > /sys/bus/pci/drivers/c6xx/0000\:1a\:00.0/sriov_numvfs + +If you get an error, it's likely you're using a QAT kernel driver earlier than kernel 4.5. + +To verify that the VFs are available for use - use ``lspci -d:37c9`` to confirm +the bdf of the 48 VF devices are available per ``C62x`` device. + +To complete the installation - follow instructions in `Binding the available VFs to the DPDK UIO driver`_. Binding the available VFs to the DPDK UIO driver ------------------------------------------------ +For **Intel(R) QuickAssist Technology DH895xcc** device: The unbind command below assumes ``bdfs`` of ``03:01.00-03:04.07``, if yours are different adjust the unbind command below:: cd $RTE_SDK @@ -259,3 +310,28 @@ The unbind command below assumes ``bdfs`` of ``03:01.00-03:04.07``, if yours are echo "8086 0443" > /sys/bus/pci/drivers/igb_uio/new_id You can use ``lspci -vvd:443`` to confirm that all devices are now in use by igb_uio kernel driver. + +For **Intel(R) QuickAssist Technology C62x** device: +The unbind command below assumes ``bdfs`` of ``1a:01.00-1a:02.07``, ``3d:01.00-3d:02.07`` and ``3f:01.00-3f:02.07``, +if yours are different adjust the unbind command below:: + + cd $RTE_SDK + modprobe uio + insmod ./build/kmod/igb_uio.ko + + for device in $(seq 1 2); do \ + for fn in $(seq 0 7); do \ + echo -n 0000:1a:0${device}.${fn} > \ + /sys/bus/pci/devices/0000\:1a\:0${device}.${fn}/driver/unbind; \ + + echo -n 0000:3d:0${device}.${fn} > \ + /sys/bus/pci/devices/0000\:3d\:0${device}.${fn}/driver/unbind; \ + + echo -n 0000:3f:0${device}.${fn} > \ + /sys/bus/pci/devices/0000\:3f\:0${device}.${fn}/driver/unbind; \ + done; \ + done + + echo "8086 37c9" > /sys/bus/pci/drivers/igb_uio/new_id + +You can use ``lspci -vvd:37c9`` to confirm that all devices are now in use by igb_uio kernel driver. diff --git a/doc/guides/rel_notes/release_16_11.rst b/doc/guides/rel_notes/release_16_11.rst index 88106f9e5c..27c0daec5f 100644 --- a/doc/guides/rel_notes/release_16_11.rst +++ b/doc/guides/rel_notes/release_16_11.rst @@ -73,6 +73,7 @@ New Features * SHA384-HMAC algorithm * KASUMI (F8 and F9) algorithm * NULL algorithm + * C62XX device Resolved Issues diff --git a/drivers/crypto/qat/rte_qat_cryptodev.c b/drivers/crypto/qat/rte_qat_cryptodev.c index 170ae78a1a..84ca1331cd 100644 --- a/drivers/crypto/qat/rte_qat_cryptodev.c +++ b/drivers/crypto/qat/rte_qat_cryptodev.c @@ -71,6 +71,9 @@ static struct rte_pci_id pci_id_qat_map[] = { { RTE_PCI_DEVICE(0x8086, 0x0443), }, + { + RTE_PCI_DEVICE(0x8086, 0x37c9), + }, {.device_id = 0}, }; -- 2.20.1