mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-09-02 04:34:59 +00:00
The old algorithm managing random number pools was inefficient and prone to race conditions. Moreover, its behaviour was not compatible with the API (provided buffers were filled from the end, leaving beggining of the buffer untouched if there was not enough random data). The new implementation is a bit faster and it is race-free as long as all callers of the entropy_get_entropy_isr() are executed in "run-to-completion" mode. Signed-off-by: Piotr Zięcik <piotr.ziecik@nordicsemi.no>
76 lines
2.4 KiB
Plaintext
76 lines
2.4 KiB
Plaintext
# 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
|