# SPDX-License-Identifier: GPL-2.0-only
#
# Hardware Random Number Generator (RNG) configuration
#

menuconfig HW_RANDOM
	tristate "Hardware Random Number Generator Core support"
	default m
	help
	  Hardware Random Number Generator Core infrastructure.

	  To compile this driver as a module, choose M here: the
	  module will be called rng-core.  This provides a device
	  that's usually called /dev/hwrng, and which exposes one
	  of possibly several hardware random number generators.

	  These hardware random number generators do feed into the
	  kernel's random number generator entropy pool.

	  If unsure, say Y.

if HW_RANDOM

config HW_RANDOM_TIMERIOMEM
	tristate "Timer IOMEM HW Random Number Generator support"
	depends on HAS_IOMEM
	help
	  This driver provides kernel-side support for a generic Random
	  Number Generator used by reading a 'dumb' iomem address that
	  is to be read no faster than, for example, once a second;
	  the default FPGA bitstream on the TS-7800 has such functionality.

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

	  If unsure, say Y.

config HW_RANDOM_INTEL
	tristate "Intel HW Random Number Generator support"
	depends on (X86 || IA64) && PCI
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on Intel i8xx-based motherboards.

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

	  If unsure, say Y.

config HW_RANDOM_AMD
	tristate "AMD HW Random Number Generator support"
	depends on (X86 || PPC_MAPLE) && PCI
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on AMD 76x-based motherboards.

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

	  If unsure, say Y.

config HW_RANDOM_ATMEL
	tristate "Atmel Random Number Generator support"
	depends on ARCH_AT91 && HAVE_CLK && OF
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on Atmel AT91 devices.

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

	  If unsure, say Y.

config HW_RANDOM_BA431
	tristate "Silex Insight BA431 Random Number Generator support"
	depends on HAS_IOMEM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware based on Silex Insight BA431 IP.

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

config HW_RANDOM_BCM2835
	tristate "Broadcom BCM2835/BCM63xx Random Number Generator support"
	depends on ARCH_BCM2835 || ARCH_BCM_NSP || ARCH_BCM_5301X || \
		   ARCH_BCM_63XX || BCM63XX || BMIPS_GENERIC
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on the Broadcom BCM2835 and BCM63xx SoCs.

	  To compile this driver as a module, choose M here: the
	  module will be called bcm2835-rng

	  If unsure, say Y.

config HW_RANDOM_IPROC_RNG200
	tristate "Broadcom iProc/STB RNG200 support"
	depends on ARCH_BCM_IPROC || ARCH_BCM2835 || ARCH_BRCMSTB
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the RNG200
	  hardware found on the Broadcom iProc and STB SoCs.

	  To compile this driver as a module, choose M here: the
	  module will be called iproc-rng200

	  If unsure, say Y.

config HW_RANDOM_GEODE
	tristate "AMD Geode HW Random Number Generator support"
	depends on X86_32 && PCI
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on the AMD Geode LX.

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

	  If unsure, say Y.

config HW_RANDOM_N2RNG
	tristate "Niagara2 Random Number Generator support"
	depends on SPARC64
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on Niagara2 cpus.

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

	  If unsure, say Y.

config HW_RANDOM_VIA
	tristate "VIA HW Random Number Generator support"
	depends on X86
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on VIA based motherboards.

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

	  If unsure, say Y.

config HW_RANDOM_IXP4XX
	tristate "Intel IXP4xx NPU HW Pseudo-Random Number Generator support"
	depends on ARCH_IXP4XX || COMPILE_TEST
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Pseudo-Random
	  Number Generator hardware found on the Intel IXP45x/46x NPU.

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

	  If unsure, say Y.

config HW_RANDOM_OMAP
	tristate "OMAP Random Number Generator support"
	depends on ARCH_OMAP16XX || ARCH_OMAP2PLUS || ARCH_MVEBU || ARCH_K3
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on OMAP16xx, OMAP2/3/4/5, AM33xx/AM43xx
	  multimedia processors, and Marvell Armada 7k/8k SoCs.

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

	  If unsure, say Y.

config HW_RANDOM_OMAP3_ROM
	tristate "OMAP3 ROM Random Number Generator support"
	depends on ARCH_OMAP3
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on OMAP34xx processors.

	  To compile this driver as a module, choose M here: the
	  module will be called omap3-rom-rng.

	  If unsure, say Y.

