mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	crypto: caam/qi2 - add DPAA2-CAAM driver
Add CAAM driver that works using the DPSECI backend, i.e. manages
DPSECI DPAA2 objects sitting on the Management Complex (MC) fsl-mc bus.
Data transfers (crypto requests) are sent/received to/from CAAM crypto
engine via Queue Interface (v2), this being similar to existing caam/qi.
OTOH, configuration/setup (obtaining virtual queue IDs, authorization
etc.) is done by sending commands to the MC f/w.
Note that the CAAM accelerator included in DPAA2 platforms still has
Job Rings. However, the driver being added does not handle access
via this backend. Kconfig & Makefile are updated such that DPAA2-CAAM
(a.k.a. "caam/qi2") driver does not depend on caam/jr or caam/qi
backends - which rely on platform bus support (ctrl.c).
Support for the following aead and authenc algorithms is also added
in this patch:
-aead:
gcm(aes)
rfc4106(gcm(aes))
rfc4543(gcm(aes))
-authenc:
authenc(hmac({md5,sha*}),cbc({aes,des,des3_ede}))
echainiv(authenc(hmac({md5,sha*}),cbc({aes,des,des3_ede})))
authenc(hmac({md5,sha*}),rfc3686(ctr(aes))
seqiv(authenc(hmac({md5,sha*}),rfc3686(ctr(aes)))
Signed-off-by: Horia Geantă <horia.geanta@nxp.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
			
			
This commit is contained in:
		
							parent
							
								
									94cebd9da4
								
							
						
					
					
						commit
						8d818c1055
					
				
					 7 changed files with 3109 additions and 17 deletions
				
			
		| 
						 | 
					@ -10,7 +10,7 @@ obj-$(CONFIG_CRYPTO_DEV_CHELSIO) += chelsio/
 | 
				
			||||||
obj-$(CONFIG_CRYPTO_DEV_CPT) += cavium/cpt/
 | 
					obj-$(CONFIG_CRYPTO_DEV_CPT) += cavium/cpt/
 | 
				
			||||||
obj-$(CONFIG_CRYPTO_DEV_NITROX) += cavium/nitrox/
 | 
					obj-$(CONFIG_CRYPTO_DEV_NITROX) += cavium/nitrox/
 | 
				
			||||||
obj-$(CONFIG_CRYPTO_DEV_EXYNOS_RNG) += exynos-rng.o
 | 
					obj-$(CONFIG_CRYPTO_DEV_EXYNOS_RNG) += exynos-rng.o
 | 
				
			||||||
obj-$(CONFIG_CRYPTO_DEV_FSL_CAAM) += caam/
 | 
					obj-$(CONFIG_CRYPTO_DEV_FSL_CAAM_COMMON) += caam/
 | 
				
			||||||
obj-$(CONFIG_CRYPTO_DEV_GEODE) += geode-aes.o
 | 
					obj-$(CONFIG_CRYPTO_DEV_GEODE) += geode-aes.o
 | 
				
			||||||
obj-$(CONFIG_CRYPTO_DEV_HIFN_795X) += hifn_795x.o
 | 
					obj-$(CONFIG_CRYPTO_DEV_HIFN_795X) += hifn_795x.o
 | 
				
			||||||
obj-$(CONFIG_CRYPTO_DEV_IMGTEC_HASH) += img-hash.o
 | 
					obj-$(CONFIG_CRYPTO_DEV_IMGTEC_HASH) += img-hash.o
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,11 @@
 | 
				
			||||||
 | 
					config CRYPTO_DEV_FSL_CAAM_COMMON
 | 
				
			||||||
 | 
						tristate
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config CRYPTO_DEV_FSL_CAAM
 | 
					config CRYPTO_DEV_FSL_CAAM
 | 
				
			||||||
	tristate "Freescale CAAM-Multicore driver backend"
 | 
						tristate "Freescale CAAM-Multicore platform driver backend"
 | 
				
			||||||
	depends on FSL_SOC || ARCH_MXC || ARCH_LAYERSCAPE
 | 
						depends on FSL_SOC || ARCH_MXC || ARCH_LAYERSCAPE
 | 
				
			||||||
	select SOC_BUS
 | 
						select SOC_BUS
 | 
				
			||||||
 | 
						select CRYPTO_DEV_FSL_CAAM_COMMON
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Enables the driver module for Freescale's Cryptographic Accelerator
 | 
						  Enables the driver module for Freescale's Cryptographic Accelerator
 | 
				
			||||||
	  and Assurance Module (CAAM), also known as the SEC version 4 (SEC4).
 | 
						  and Assurance Module (CAAM), also known as the SEC version 4 (SEC4).
 | 
				
			||||||
| 
						 | 
					@ -12,9 +16,16 @@ config CRYPTO_DEV_FSL_CAAM
 | 
				
			||||||
	  To compile this driver as a module, choose M here: the module
 | 
						  To compile this driver as a module, choose M here: the module
 | 
				
			||||||
	  will be called caam.
 | 
						  will be called caam.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if CRYPTO_DEV_FSL_CAAM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config CRYPTO_DEV_FSL_CAAM_DEBUG
 | 
				
			||||||
 | 
						bool "Enable debug output in CAAM driver"
 | 
				
			||||||
 | 
						help
 | 
				
			||||||
 | 
						  Selecting this will enable printing of various debug
 | 
				
			||||||
 | 
						  information in the CAAM driver.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config CRYPTO_DEV_FSL_CAAM_JR
 | 
					config CRYPTO_DEV_FSL_CAAM_JR
 | 
				
			||||||
	tristate "Freescale CAAM Job Ring driver backend"
 | 
						tristate "Freescale CAAM Job Ring driver backend"
 | 
				
			||||||
	depends on CRYPTO_DEV_FSL_CAAM
 | 
					 | 
				
			||||||
	default y
 | 
						default y
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Enables the driver module for Job Rings which are part of
 | 
						  Enables the driver module for Job Rings which are part of
 | 
				
			||||||
| 
						 | 
					@ -25,9 +36,10 @@ config CRYPTO_DEV_FSL_CAAM_JR
 | 
				
			||||||
	  To compile this driver as a module, choose M here: the module
 | 
						  To compile this driver as a module, choose M here: the module
 | 
				
			||||||
	  will be called caam_jr.
 | 
						  will be called caam_jr.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if CRYPTO_DEV_FSL_CAAM_JR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config CRYPTO_DEV_FSL_CAAM_RINGSIZE
 | 
					config CRYPTO_DEV_FSL_CAAM_RINGSIZE
 | 
				
			||||||
	int "Job Ring size"
 | 
						int "Job Ring size"
 | 
				
			||||||
	depends on CRYPTO_DEV_FSL_CAAM_JR
 | 
					 | 
				
			||||||
	range 2 9
 | 
						range 2 9
 | 
				
			||||||
	default "9"
 | 
						default "9"
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
| 
						 | 
					@ -45,7 +57,6 @@ config CRYPTO_DEV_FSL_CAAM_RINGSIZE
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config CRYPTO_DEV_FSL_CAAM_INTC
 | 
					config CRYPTO_DEV_FSL_CAAM_INTC
 | 
				
			||||||
	bool "Job Ring interrupt coalescing"
 | 
						bool "Job Ring interrupt coalescing"
 | 
				
			||||||
	depends on CRYPTO_DEV_FSL_CAAM_JR
 | 
					 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Enable the Job Ring's interrupt coalescing feature.
 | 
						  Enable the Job Ring's interrupt coalescing feature.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -75,7 +86,6 @@ config CRYPTO_DEV_FSL_CAAM_INTC_TIME_THLD
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config CRYPTO_DEV_FSL_CAAM_CRYPTO_API
 | 
					config CRYPTO_DEV_FSL_CAAM_CRYPTO_API
 | 
				
			||||||
	tristate "Register algorithm implementations with the Crypto API"
 | 
						tristate "Register algorithm implementations with the Crypto API"
 | 
				
			||||||
	depends on CRYPTO_DEV_FSL_CAAM_JR
 | 
					 | 
				
			||||||
	default y
 | 
						default y
 | 
				
			||||||
	select CRYPTO_AEAD
 | 
						select CRYPTO_AEAD
 | 
				
			||||||
	select CRYPTO_AUTHENC
 | 
						select CRYPTO_AUTHENC
 | 
				
			||||||
| 
						 | 
					@ -90,7 +100,7 @@ config CRYPTO_DEV_FSL_CAAM_CRYPTO_API
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config CRYPTO_DEV_FSL_CAAM_CRYPTO_API_QI
 | 
					config CRYPTO_DEV_FSL_CAAM_CRYPTO_API_QI
 | 
				
			||||||
	tristate "Queue Interface as Crypto API backend"
 | 
						tristate "Queue Interface as Crypto API backend"
 | 
				
			||||||
	depends on CRYPTO_DEV_FSL_CAAM_JR && FSL_DPAA && NET
 | 
						depends on FSL_DPAA && NET
 | 
				
			||||||
	default y
 | 
						default y
 | 
				
			||||||
	select CRYPTO_AUTHENC
 | 
						select CRYPTO_AUTHENC
 | 
				
			||||||
	select CRYPTO_BLKCIPHER
 | 
						select CRYPTO_BLKCIPHER
 | 
				
			||||||
| 
						 | 
					@ -107,7 +117,6 @@ config CRYPTO_DEV_FSL_CAAM_CRYPTO_API_QI
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config CRYPTO_DEV_FSL_CAAM_AHASH_API
 | 
					config CRYPTO_DEV_FSL_CAAM_AHASH_API
 | 
				
			||||||
	tristate "Register hash algorithm implementations with Crypto API"
 | 
						tristate "Register hash algorithm implementations with Crypto API"
 | 
				
			||||||
	depends on CRYPTO_DEV_FSL_CAAM_JR
 | 
					 | 
				
			||||||
	default y
 | 
						default y
 | 
				
			||||||
	select CRYPTO_HASH
 | 
						select CRYPTO_HASH
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
| 
						 | 
					@ -119,7 +128,6 @@ config CRYPTO_DEV_FSL_CAAM_AHASH_API
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config CRYPTO_DEV_FSL_CAAM_PKC_API
 | 
					config CRYPTO_DEV_FSL_CAAM_PKC_API
 | 
				
			||||||
        tristate "Register public key cryptography implementations with Crypto API"
 | 
					        tristate "Register public key cryptography implementations with Crypto API"
 | 
				
			||||||
        depends on CRYPTO_DEV_FSL_CAAM_JR
 | 
					 | 
				
			||||||
        default y
 | 
					        default y
 | 
				
			||||||
        select CRYPTO_RSA
 | 
					        select CRYPTO_RSA
 | 
				
			||||||
        help
 | 
					        help
 | 
				
			||||||
| 
						 | 
					@ -131,7 +139,6 @@ config CRYPTO_DEV_FSL_CAAM_PKC_API
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config CRYPTO_DEV_FSL_CAAM_RNG_API
 | 
					config CRYPTO_DEV_FSL_CAAM_RNG_API
 | 
				
			||||||
	tristate "Register caam device for hwrng API"
 | 
						tristate "Register caam device for hwrng API"
 | 
				
			||||||
	depends on CRYPTO_DEV_FSL_CAAM_JR
 | 
					 | 
				
			||||||
	default y
 | 
						default y
 | 
				
			||||||
	select CRYPTO_RNG
 | 
						select CRYPTO_RNG
 | 
				
			||||||
	select HW_RANDOM
 | 
						select HW_RANDOM
 | 
				
			||||||
| 
						 | 
					@ -142,13 +149,25 @@ config CRYPTO_DEV_FSL_CAAM_RNG_API
 | 
				
			||||||
	  To compile this as a module, choose M here: the module
 | 
						  To compile this as a module, choose M here: the module
 | 
				
			||||||
	  will be called caamrng.
 | 
						  will be called caamrng.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config CRYPTO_DEV_FSL_CAAM_DEBUG
 | 
					endif # CRYPTO_DEV_FSL_CAAM_JR
 | 
				
			||||||
	bool "Enable debug output in CAAM driver"
 | 
					
 | 
				
			||||||
	depends on CRYPTO_DEV_FSL_CAAM
 | 
					endif # CRYPTO_DEV_FSL_CAAM
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					config CRYPTO_DEV_FSL_DPAA2_CAAM
 | 
				
			||||||
 | 
						tristate "QorIQ DPAA2 CAAM (DPSECI) driver"
 | 
				
			||||||
 | 
						depends on FSL_MC_DPIO
 | 
				
			||||||
 | 
						select CRYPTO_DEV_FSL_CAAM_COMMON
 | 
				
			||||||
 | 
						select CRYPTO_AUTHENC
 | 
				
			||||||
 | 
						select CRYPTO_AEAD
 | 
				
			||||||
	help
 | 
						help
 | 
				
			||||||
	  Selecting this will enable printing of various debug
 | 
						  CAAM driver for QorIQ Data Path Acceleration Architecture 2.
 | 
				
			||||||
	  information in the CAAM driver.
 | 
						  It handles DPSECI DPAA2 objects that sit on the Management Complex
 | 
				
			||||||
 | 
						  (MC) fsl-mc bus.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						  To compile this as a module, choose M here: the module
 | 
				
			||||||
 | 
						  will be called dpaa2_caam.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
config CRYPTO_DEV_FSL_CAAM_CRYPTO_API_DESC
 | 
					config CRYPTO_DEV_FSL_CAAM_CRYPTO_API_DESC
 | 
				
			||||||
	def_tristate (CRYPTO_DEV_FSL_CAAM_CRYPTO_API || \
 | 
						def_tristate (CRYPTO_DEV_FSL_CAAM_CRYPTO_API || \
 | 
				
			||||||
		      CRYPTO_DEV_FSL_CAAM_CRYPTO_API_QI)
 | 
							      CRYPTO_DEV_FSL_CAAM_CRYPTO_API_QI || \
 | 
				
			||||||
 | 
							      CRYPTO_DEV_FSL_DPAA2_CAAM)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6,6 +6,9 @@ ifeq ($(CONFIG_CRYPTO_DEV_FSL_CAAM_DEBUG), y)
 | 
				
			||||||
	ccflags-y := -DDEBUG
 | 
						ccflags-y := -DDEBUG
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ccflags-y += -DVERSION=\"\"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					obj-$(CONFIG_CRYPTO_DEV_FSL_CAAM_COMMON) += error.o
 | 
				
			||||||
obj-$(CONFIG_CRYPTO_DEV_FSL_CAAM) += caam.o
 | 
					obj-$(CONFIG_CRYPTO_DEV_FSL_CAAM) += caam.o
 | 
				
			||||||
obj-$(CONFIG_CRYPTO_DEV_FSL_CAAM_JR) += caam_jr.o
 | 
					obj-$(CONFIG_CRYPTO_DEV_FSL_CAAM_JR) += caam_jr.o
 | 
				
			||||||
obj-$(CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API) += caamalg.o
 | 
					obj-$(CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API) += caamalg.o
 | 
				
			||||||
| 
						 | 
					@ -16,9 +19,13 @@ obj-$(CONFIG_CRYPTO_DEV_FSL_CAAM_RNG_API) += caamrng.o
 | 
				
			||||||
obj-$(CONFIG_CRYPTO_DEV_FSL_CAAM_PKC_API) += caam_pkc.o
 | 
					obj-$(CONFIG_CRYPTO_DEV_FSL_CAAM_PKC_API) += caam_pkc.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
caam-objs := ctrl.o
 | 
					caam-objs := ctrl.o
 | 
				
			||||||
caam_jr-objs := jr.o key_gen.o error.o
 | 
					caam_jr-objs := jr.o key_gen.o
 | 
				
			||||||
caam_pkc-y := caampkc.o pkc_desc.o
 | 
					caam_pkc-y := caampkc.o pkc_desc.o
 | 
				
			||||||
ifneq ($(CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API_QI),)
 | 
					ifneq ($(CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API_QI),)
 | 
				
			||||||
	ccflags-y += -DCONFIG_CAAM_QI
 | 
						ccflags-y += -DCONFIG_CAAM_QI
 | 
				
			||||||
	caam-objs += qi.o
 | 
						caam-objs += qi.o
 | 
				
			||||||
endif
 | 
					endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					obj-$(CONFIG_CRYPTO_DEV_FSL_DPAA2_CAAM) += dpaa2_caam.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					dpaa2_caam-y    := caamalg_qi2.o dpseci.o
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2872
									
								
								drivers/crypto/caam/caamalg_qi2.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2872
									
								
								drivers/crypto/caam/caamalg_qi2.c
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										189
									
								
								drivers/crypto/caam/caamalg_qi2.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										189
									
								
								drivers/crypto/caam/caamalg_qi2.h
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,189 @@
 | 
				
			||||||
 | 
					/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright 2015-2016 Freescale Semiconductor Inc.
 | 
				
			||||||
 | 
					 * Copyright 2017-2018 NXP
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#ifndef _CAAMALG_QI2_H_
 | 
				
			||||||
 | 
					#define _CAAMALG_QI2_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <soc/fsl/dpaa2-io.h>
 | 
				
			||||||
 | 
					#include <soc/fsl/dpaa2-fd.h>
 | 
				
			||||||
 | 
					#include <linux/threads.h>
 | 
				
			||||||
 | 
					#include "dpseci.h"
 | 
				
			||||||
 | 
					#include "desc_constr.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DPAA2_CAAM_STORE_SIZE	16
 | 
				
			||||||
 | 
					/* NAPI weight *must* be a multiple of the store size. */
 | 
				
			||||||
 | 
					#define DPAA2_CAAM_NAPI_WEIGHT	64
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* The congestion entrance threshold was chosen so that on LS2088
 | 
				
			||||||
 | 
					 * we support the maximum throughput for the available memory
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define DPAA2_SEC_CONG_ENTRY_THRESH	(128 * 1024 * 1024)
 | 
				
			||||||
 | 
					#define DPAA2_SEC_CONG_EXIT_THRESH	(DPAA2_SEC_CONG_ENTRY_THRESH * 9 / 10)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * dpaa2_caam_priv - driver private data
 | 
				
			||||||
 | 
					 * @dpseci_id: DPSECI object unique ID
 | 
				
			||||||
 | 
					 * @major_ver: DPSECI major version
 | 
				
			||||||
 | 
					 * @minor_ver: DPSECI minor version
 | 
				
			||||||
 | 
					 * @dpseci_attr: DPSECI attributes
 | 
				
			||||||
 | 
					 * @sec_attr: SEC engine attributes
 | 
				
			||||||
 | 
					 * @rx_queue_attr: array of Rx queue attributes
 | 
				
			||||||
 | 
					 * @tx_queue_attr: array of Tx queue attributes
 | 
				
			||||||
 | 
					 * @cscn_mem: pointer to memory region containing the congestion SCN
 | 
				
			||||||
 | 
					 *	it's size is larger than to accommodate alignment
 | 
				
			||||||
 | 
					 * @cscn_mem_aligned: pointer to congestion SCN; it is computed as
 | 
				
			||||||
 | 
					 *	PTR_ALIGN(cscn_mem, DPAA2_CSCN_ALIGN)
 | 
				
			||||||
 | 
					 * @cscn_dma: dma address used by the QMAN to write CSCN messages
 | 
				
			||||||
 | 
					 * @dev: device associated with the DPSECI object
 | 
				
			||||||
 | 
					 * @mc_io: pointer to MC portal's I/O object
 | 
				
			||||||
 | 
					 * @domain: IOMMU domain
 | 
				
			||||||
 | 
					 * @ppriv: per CPU pointers to privata data
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct dpaa2_caam_priv {
 | 
				
			||||||
 | 
						int dpsec_id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						u16 major_ver;
 | 
				
			||||||
 | 
						u16 minor_ver;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						struct dpseci_attr dpseci_attr;
 | 
				
			||||||
 | 
						struct dpseci_sec_attr sec_attr;
 | 
				
			||||||
 | 
						struct dpseci_rx_queue_attr rx_queue_attr[DPSECI_MAX_QUEUE_NUM];
 | 
				
			||||||
 | 
						struct dpseci_tx_queue_attr tx_queue_attr[DPSECI_MAX_QUEUE_NUM];
 | 
				
			||||||
 | 
						int num_pairs;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* congestion */
 | 
				
			||||||
 | 
						void *cscn_mem;
 | 
				
			||||||
 | 
						void *cscn_mem_aligned;
 | 
				
			||||||
 | 
						dma_addr_t cscn_dma;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						struct device *dev;
 | 
				
			||||||
 | 
						struct fsl_mc_io *mc_io;
 | 
				
			||||||
 | 
						struct iommu_domain *domain;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						struct dpaa2_caam_priv_per_cpu __percpu *ppriv;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * dpaa2_caam_priv_per_cpu - per CPU private data
 | 
				
			||||||
 | 
					 * @napi: napi structure
 | 
				
			||||||
 | 
					 * @net_dev: netdev used by napi
 | 
				
			||||||
 | 
					 * @req_fqid: (virtual) request (Tx / enqueue) FQID
 | 
				
			||||||
 | 
					 * @rsp_fqid: (virtual) response (Rx / dequeue) FQID
 | 
				
			||||||
 | 
					 * @prio: internal queue number - index for dpaa2_caam_priv.*_queue_attr
 | 
				
			||||||
 | 
					 * @nctx: notification context of response FQ
 | 
				
			||||||
 | 
					 * @store: where dequeued frames are stored
 | 
				
			||||||
 | 
					 * @priv: backpointer to dpaa2_caam_priv
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct dpaa2_caam_priv_per_cpu {
 | 
				
			||||||
 | 
						struct napi_struct napi;
 | 
				
			||||||
 | 
						struct net_device net_dev;
 | 
				
			||||||
 | 
						int req_fqid;
 | 
				
			||||||
 | 
						int rsp_fqid;
 | 
				
			||||||
 | 
						int prio;
 | 
				
			||||||
 | 
						struct dpaa2_io_notification_ctx nctx;
 | 
				
			||||||
 | 
						struct dpaa2_io_store *store;
 | 
				
			||||||
 | 
						struct dpaa2_caam_priv *priv;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * The CAAM QI hardware constructs a job descriptor which points
 | 
				
			||||||
 | 
					 * to shared descriptor (as pointed by context_a of FQ to CAAM).
 | 
				
			||||||
 | 
					 * When the job descriptor is executed by deco, the whole job
 | 
				
			||||||
 | 
					 * descriptor together with shared descriptor gets loaded in
 | 
				
			||||||
 | 
					 * deco buffer which is 64 words long (each 32-bit).
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The job descriptor constructed by QI hardware has layout:
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *	HEADER		(1 word)
 | 
				
			||||||
 | 
					 *	Shdesc ptr	(1 or 2 words)
 | 
				
			||||||
 | 
					 *	SEQ_OUT_PTR	(1 word)
 | 
				
			||||||
 | 
					 *	Out ptr		(1 or 2 words)
 | 
				
			||||||
 | 
					 *	Out length	(1 word)
 | 
				
			||||||
 | 
					 *	SEQ_IN_PTR	(1 word)
 | 
				
			||||||
 | 
					 *	In ptr		(1 or 2 words)
 | 
				
			||||||
 | 
					 *	In length	(1 word)
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * The shdesc ptr is used to fetch shared descriptor contents
 | 
				
			||||||
 | 
					 * into deco buffer.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * Apart from shdesc contents, the total number of words that
 | 
				
			||||||
 | 
					 * get loaded in deco buffer are '8' or '11'. The remaining words
 | 
				
			||||||
 | 
					 * in deco buffer can be used for storing shared descriptor.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define MAX_SDLEN	((CAAM_DESC_BYTES_MAX - DESC_JOB_IO_LEN) / CAAM_CMD_SZ)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Length of a single buffer in the QI driver memory cache */
 | 
				
			||||||
 | 
					#define CAAM_QI_MEMCACHE_SIZE	512
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * aead_edesc - s/w-extended aead descriptor
 | 
				
			||||||
 | 
					 * @src_nents: number of segments in input scatterlist
 | 
				
			||||||
 | 
					 * @dst_nents: number of segments in output scatterlist
 | 
				
			||||||
 | 
					 * @iv_dma: dma address of iv for checking continuity and link table
 | 
				
			||||||
 | 
					 * @qm_sg_bytes: length of dma mapped h/w link table
 | 
				
			||||||
 | 
					 * @qm_sg_dma: bus physical mapped address of h/w link table
 | 
				
			||||||
 | 
					 * @assoclen: associated data length, in CAAM endianness
 | 
				
			||||||
 | 
					 * @assoclen_dma: bus physical mapped address of req->assoclen
 | 
				
			||||||
 | 
					 * @sgt: the h/w link table, followed by IV
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct aead_edesc {
 | 
				
			||||||
 | 
						int src_nents;
 | 
				
			||||||
 | 
						int dst_nents;
 | 
				
			||||||
 | 
						dma_addr_t iv_dma;
 | 
				
			||||||
 | 
						int qm_sg_bytes;
 | 
				
			||||||
 | 
						dma_addr_t qm_sg_dma;
 | 
				
			||||||
 | 
						unsigned int assoclen;
 | 
				
			||||||
 | 
						dma_addr_t assoclen_dma;
 | 
				
			||||||
 | 
						struct dpaa2_sg_entry sgt[0];
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * caam_flc - Flow Context (FLC)
 | 
				
			||||||
 | 
					 * @flc: Flow Context options
 | 
				
			||||||
 | 
					 * @sh_desc: Shared Descriptor
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct caam_flc {
 | 
				
			||||||
 | 
						u32 flc[16];
 | 
				
			||||||
 | 
						u32 sh_desc[MAX_SDLEN];
 | 
				
			||||||
 | 
					} ____cacheline_aligned;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum optype {
 | 
				
			||||||
 | 
						ENCRYPT = 0,
 | 
				
			||||||
 | 
						DECRYPT,
 | 
				
			||||||
 | 
						NUM_OP
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * caam_request - the request structure the driver application should fill while
 | 
				
			||||||
 | 
					 *                submitting a job to driver.
 | 
				
			||||||
 | 
					 * @fd_flt: Frame list table defining input and output
 | 
				
			||||||
 | 
					 *          fd_flt[0] - FLE pointing to output buffer
 | 
				
			||||||
 | 
					 *          fd_flt[1] - FLE pointing to input buffer
 | 
				
			||||||
 | 
					 * @fd_flt_dma: DMA address for the frame list table
 | 
				
			||||||
 | 
					 * @flc: Flow Context
 | 
				
			||||||
 | 
					 * @flc_dma: I/O virtual address of Flow Context
 | 
				
			||||||
 | 
					 * @cbk: Callback function to invoke when job is completed
 | 
				
			||||||
 | 
					 * @ctx: arbit context attached with request by the application
 | 
				
			||||||
 | 
					 * @edesc: extended descriptor; points to aead_edesc
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					struct caam_request {
 | 
				
			||||||
 | 
						struct dpaa2_fl_entry fd_flt[2];
 | 
				
			||||||
 | 
						dma_addr_t fd_flt_dma;
 | 
				
			||||||
 | 
						struct caam_flc *flc;
 | 
				
			||||||
 | 
						dma_addr_t flc_dma;
 | 
				
			||||||
 | 
						void (*cbk)(void *ctx, u32 err);
 | 
				
			||||||
 | 
						void *ctx;
 | 
				
			||||||
 | 
						void *edesc;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * dpaa2_caam_enqueue() - enqueue a crypto request
 | 
				
			||||||
 | 
					 * @dev: device associated with the DPSECI object
 | 
				
			||||||
 | 
					 * @req: pointer to caam_request
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					int dpaa2_caam_enqueue(struct device *dev, struct caam_request *req);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif	/* _CAAMALG_QI2_H_ */
 | 
				
			||||||
| 
						 | 
					@ -17,6 +17,7 @@
 | 
				
			||||||
#include <linux/of_platform.h>
 | 
					#include <linux/of_platform.h>
 | 
				
			||||||
#include <linux/dma-mapping.h>
 | 
					#include <linux/dma-mapping.h>
 | 
				
			||||||
#include <linux/io.h>
 | 
					#include <linux/io.h>
 | 
				
			||||||
 | 
					#include <linux/iommu.h>
 | 
				
			||||||
#include <linux/spinlock.h>
 | 
					#include <linux/spinlock.h>
 | 
				
			||||||
#include <linux/rtnetlink.h>
 | 
					#include <linux/rtnetlink.h>
 | 
				
			||||||
#include <linux/in.h>
 | 
					#include <linux/in.h>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -358,3 +358,7 @@ void caam_strstatus(struct device *jrdev, u32 status, bool qi_v2)
 | 
				
			||||||
		dev_err(jrdev, "%d: unknown error source\n", ssrc);
 | 
							dev_err(jrdev, "%d: unknown error source\n", ssrc);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL(caam_strstatus);
 | 
					EXPORT_SYMBOL(caam_strstatus);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MODULE_LICENSE("GPL");
 | 
				
			||||||
 | 
					MODULE_DESCRIPTION("FSL CAAM error reporting");
 | 
				
			||||||
 | 
					MODULE_AUTHOR("Freescale Semiconductor");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue