# 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
	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
	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_HISI_V2
	tristate "HiSilicon True Random Number Generator V2 support"
	depends on HW_RANDOM && ARM64 && ACPI
	default HW_RANDOM
	help
	  This driver provides kernel-side support for the True Random Number
	  Generator V2 hardware found on HiSilicon Hi1620 SoC.

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

	  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
	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.

endif # HW_RANDOM

config UML_RANDOM
	depends on UML
	tristate "Hardware random number generator"
	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 standard hardware random number
	  generator, major 10, minor 183, and the canonical device name is
	  /dev/hwrng.
	  The way to make use of this is to install the rng-tools package
	  (check your distro, or download from
	  http://sourceforge.net/projects/gkernel/).  rngd periodically reads
	  /dev/hwrng and injects the entropy into /dev/random.