config HW_RANDOM_OCTEON
	tristate "Octeon Random Number Generator support"
	depends on CAVIUM_OCTEON_SOC
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on Octeon processors.

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

	  If unsure, say Y.

config HW_RANDOM_PASEMI
	tristate "PA Semi HW Random Number Generator support"
	depends on PPC_PASEMI
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on PA Semi PWRficient SoCs.

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

	  If unsure, say Y.

config HW_RANDOM_VIRTIO
	tristate "VirtIO Random Number Generator support"
	depends on VIRTIO
	help
	  This driver provides kernel-side support for the virtual Random Number
	  Generator hardware.

	  To compile this driver as a module, choose M here: the
	  module will be called virtio-rng.  If unsure, say N.

config HW_RANDOM_TX4939
	tristate "TX4939 Random Number Generator support"
	depends on SOC_TX4939
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on TX4939 SoC.

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

	  If unsure, say Y.

config HW_RANDOM_MXC_RNGA
	tristate "Freescale i.MX RNGA Random Number Generator"
	depends on SOC_IMX31
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on Freescale i.MX processors.

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

	  If unsure, say Y.

config HW_RANDOM_IMX_RNGC
	tristate "Freescale i.MX RNGC Random Number Generator"
	depends on HAS_IOMEM && HAVE_CLK
	depends on SOC_IMX25 || SOC_IMX6SL || SOC_IMX6SLL || SOC_IMX6UL || COMPILE_TEST
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator Version C hardware found on some Freescale i.MX
	  processors. Version B is also supported by this driver.

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

	  If unsure, say Y.

config HW_RANDOM_INGENIC_RNG
	tristate "Ingenic Random Number Generator support"
	depends on HW_RANDOM
	depends on MACH_JZ4780 || MACH_X1000
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number Generator
	  hardware found in ingenic JZ4780 and X1000 SoC. MIPS Creator CI20 uses
	  JZ4780 SoC, YSH & ATIL CU1000-Neo uses X1000 SoC.

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

	  If unsure, say Y.

config HW_RANDOM_INGENIC_TRNG
	tristate "Ingenic True Random Number Generator support"
	depends on HW_RANDOM
	depends on MACH_X1830
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the True Random Number Generator
	  hardware found in ingenic X1830 SoC. YSH & ATIL CU1830-Neo uses X1830 SoC.

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

	  If unsure, say Y.

config HW_RANDOM_NOMADIK
	tristate "ST-Ericsson Nomadik Random Number Generator support"
	depends on ARCH_NOMADIK
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on ST-Ericsson SoCs (8815 and 8500).

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

	  If unsure, say Y.

config HW_RANDOM_PSERIES
	tristate "pSeries HW Random Number Generator support"
	depends on PPC64 && IBMVIO
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on POWER7+ machines and above

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

	  If unsure, say Y.

config HW_RANDOM_POWERNV
	tristate "PowerNV Random Number Generator support"
	depends on PPC_POWERNV
	default HW_RANDOM
	help
	  This is the driver for Random Number Generator hardware found
	  in POWER7+ and above machines for PowerNV platform.

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

	  If unsure, say Y.

config HW_RANDOM_HISI
	tristate "Hisilicon Random Number Generator support"
	depends on HW_RANDOM && ARCH_HISI
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on Hisilicon Hip04 and Hip05 SoC.

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

	  If unsure, say Y.

config HW_RANDOM_ST
	tristate "ST Microelectronics HW Random Number Generator support"
	depends on HW_RANDOM && ARCH_STI
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on STi series of SoCs.

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

config HW_RANDOM_XGENE
	tristate "APM X-Gene True Random Number Generator (TRNG) support"
	depends on HW_RANDOM && ARCH_XGENE
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on APM X-Gene SoC.

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

	  If unsure, say Y.

config HW_RANDOM_STM32
	tristate "STMicroelectronics STM32 random number generator"
	depends on HW_RANDOM && (ARCH_STM32 || COMPILE_TEST)
	depends on HAS_IOMEM
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on STM32 microcontrollers.

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

	  If unsure, say N.

config HW_RANDOM_PIC32
	tristate "Microchip PIC32 Random Number Generator support"
	depends on HW_RANDOM && MACH_PIC32
	default y
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on a PIC32.

	  To compile this driver as a module, choose M here. the
	  module will be called pic32-rng.

	  If unsure, say Y.

