crypto/caam_jr: introduce basic driver

The caam_jr poll mode crypto driver is supported for
NXP SEC 4.x+ (CAAM) hardware accelerator.
This driver is by default supported on LE platforms,
if it is used on BE platforms like LS104X,
config option CONFIG_RTE_LIBRTE_PMD_CAAM_JR_BE can be
enabled.

This patch add skeleton for caam jobring driver
with probe and uintialisation functions

Signed-off-by: Gagandeep Singh <g.singh@nxp.com>
Signed-off-by: Hemant Agrawal <hemant.agrawal@nxp.com>
Acked-by: Akhil Goyal <akhil.goyal@nxp.com>
This commit is contained in:
Gagandeep Singh 2018-10-12 20:10:42 +05:30 committed by Akhil Goyal
parent 0e9f8507af
commit af7c9b5e9c
11 changed files with 264 additions and 2 deletions

View File

@ -851,6 +851,11 @@ F: drivers/crypto/null/
F: doc/guides/cryptodevs/null.rst
F: doc/guides/cryptodevs/features/null.ini
NXP CAAM JR
M: Gagandeep Singh <g.singh@nxp.com>
M: Hemant Agrawal <hemant.agrawal@nxp.com>
F: drivers/crypto/caam_jr/
NXP DPAA_SEC
M: Akhil Goyal <akhil.goyal@nxp.com>
M: Hemant Agrawal <hemant.agrawal@nxp.com>

View File

@ -495,6 +495,12 @@ CONFIG_RTE_CRYPTO_MAX_DEVS=64
CONFIG_RTE_LIBRTE_PMD_ARMV8_CRYPTO=n
CONFIG_RTE_LIBRTE_PMD_ARMV8_CRYPTO_DEBUG=n
#
# Compile NXP CAAM JR crypto Driver
#
CONFIG_RTE_LIBRTE_PMD_CAAM_JR=n
CONFIG_RTE_LIBRTE_PMD_CAAM_JR_BE=n
#
# Compile NXP DPAA2 crypto sec driver for CAAM HW
#

View File

@ -40,6 +40,7 @@ CONFIG_RTE_LIBRTE_DPAA_MEMPOOL=y
CONFIG_RTE_LIBRTE_DPAA_PMD=y
CONFIG_RTE_LIBRTE_PMD_DPAA_EVENTDEV=y
CONFIG_RTE_LIBRTE_PMD_DPAA_SEC=y
CONFIG_RTE_LIBRTE_PMD_CAAM_JR=y
# NXP FSLMC BUS and DPAA2 drivers
CONFIG_RTE_LIBRTE_FSLMC_BUS=y

View File

@ -21,3 +21,6 @@ CONFIG_RTE_PKTMBUF_HEADROOM=128
# NXP DPAA Bus
CONFIG_RTE_LIBRTE_DPAA_DEBUG_DRIVER=n
CONFIG_RTE_LIBRTE_DPAA_HWDEBUG=n
# NXP CAAM_JR driver
CONFIG_RTE_LIBRTE_PMD_CAAM_JR_BE=y

View File

@ -6,6 +6,7 @@ include $(RTE_SDK)/mk/rte.vars.mk
DIRS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_GCM) += aesni_gcm
DIRS-$(CONFIG_RTE_LIBRTE_PMD_AESNI_MB) += aesni_mb
DIRS-$(CONFIG_RTE_LIBRTE_PMD_ARMV8_CRYPTO) += armv8
DIRS-$(CONFIG_RTE_LIBRTE_PMD_CAAM_JR) += caam_jr
DIRS-$(CONFIG_RTE_LIBRTE_PMD_CCP) += ccp
DIRS-$(CONFIG_RTE_LIBRTE_PMD_OCTEONTX_CRYPTO) += octeontx
DIRS-$(CONFIG_RTE_LIBRTE_PMD_OPENSSL) += openssl

View File

@ -0,0 +1,37 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2017 NXP
include $(RTE_SDK)/mk/rte.vars.mk
#
# library name
#
LIB = librte_pmd_caam_jr.a
# build flags
CFLAGS += -DALLOW_EXPERIMENTAL_API
CFLAGS += -D _GNU_SOURCE
CFLAGS += -O3
CFLAGS += $(WERROR_FLAGS)
CFLAGS += -I$(RTE_SDK)/drivers/crypto/caam_jr
CFLAGS += -I$(RTE_SDK)/lib/librte_eal/common/include
CFLAGS += -I$(RTE_SDK)/lib/librte_eal/linuxapp/eal
# versioning export map
EXPORT_MAP := rte_pmd_caam_jr_version.map
# library version
LIBABIVER := 1
# library source files
SRCS-$(CONFIG_RTE_LIBRTE_PMD_CAAM_JR) += caam_jr.c
# library dependencies
LDLIBS += -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring
LDLIBS += -lrte_cryptodev
LDLIBS += -lrte_bus_vdev
include $(RTE_SDK)/mk/rte.lib.mk

View File

@ -0,0 +1,151 @@
/* SPDX-License-Identifier: BSD-3-Clause
* Copyright 2017-2018 NXP
*/
#include <fcntl.h>
#include <unistd.h>
#include <sched.h>
#include <net/if.h>
#include <rte_byteorder.h>
#include <rte_common.h>
#include <rte_cryptodev_pmd.h>
#include <rte_crypto.h>
#include <rte_cryptodev.h>
#include <rte_bus_vdev.h>
#include <rte_malloc.h>
#include <rte_security_driver.h>
#include <rte_hexdump.h>
#include <caam_jr_log.h>
#define CRYPTODEV_NAME_CAAM_JR_PMD crypto_caam_jr
static uint8_t cryptodev_driver_id;
int caam_jr_logtype;
/*
* @brief Release the resources used by the SEC user space driver.
*
* Reset and release SEC's job rings indicated by the User Application at
* init_job_ring() and free any memory allocated internally.
* Call once during application tear down.
*
* @note In case there are any descriptors in-flight (descriptors received by
* SEC driver for processing and for which no response was yet provided to UA),
* the descriptors are discarded without any notifications to User Application.
*
* @retval ::0 is returned for a successful execution
* @retval ::-1 is returned if SEC driver release is in progress
*/
static int
caam_jr_dev_uninit(struct rte_cryptodev *dev)
{
if (dev == NULL)
return -ENODEV;
CAAM_JR_INFO("Closing crypto device %s", dev->data->name);
return 0;
}
static int
caam_jr_dev_init(const char *name,
struct rte_vdev_device *vdev,
struct rte_cryptodev_pmd_init_params *init_params)
{
struct rte_cryptodev *dev;
PMD_INIT_FUNC_TRACE();
dev = rte_cryptodev_pmd_create(name, &vdev->device, init_params);
if (dev == NULL) {
CAAM_JR_ERR("failed to create cryptodev vdev");
goto cleanup;
}
dev->driver_id = cryptodev_driver_id;
dev->dev_ops = NULL;
/* For secondary processes, we don't initialise any further as primary
* has already done this work. Only check we don't need a different
* RX function
*/
if (rte_eal_process_type() != RTE_PROC_PRIMARY) {
CAAM_JR_WARN("Device already init by primary process");
return 0;
}
RTE_LOG(INFO, PMD, "%s cryptodev init\n", dev->data->name);
return 0;
cleanup:
CAAM_JR_ERR("driver %s: cryptodev_caam_jr_create failed",
init_params->name);
return -ENXIO;
}
/** Initialise CAAM JR crypto device */
static int
cryptodev_caam_jr_probe(struct rte_vdev_device *vdev)
{
struct rte_cryptodev_pmd_init_params init_params = {
"",
128,
rte_socket_id(),
RTE_CRYPTODEV_PMD_DEFAULT_MAX_NB_QUEUE_PAIRS
};
const char *name;
const char *input_args;
name = rte_vdev_device_name(vdev);
if (name == NULL)
return -EINVAL;
input_args = rte_vdev_device_args(vdev);
rte_cryptodev_pmd_parse_input_args(&init_params, input_args);
return caam_jr_dev_init(name, vdev, &init_params);
}
/** Uninitialise CAAM JR crypto device */
static int
cryptodev_caam_jr_remove(struct rte_vdev_device *vdev)
{
struct rte_cryptodev *cryptodev;
const char *name;
name = rte_vdev_device_name(vdev);
if (name == NULL)
return -EINVAL;
cryptodev = rte_cryptodev_pmd_get_named_dev(name);
if (cryptodev == NULL)
return -ENODEV;
caam_jr_dev_uninit(cryptodev);
return rte_cryptodev_pmd_destroy(cryptodev);
}
static struct rte_vdev_driver cryptodev_caam_jr_drv = {
.probe = cryptodev_caam_jr_probe,
.remove = cryptodev_caam_jr_remove
};
static struct cryptodev_driver caam_jr_crypto_drv;
RTE_PMD_REGISTER_VDEV(CRYPTODEV_NAME_CAAM_JR_PMD, cryptodev_caam_jr_drv);
RTE_PMD_REGISTER_PARAM_STRING(CRYPTODEV_NAME_CAAM_JR_PMD,
"max_nb_queue_pairs=<int>"
"socket_id=<int>");
RTE_PMD_REGISTER_CRYPTO_DRIVER(caam_jr_crypto_drv, cryptodev_caam_jr_drv.driver,
cryptodev_driver_id);
RTE_INIT(caam_jr_init_log)
{
caam_jr_logtype = rte_log_register("pmd.crypto.caam");
if (caam_jr_logtype >= 0)
rte_log_set_level(caam_jr_logtype, RTE_LOG_NOTICE);
}

