From 97e4c0cbadd1f1c78407df56754eba031d142685 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrzej=20G=C5=82=C4=85bek?= Date: Fri, 3 Apr 2020 13:48:00 +0000 Subject: [PATCH] drivers: entropy_nrf5: Use device name and IRQ priority from DTS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of using Kconfig options for setting the device name and IRQ priority for the entropy_nrf5 driver, get these settings from the rng node defined in DTS for a given SoC. Provide also fixups for CONFIG_ENTROPY_NAME, until applications using entropy drivers are converted to use DTS as well. Signed-off-by: Andrzej Głąbek --- boards/posix/nrf52_bsim/dts_fixup.h | 8 ++++++++ drivers/entropy/Kconfig.nrf5 | 10 +--------- drivers/entropy/entropy_nrf5.c | 20 ++++++++++++-------- soc/arm/nordic_nrf/nrf51/dts_fixup.h | 4 ++++ soc/arm/nordic_nrf/nrf52/dts_fixup.h | 4 ++++ soc/arm/nordic_nrf/nrf53/dts_fixup.h | 4 ++++ 6 files changed, 33 insertions(+), 17 deletions(-) create mode 100644 boards/posix/nrf52_bsim/dts_fixup.h diff --git a/boards/posix/nrf52_bsim/dts_fixup.h b/boards/posix/nrf52_bsim/dts_fixup.h new file mode 100644 index 00000000000..b429540fa17 --- /dev/null +++ b/boards/posix/nrf52_bsim/dts_fixup.h @@ -0,0 +1,8 @@ +/* Copyright (c) 2020 Nordic Semiconductor ASA */ +/* SPDX-License-Identifier: Apache-2.0 */ + +/* Board level DTS fixup file */ + +#ifndef CONFIG_ENTROPY_NAME +#define CONFIG_ENTROPY_NAME DT_LABEL(DT_INST(0, nordic_nrf_rng)) +#endif diff --git a/drivers/entropy/Kconfig.nrf5 b/drivers/entropy/Kconfig.nrf5 index 9cfeeb548ee..5033b973119 100644 --- a/drivers/entropy/Kconfig.nrf5 +++ b/drivers/entropy/Kconfig.nrf5 @@ -16,6 +16,7 @@ menuconfig ENTROPY_NRF5_RNG depends on !ENTROPY_NRF_FORCE_ALT depends on HAS_HW_NRF_RNG select ENTROPY_HAS_DRIVER + select HAS_DTS_ENTROPY default y help This option enables the RNG peripheral, which is a random number @@ -67,13 +68,4 @@ config ENTROPY_NRF5_ISR_THRESHOLD buffer goes below this number hardware entropy generation will be started. -config ENTROPY_NRF5_PRI - int "RNG interrupt priority" - range 0 2 if SOC_SERIES_NRF51X - range 0 5 if SOC_COMPATIBLE_NRF52X || SOC_SERIES_NRF53X - default 2 if SOC_SERIES_NRF51X - default 5 if SOC_COMPATIBLE_NRF52X || SOC_SERIES_NRF53X - help - nRF5X RNG IRQ priority. - endif # ENTROPY_NRF5_RNG diff --git a/drivers/entropy/entropy_nrf5.c b/drivers/entropy/entropy_nrf5.c index d02909d2aca..ba84d0a08df 100644 --- a/drivers/entropy/entropy_nrf5.c +++ b/drivers/entropy/entropy_nrf5.c @@ -10,6 +10,11 @@ #include #include +#define DT_DRV_COMPAT nordic_nrf_rng + +#define IRQN DT_INST_IRQN(0) +#define IRQ_PRIO DT_INST_IRQ(0, priority) + /* * The nRF5 RNG HW has several characteristics that need to be taken * into account by the driver to achieve energy efficient generation @@ -266,8 +271,8 @@ static int entropy_nrf5_get_entropy_isr(struct device *dev, u8_t *buf, u16_t len int irq_enabled; key = irq_lock(); - irq_enabled = irq_is_enabled(RNG_IRQn); - irq_disable(RNG_IRQn); + irq_enabled = irq_is_enabled(IRQN); + irq_disable(IRQN); irq_unlock(key); nrf_rng_event_clear(NRF_RNG, NRF_RNG_EVENT_VALRDY); @@ -284,7 +289,7 @@ static int entropy_nrf5_get_entropy_isr(struct device *dev, u8_t *buf, u16_t len } byte = random_byte_get(); - NVIC_ClearPendingIRQ(RNG_IRQn); + NVIC_ClearPendingIRQ(IRQN); if (byte < 0) { continue; @@ -294,7 +299,7 @@ static int entropy_nrf5_get_entropy_isr(struct device *dev, u8_t *buf, u16_t len } while (len); if (irq_enabled) { - irq_enable(RNG_IRQn); + irq_enable(IRQN); } } @@ -308,7 +313,7 @@ static const struct entropy_driver_api entropy_nrf5_api_funcs = { .get_entropy_isr = entropy_nrf5_get_entropy_isr }; -DEVICE_AND_API_INIT(entropy_nrf5, CONFIG_ENTROPY_NAME, +DEVICE_AND_API_INIT(entropy_nrf5, DT_INST_LABEL(0), entropy_nrf5_init, &entropy_nrf5_data, NULL, PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEVICE, &entropy_nrf5_api_funcs); @@ -342,9 +347,8 @@ static int entropy_nrf5_init(struct device *device) nrf_rng_int_enable(NRF_RNG, NRF_RNG_INT_VALRDY_MASK); nrf_rng_task_trigger(NRF_RNG, NRF_RNG_TASK_START); - IRQ_CONNECT(RNG_IRQn, CONFIG_ENTROPY_NRF5_PRI, isr, - &entropy_nrf5_data, 0); - irq_enable(RNG_IRQn); + IRQ_CONNECT(IRQN, IRQ_PRIO, isr, &entropy_nrf5_data, 0); + irq_enable(IRQN); return 0; } diff --git a/soc/arm/nordic_nrf/nrf51/dts_fixup.h b/soc/arm/nordic_nrf/nrf51/dts_fixup.h index 067a34cdf5d..a020c639ba3 100644 --- a/soc/arm/nordic_nrf/nrf51/dts_fixup.h +++ b/soc/arm/nordic_nrf/nrf51/dts_fixup.h @@ -2,6 +2,10 @@ /* SoC level DTS fixup file */ +#ifndef CONFIG_ENTROPY_NAME +#define CONFIG_ENTROPY_NAME DT_LABEL(DT_INST(0, nordic_nrf_rng)) +#endif + #define DT_NUM_IRQ_PRIO_BITS DT_ARM_V6M_NVIC_E000E100_ARM_NUM_IRQ_PRIORITY_BITS #define DT_ADC_0_NAME DT_NORDIC_NRF_ADC_ADC_0_LABEL diff --git a/soc/arm/nordic_nrf/nrf52/dts_fixup.h b/soc/arm/nordic_nrf/nrf52/dts_fixup.h index 1303d076ab2..1df4206d123 100644 --- a/soc/arm/nordic_nrf/nrf52/dts_fixup.h +++ b/soc/arm/nordic_nrf/nrf52/dts_fixup.h @@ -2,6 +2,10 @@ /* SoC level DTS fixup file */ +#ifndef CONFIG_ENTROPY_NAME +#define CONFIG_ENTROPY_NAME DT_LABEL(DT_INST(0, nordic_nrf_rng)) +#endif + #define DT_NUM_IRQ_PRIO_BITS DT_ARM_V7M_NVIC_E000E100_ARM_NUM_IRQ_PRIORITY_BITS #define DT_ADC_0_NAME DT_NORDIC_NRF_SAADC_ADC_0_LABEL diff --git a/soc/arm/nordic_nrf/nrf53/dts_fixup.h b/soc/arm/nordic_nrf/nrf53/dts_fixup.h index 7370f6b33fc..d635ad29177 100644 --- a/soc/arm/nordic_nrf/nrf53/dts_fixup.h +++ b/soc/arm/nordic_nrf/nrf53/dts_fixup.h @@ -6,6 +6,10 @@ /* SoC level DTS fixup file */ +#ifndef CONFIG_ENTROPY_NAME +#define CONFIG_ENTROPY_NAME DT_LABEL(DT_INST(0, nordic_nrf_rng)) +#endif + #define DT_NUM_IRQ_PRIO_BITS \ DT_ARM_V8M_NVIC_E000E100_ARM_NUM_IRQ_PRIORITY_BITS