# SPDX-License-Identifier: GPL-2.0
config CRYPTO_DEV_FSL_CAAM_COMMON
	tristate

config CRYPTO_DEV_FSL_CAAM_CRYPTO_API_DESC
	tristate

config CRYPTO_DEV_FSL_CAAM_AHASH_API_DESC
	tristate

config CRYPTO_DEV_FSL_CAAM
	tristate "Freescale CAAM-Multicore platform driver backend"
	depends on FSL_SOC || ARCH_MXC || ARCH_LAYERSCAPE || COMPILE_TEST
	select SOC_BUS
	select CRYPTO_DEV_FSL_CAAM_COMMON
	imply FSL_MC_BUS
	help
	  Enables the driver module for Freescale's Cryptographic Accelerator
	  and Assurance Module (CAAM), also known as the SEC version 4 (SEC4).
	  This module creates job ring devices, and configures h/w
	  to operate as a DPAA component automatically, depending
	  on h/w feature availability.

	  To compile this driver as a module, choose M here: the module
	  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.

menuconfig CRYPTO_DEV_FSL_CAAM_JR
	tristate "Freescale CAAM Job Ring driver backend"
	select CRYPTO_ENGINE
	default y
	help
	  Enables the driver module for Job Rings which are part of
	  Freescale's Cryptographic Accelerator
	  and Assurance Module (CAAM). This module adds a job ring operation
	  interface.

	  To compile this driver as a module, choose M here: the module
	  will be called caam_jr.

if CRYPTO_DEV_FSL_CAAM_JR

config CRYPTO_DEV_FSL_CAAM_RINGSIZE
	int "Job Ring size"
	range 2 9
	default "9"
	help
	  Select size of Job Rings as a power of 2, within the
	  range 2-9 (ring size 4-512).
	  Examples:
		2 => 4
		3 => 8
		4 => 16
		5 => 32
		6 => 64
		7 => 128
		8 => 256
		9 => 512

config CRYPTO_DEV_FSL_CAAM_INTC
	bool "Job Ring interrupt coalescing"
	help
	  Enable the Job Ring's interrupt coalescing feature.

	  Note: the driver already provides adequate
	  interrupt coalescing in software.

config CRYPTO_DEV_FSL_CAAM_INTC_COUNT_THLD
	int "Job Ring interrupt coalescing count threshold"
	depends on CRYPTO_DEV_FSL_CAAM_INTC
	range 1 255
	default 255
	help
	  Select number of descriptor completions to queue before
	  raising an interrupt, in the range 1-255. Note that a selection
	  of 1 functionally defeats the coalescing feature, and a selection
	  equal or greater than the job ring size will force timeouts.

config CRYPTO_DEV_FSL_CAAM_INTC_TIME_THLD
	int "Job Ring interrupt coalescing timer threshold"
	depends on CRYPTO_DEV_FSL_CAAM_INTC
	range 1 65535
	default 2048
	help
	  Select number of bus clocks/64 to timeout in the case that one or
	  more descriptor completions are queued without reaching the count
	  threshold. Range is 1-65535.

config CRYPTO_DEV_FSL_CAAM_CRYPTO_API
	bool "Register algorithm implementations with the Crypto API"
	default y
	select CRYPTO_DEV_FSL_CAAM_CRYPTO_API_DESC
	select CRYPTO_AEAD
	select CRYPTO_AUTHENC
	select CRYPTO_SKCIPHER
	select CRYPTO_LIB_DES
	select CRYPTO_XTS
	help
	  Selecting this will offload crypto for users of the
	  scatterlist crypto API (such as the linux native IPSec
	  stack) to the SEC4 via job ring.

config CRYPTO_DEV_FSL_CAAM_CRYPTO_API_QI
	bool "Queue Interface as Crypto API backend"
	depends on FSL_DPAA && NET
	default y
	select CRYPTO_DEV_FSL_CAAM_CRYPTO_API_DESC
	select CRYPTO_AUTHENC
	select CRYPTO_SKCIPHER
	select CRYPTO_DES
	select CRYPTO_XTS
	help
	  Selecting this will use CAAM Queue Interface (QI) for sending
	  & receiving crypto jobs to/from CAAM. This gives better performance
	  than job ring interface when the number of cores are more than the
	  number of job rings assigned to the kernel. The number of portals
	  assigned to the kernel should also be more than the number of
	  job rings.

config CRYPTO_DEV_FSL_CAAM_AHASH_API
	bool "Register hash algorithm implementations with Crypto API"
	default y
	select CRYPTO_DEV_FSL_CAAM_AHASH_API_DESC
	select CRYPTO_HASH
	help
	  Selecting this will offload ahash for users of the
	  scatterlist crypto API to the SEC4 via job ring.

config CRYPTO_DEV_FSL_CAAM_PKC_API
	bool "Register public key cryptography implementations with Crypto API"
	default y
	select CRYPTO_RSA
	help
	  Selecting this will allow SEC Public key support for RSA.
	  Supported cryptographic primitives: encryption, decryption,
	  signature and verification.

config CRYPTO_DEV_FSL_CAAM_RNG_API
	bool "Register caam device for hwrng API"
	default y
	select CRYPTO_RNG
	select HW_RANDOM
	help
	  Selecting this will register the SEC4 hardware rng to
	  the hw_random API for supplying the kernel entropy pool.

config CRYPTO_DEV_FSL_CAAM_PRNG_API
	bool "Register Pseudo random number generation implementation with Crypto API"
	default y
	select CRYPTO_RNG
	help
	  Selecting this will register the SEC hardware prng to
	  the Crypto API.

config CRYPTO_DEV_FSL_CAAM_BLOB_GEN
	bool

config CRYPTO_DEV_FSL_CAAM_RNG_TEST
	bool "Test caam rng"
	select CRYPTO_DEV_FSL_CAAM_RNG_API
	help
	  Selecting this will enable a self-test to run for the
	  caam RNG.
	  This test is several minutes long and executes
	  just before the RNG is registered with the hw_random API.

endif # CRYPTO_DEV_FSL_CAAM_JR

endif # CRYPTO_DEV_FSL_CAAM

config CRYPTO_DEV_FSL_DPAA2_CAAM
	tristate "QorIQ DPAA2 CAAM (DPSECI) driver"
	depends on FSL_MC_DPIO
	depends on NETDEVICES
	select CRYPTO_DEV_FSL_CAAM_COMMON
	select CRYPTO_DEV_FSL_CAAM_CRYPTO_API_DESC
	select CRYPTO_DEV_FSL_CAAM_AHASH_API_DESC
	select CRYPTO_SKCIPHER
	select CRYPTO_AUTHENC
	select CRYPTO_AEAD
	select CRYPTO_HASH
	select CRYPTO_DES
	select CRYPTO_XTS
	help
	  CAAM driver for QorIQ Data Path Acceleration Architecture 2.
	  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.