View File

@ -0,0 +1,42 @@
/* SPDX-License-Identifier: BSD-3-Clause
* Copyright 2017-2018 NXP
*/
#ifndef _CAAM_JR_LOG_H_
#define _CAAM_JR_LOG_H_
#include <rte_log.h>
extern int caam_jr_logtype;
#define CAAM_JR_LOG(level, fmt, args...) \
rte_log(RTE_LOG_ ## level, caam_jr_logtype, "caam_jr: " \
fmt "\n", ##args)
#define CAAM_JR_DEBUG(fmt, args...) \
rte_log(RTE_LOG_DEBUG, caam_jr_logtype, "caam_jr: %s(): " \
fmt "\n", __func__, ##args)
#define PMD_INIT_FUNC_TRACE() CAAM_JR_DEBUG(" >>")
#define CAAM_JR_INFO(fmt, args...) \
CAAM_JR_LOG(INFO, fmt, ## args)
#define CAAM_JR_ERR(fmt, args...) \
CAAM_JR_LOG(ERR, fmt, ## args)
#define CAAM_JR_WARN(fmt, args...) \
CAAM_JR_LOG(WARNING, fmt, ## args)
/* DP Logs, toggled out at compile time if level lower than current level */
#define CAAM_JR_DP_LOG(level, fmt, args...) \
RTE_LOG_DP(level, PMD, fmt "\n", ## args)
#define CAAM_JR_DP_DEBUG(fmt, args...) \
CAAM_JR_DP_LOG(DEBUG, fmt, ## args)
#define CAAM_JR_DP_INFO(fmt, args...) \
CAAM_JR_DP_LOG(INFO, fmt, ## args)
#define CAAM_JR_DP_WARN(fmt, args...) \
CAAM_JR_DP_LOG(WARNING, fmt, ## args)
#define CAAM_JR_DP_ERR(fmt, args...) \
CAAM_JR_DP_LOG(ERR, fmt, ## args)
#endif /* _CAAM_JR_LOG_H_ */

View File

@ -0,0 +1,11 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright 2018 NXP
if host_machine.system() != 'linux'
build = false
endif
deps += ['bus_vdev', 'bus_dpaa', 'security']
sources = files('caam_jr.c')
allow_experimental_apis = true

View File

@ -0,0 +1,4 @@
DPDK_18.11 {
local: *;
};

View File

@ -1,8 +1,9 @@
# SPDX-License-Identifier: BSD-3-Clause
# Copyright(c) 2017 Intel Corporation
drivers = ['aesni_gcm', 'aesni_mb', 'ccp', 'dpaa_sec', 'dpaa2_sec', 'kasumi', 'mvsam',
'null', 'octeontx', 'openssl', 'qat', 'scheduler', 'virtio', 'zuc']
drivers = ['aesni_gcm', 'aesni_mb', 'caam_jr', 'ccp', 'dpaa_sec', 'dpaa2_sec',
'kasumi', 'mvsam', 'null', 'octeontx', 'openssl', 'qat', 'scheduler',
'virtio', 'zuc']
std_deps = ['cryptodev'] # cryptodev pulls in all other needed deps
config_flag_fmt = 'RTE_LIBRTE_@0@_PMD'