# Kconfig.nrf5 - nRF5 entropy generator driver configuration
#
# Copyright (c) 2018 Nordic Semiconductor ASA
# Copyright (c) 2017 Exati Tecnologia Ltda.
#
# SPDX-License-Identifier: Apache-2.0

menuconfig ENTROPY_NRF5_RNG
	bool "nRF5 RNG driver"
	depends on ENTROPY_GENERATOR
	depends on SOC_COMPATIBLE_NRF
	select ENTROPY_HAS_DRIVER
	help
	  This option enables the RNG peripheral, which is a random number
	  generator, based on internal thermal noise, that provides a
	  random 8-bit value to the host when read.

if ENTROPY_NRF5_RNG

config ENTROPY_NRF5_BIAS_CORRECTION
	bool "Enable bias correction (uniform distribution)"
	depends on ENTROPY_NRF5_RNG
	help
	  This option enables the RNG bias correction, which guarantees a
	  uniform distribution of 0 and 1. When this option is enabled, the time
	  to generate a byte cannot be guaranteed.

config ENTROPY_NRF5_THR_POOL_SIZE
	int "Thread-mode random number pool size"
	range ENTROPY_NRF5_THR_THRESHOLD 256
	default 8
	help
	  Buffer length in bytes used to store entropy bytes generated by the
	  hardware to make them ready for thread mode consumers.
	  Please note, that size of the pool must be a power of 2.

config ENTROPY_NRF5_THR_THRESHOLD
	int "Thread-mode random number pool low-water threshold"
	range 4 255
	help
	  Low water-mark threshold in bytes to trigger entropy generation for
	  thread mode consumers. As soon as the number of available bytes in the
	  buffer goes below this number hardware entropy generation will be
	  started.

config ENTROPY_NRF5_ISR_POOL_SIZE
	int "ISR-mode random number pool size"
	range ENTROPY_NRF5_ISR_THRESHOLD 256
	default 16
	help
	  Buffer length in bytes used to store entropy bytes generated by the
	  hardware to make them ready for ISR consumers.
	  Please note, that size of the pool must be a power of 2.

config ENTROPY_NRF5_ISR_THRESHOLD
	int "ISR-mode random number pool low-water threshold"
	range 12 255
	help
	  Low water-mark threshold in bytes to trigger entropy generation for
	  ISR consumers. As soon as the number of available bytes in the
	  buffer goes below this number hardware entropy generation will be
	  started.


config ENTROPY_NRF5_PRI
	int "RNG interrupt priority"
	depends on ENTROPY_NRF5_RNG
	range 0 2 if SOC_SERIES_NRF51X
	range 0 5 if SOC_COMPATIBLE_NRF52X
	default 2 if SOC_SERIES_NRF51X
	default 5 if SOC_COMPATIBLE_NRF52X
	help
	  nRF5X RNG IRQ priority.

endif #ENTROPY_NRF5_RNG
