# SPDX-License-Identifier: GPL-2.0-only

config CRYPTO_DEV_NX_ENCRYPT
	tristate "Encryption acceleration support on pSeries platform"
	depends on PPC_PSERIES && IBMVIO && !CPU_LITTLE_ENDIAN
	default y
	select CRYPTO_AES
	select CRYPTO_CCM
	help
	  Support for PowerPC Nest (NX) encryption acceleration. This
	  module supports acceleration for AES and SHA2 algorithms on
	  the pSeries platform.  If you choose 'M' here, this module
	  will be called nx_crypto.

config CRYPTO_DEV_NX_COMPRESS
	tristate "Compression acceleration support"
	default y
	select CRYPTO_ALGAPI
	select 842_DECOMPRESS
	help
	  Support for PowerPC Nest (NX) compression acceleration. This
	  module supports acceleration for compressing memory with the 842
	  algorithm using the cryptographic API.  One of the platform
	  drivers must be selected also.  If you choose 'M' here, this
	  module will be called nx_compress.

if CRYPTO_DEV_NX_COMPRESS

config CRYPTO_DEV_NX_COMPRESS_PSERIES
	tristate "Compression acceleration support on pSeries platform"
	depends on PPC_PSERIES && IBMVIO
	default y
	help
	  Support for PowerPC Nest (NX) compression acceleration. This
	  module supports acceleration for compressing memory with the 842
	  algorithm.  This supports NX hardware on the pSeries platform.
	  If you choose 'M' here, this module will be called nx_compress_pseries.

config CRYPTO_DEV_NX_COMPRESS_POWERNV
	tristate "Compression acceleration support on PowerNV platform"
	depends on PPC_POWERNV
	depends on PPC_VAS
	default y
	help
	  Support for PowerPC Nest (NX) compression acceleration. This
	  module supports acceleration for compressing memory with the 842
	  algorithm.  This supports NX hardware on the PowerNV platform.
	  If you choose 'M' here, this module will be called nx_compress_powernv.

endif
