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:
parent
0e9f8507af
commit
af7c9b5e9c
@ -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>
|
||||
|
@ -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
|
||||
#
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
37
drivers/crypto/caam_jr/Makefile
Normal file
37
drivers/crypto/caam_jr/Makefile
Normal 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
|
151
drivers/crypto/caam_jr/caam_jr.c
Normal file
151
drivers/crypto/caam_jr/caam_jr.c
Normal 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);
|
||||
}
|
42
drivers/crypto/caam_jr/caam_jr_log.h
Normal file
42
drivers/crypto/caam_jr/caam_jr_log.h
Normal 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_ */
|
11
drivers/crypto/caam_jr/meson.build
Normal file
11
drivers/crypto/caam_jr/meson.build
Normal 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
|
4
drivers/crypto/caam_jr/rte_pmd_caam_jr_version.map
Normal file
4
drivers/crypto/caam_jr/rte_pmd_caam_jr_version.map
Normal file
@ -0,0 +1,4 @@
|
||||
DPDK_18.11 {
|
||||
|
||||
local: *;
|
||||
};
|
@ -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'
|
||||
|
Loading…
Reference in New Issue
Block a user