config HW_RANDOM_MESON
	tristate "Amlogic Meson Random Number Generator support"
	depends on HW_RANDOM
	depends on ARCH_MESON || COMPILE_TEST
	default y
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on Amlogic Meson SoCs.

	  To compile this driver as a module, choose M here. the
	  module will be called meson-rng.

	  If unsure, say Y.

config HW_RANDOM_CAVIUM
	tristate "Cavium ThunderX Random Number Generator support"
	depends on HW_RANDOM && PCI && (ARM64 || (COMPILE_TEST && 64BIT))
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on Cavium SoCs.

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

	  If unsure, say Y.

config HW_RANDOM_MTK
	tristate "Mediatek Random Number Generator support"
	depends on HW_RANDOM
	depends on ARCH_MEDIATEK || COMPILE_TEST
	default y
	help
	  This driver provides kernel-side support for the Random Number
	  Generator hardware found on Mediatek SoCs.

	  To compile this driver as a module, choose M here. the
	  module will be called mtk-rng.

	  If unsure, say Y.

config HW_RANDOM_S390
	tristate "S390 True Random Number Generator support"
	depends on S390
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the True
	  Random Number Generator available as CPACF extension
	  on modern s390 hardware platforms.

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

	  If unsure, say Y.

config HW_RANDOM_EXYNOS
	tristate "Samsung Exynos True Random Number Generator support"
	depends on ARCH_EXYNOS || COMPILE_TEST
	default HW_RANDOM
	help
	  This driver provides support for the True Random Number
	  Generator available in Exynos SoCs.

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

	  If unsure, say Y.

config HW_RANDOM_OPTEE
	tristate "OP-TEE based Random Number Generator support"
	depends on OPTEE
	default HW_RANDOM
	help
	  This  driver provides support for OP-TEE based Random Number
	  Generator on ARM SoCs where hardware entropy sources are not
	  accessible to normal world (Linux).

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

	  If unsure, say Y.

config HW_RANDOM_NPCM
	tristate "NPCM Random Number Generator support"
	depends on ARCH_NPCM || COMPILE_TEST
	default HW_RANDOM
	help
	  This driver provides support for the Random Number
	  Generator hardware available in Nuvoton NPCM SoCs.

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

	  If unsure, say Y.

config HW_RANDOM_KEYSTONE
	depends on ARCH_KEYSTONE || COMPILE_TEST
	depends on HAS_IOMEM && OF
	default HW_RANDOM
	tristate "TI Keystone NETCP SA Hardware random number generator"
	help
	  This option enables Keystone's hardware random generator.

config HW_RANDOM_CCTRNG
	tristate "Arm CryptoCell True Random Number Generator support"
	depends on HAS_IOMEM && OF
	help
	  Say 'Y' to enable the True Random Number Generator driver for the
	  Arm TrustZone CryptoCell family of processors.
	  Currently the CryptoCell 713 and 703 are supported.
	  The driver is supported only in SoC where Trusted Execution
	  Environment is not used.
	  Choose 'M' to compile this driver as a module. The module
	  will be called cctrng.
	  If unsure, say 'N'.

config HW_RANDOM_XIPHERA
	tristate "Xiphera FPGA based True Random Number Generator support"
	depends on HAS_IOMEM
	help
	  This driver provides kernel-side support for Xiphera True Random
	  Number Generator Intellectual Property Core.

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

config HW_RANDOM_ARM_SMCCC_TRNG
	tristate "Arm SMCCC TRNG firmware interface support"
	depends on HAVE_ARM_SMCCC_DISCOVERY
	default HW_RANDOM
	help
	  Say 'Y' to enable the True Random Number Generator driver using
	  the Arm SMCCC TRNG firmware interface. This reads entropy from
	  higher exception levels (firmware, hypervisor). Uses SMCCC for
	  communicating with the firmware:
	  https://developer.arm.com/documentation/den0098/latest/

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

endif # HW_RANDOM

config UML_RANDOM
	depends on UML
	select HW_RANDOM
	tristate "UML Random Number Generator support"
	help
	  This option enables UML's "hardware" random number generator.  It
	  attaches itself to the host's /dev/random, supplying as much entropy
	  as the host has, rather than the small amount the UML gets from its
	  own drivers. It registers itself as a rng-core driver thus providing
	  a device which is usually called /dev/hwrng. This hardware random
	  number generator does feed into the kernel's random number generator
	  entropy pool.

	  If unsure, say Y.
