From 3577c22f1da6e0672058f3c069935278e50642af Mon Sep 17 00:00:00 2001 From: Bjarki Arge Andreasen Date: Thu, 6 Mar 2025 12:40:40 +0100 Subject: [PATCH 1/7] [nrf fromtree] drivers: spi: nrfx_spis: impl pm device runtime Implement PM device runtime in nrx spis device driver. Signed-off-by: Bjarki Arge Andreasen (cherry picked from commit 7e9301697d859733771211bc48229b1b6c8d700e) --- drivers/spi/spi_nrfx_spis.c | 71 ++++++++++++++++++++++++++++++------- 1 file changed, 59 insertions(+), 12 deletions(-) diff --git a/drivers/spi/spi_nrfx_spis.c b/drivers/spi/spi_nrfx_spis.c index 431d011433f5..50d37d0dc062 100644 --- a/drivers/spi/spi_nrfx_spis.c +++ b/drivers/spi/spi_nrfx_spis.c @@ -10,6 +10,8 @@ #include #include #include +#include +#include #include #include @@ -175,6 +177,8 @@ static int transceive(const struct device *dev, const struct spi_buf *rx_buf = rx_bufs ? rx_bufs->buffers : NULL; int error; + pm_device_runtime_get(dev); + spi_context_lock(&dev_data->ctx, asynchronous, cb, userdata, spi_cfg); error = configure(dev, spi_cfg); @@ -282,7 +286,49 @@ static void event_handler(const nrfx_spis_evt_t *p_event, void *p_context) if (p_event->evt_type == NRFX_SPIS_XFER_DONE) { spi_context_complete(&dev_data->ctx, dev_data->dev, p_event->rx_amount); + + pm_device_runtime_put(dev_data->dev); + } +} + +static void spi_nrfx_suspend(const struct device *dev) +{ + const struct spi_nrfx_config *dev_config = dev->config; + + if (dev_config->wake_gpio.port == NULL) { + nrf_spis_disable(dev_config->spis.p_reg); + } + + (void)pinctrl_apply_state(dev_config->pcfg, PINCTRL_STATE_SLEEP); +} + +static void spi_nrfx_resume(const struct device *dev) +{ + const struct spi_nrfx_config *dev_config = dev->config; + + (void)pinctrl_apply_state(dev_config->pcfg, PINCTRL_STATE_DEFAULT); + + if (dev_config->wake_gpio.port == NULL) { + nrf_spis_enable(dev_config->spis.p_reg); + } +} + +static int spi_nrfx_pm_action(const struct device *dev, enum pm_device_action action) +{ + switch (action) { + case PM_DEVICE_ACTION_SUSPEND: + spi_nrfx_suspend(dev); + return 0; + + case PM_DEVICE_ACTION_RESUME: + spi_nrfx_resume(dev); + return 0; + + default: + break; } + + return -ENOTSUP; } static int spi_nrfx_init(const struct device *dev) @@ -308,6 +354,16 @@ static int spi_nrfx_init(const struct device *dev) return -EBUSY; } + /* When the WAKE line is used, the SPIS peripheral is enabled + * only after the master signals that it wants to perform a + * transfer and it is disabled right after the transfer is done. + * Waiting for the WAKE line to go high, what can be done using + * the GPIO PORT event, instead of just waiting for the transfer + * with the SPIS peripheral enabled, significantly reduces idle + * power consumption. + */ + nrf_spis_disable(dev_config->spis.p_reg); + if (dev_config->wake_gpio.port) { if (!gpio_is_ready_dt(&dev_config->wake_gpio)) { return -ENODEV; @@ -332,21 +388,11 @@ static int spi_nrfx_init(const struct device *dev) if (err < 0) { return err; } - - /* When the WAKE line is used, the SPIS peripheral is enabled - * only after the master signals that it wants to perform a - * transfer and it is disabled right after the transfer is done. - * Waiting for the WAKE line to go high, what can be done using - * the GPIO PORT event, instead of just waiting for the transfer - * with the SPIS peripheral enabled, significantly reduces idle - * power consumption. - */ - nrf_spis_disable(dev_config->spis.p_reg); } spi_context_unlock_unconditionally(&dev_data->ctx); - return 0; + return pm_device_driver_init(dev, spi_nrfx_pm_action); } /* @@ -394,9 +440,10 @@ static int spi_nrfx_init(const struct device *dev) BUILD_ASSERT(!DT_NODE_HAS_PROP(SPIS(idx), wake_gpios) || \ !(DT_GPIO_FLAGS(SPIS(idx), wake_gpios) & GPIO_ACTIVE_LOW),\ "WAKE line must be configured as active high"); \ + PM_DEVICE_DT_DEFINE(SPIS(idx), spi_nrfx_pm_action, 1); \ SPI_DEVICE_DT_DEFINE(SPIS(idx), \ spi_nrfx_init, \ - NULL, \ + PM_DEVICE_DT_GET(SPIS(idx)), \ &spi_##idx##_data, \ &spi_##idx##z_config, \ POST_KERNEL, \ From 2d0acdad69bf77eff23de9d072c5938aa4d97f4f Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Fri, 21 Feb 2025 17:18:55 +0100 Subject: [PATCH 2/7] [nrf fromtree] scripts: kconfig: introduce dt_nodelabel_exists Add a new function to check if a nodelabel exists in devicetree. Signed-off-by: Gerard Marull-Paretas (cherry picked from commit b99ae6c7d9af9246c2421b5bc59bc882f9203d37) --- doc/build/kconfig/preprocessor-functions.rst | 1 + scripts/kconfig/kconfigfunctions.py | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/doc/build/kconfig/preprocessor-functions.rst b/doc/build/kconfig/preprocessor-functions.rst index e3cd282f9250..9de5110bfdbc 100644 --- a/doc/build/kconfig/preprocessor-functions.rst +++ b/doc/build/kconfig/preprocessor-functions.rst @@ -65,6 +65,7 @@ while the ``*_hex`` version returns a hexadecimal value starting with ``0x``. $(dt_nodelabel_bool_prop,,) $(dt_nodelabel_enabled,) $(dt_nodelabel_enabled_with_compat,,) + $(dt_nodelabel_exists,) $(dt_nodelabel_has_compat,,) $(dt_nodelabel_has_prop,,) $(dt_nodelabel_path,) diff --git a/scripts/kconfig/kconfigfunctions.py b/scripts/kconfig/kconfigfunctions.py index 81411a9d7a1c..04dab9ca2e54 100644 --- a/scripts/kconfig/kconfigfunctions.py +++ b/scripts/kconfig/kconfigfunctions.py @@ -149,6 +149,18 @@ def dt_node_enabled(kconf, name, node): return "y" if node and node.status == "okay" else "n" +def dt_nodelabel_exists(kconf, _, label): + """ + This function returns "y" if a nodelabel exists and "n" otherwise. + """ + if doc_mode or edt is None: + return "n" + + node = edt.label2node.get(label) + + return "y" if node else "n" + + def dt_nodelabel_enabled(kconf, _, label): """ This function is like dt_node_enabled(), but the 'label' argument @@ -1030,6 +1042,7 @@ def inc_dec(kconf, name, *args): "dt_chosen_has_compat": (dt_chosen_has_compat, 2, 2), "dt_path_enabled": (dt_node_enabled, 1, 1), "dt_alias_enabled": (dt_node_enabled, 1, 1), + "dt_nodelabel_exists": (dt_nodelabel_exists, 1, 1), "dt_nodelabel_enabled": (dt_nodelabel_enabled, 1, 1), "dt_nodelabel_enabled_with_compat": (dt_nodelabel_enabled_with_compat, 2, 2), "dt_chosen_reg_addr_int": (dt_chosen_reg, 1, 3), From bcdefb7ba83a63e7eeeff3367d88a1a92ce07b62 Mon Sep 17 00:00:00 2001 From: Gerard Marull-Paretas Date: Fri, 21 Feb 2025 17:19:33 +0100 Subject: [PATCH 3/7] [nrf fromtree] modules: hal_nordic: nrfx: use dt_nodelabel_exists As of today, nrfx components are selectable depending if devicetree has a certain compatible or not, and in case of IP that can operate in multiple modes, nodelabel+compatible. An example of the later is: ``` config NRFX_SPI0 bool "SPI0 driver instance" depends on $(dt_nodelabel_has_compat,spi0,$(DT_COMPAT_NORDIC_NRF_SPI)) select NRFX_SPI config NRFX_SPIM0 bool "SPIM0 driver instance" depends on $(dt_nodelabel_has_compat,spi0,$(DT_COMPAT_NORDIC_NRF_SPIM)) select NRFX_SPIM config NRFX_SPIS0 bool "SPIS0 driver instance" depends on $(dt_nodelabel_has_compat,spi0,$(DT_COMPAT_NORDIC_NRF_SPIS)) select NRFX_SPIS ``` These symbols are later selected by e.g. SPI driver if `spi0` node is enabled. While this works in the Zephyr context, it can be a problem in applications using nrfx directly in the application layer, unless they tweak devicetree. For example, if devicetree `spi0` node defaults to `compatible = "nordic,nrf-spim"`, NRFX_SPI0 or NRFX_SPIS0 won't be selectable, but an application using nrfx directly doesn't really care about what is defined in devicetree as it is effectively bypassing it. It just wants to select e.g. `CONFIG_NRFX_SPI0=y` and forget about the rest. This patch fixes this problem by just checking for the existence of certain nodelabels. Signed-off-by: Gerard Marull-Paretas (cherry picked from commit f23b4fdb2d754ecb6bb301720a170378c3067862) --- modules/hal_nordic/nrfx/Kconfig | 429 ++++++++++++++++---------------- 1 file changed, 213 insertions(+), 216 deletions(-) diff --git a/modules/hal_nordic/nrfx/Kconfig b/modules/hal_nordic/nrfx/Kconfig index eb79e1e5464c..d510d1111ac3 100644 --- a/modules/hal_nordic/nrfx/Kconfig +++ b/modules/hal_nordic/nrfx/Kconfig @@ -11,11 +11,11 @@ rsource "Kconfig.logging" config NRFX_ADC bool "ADC driver" - depends on $(dt_has_compat,$(DT_COMPAT_NORDIC_NRF_ADC)) + depends on $(dt_nodelabel_exists,adc) && SOC_SERIES_NRF51X config NRFX_CLOCK bool "CLOCK driver" - depends on $(dt_has_compat,$(DT_COMPAT_NORDIC_NRF_CLOCK)) + depends on $(dt_nodelabel_exists,clock) config NRFX_CLOCK_LFXO_TWO_STAGE_ENABLED bool "Two stage start sequence of the low frequency clock" @@ -23,7 +23,7 @@ config NRFX_CLOCK_LFXO_TWO_STAGE_ENABLED config NRFX_COMP bool "COMP driver" - depends on $(dt_has_compat,$(DT_COMPAT_NORDIC_NRF_COMP)) + depends on $(dt_nodelabel_exists,comp) config NRFX_DPPI bool @@ -31,85 +31,85 @@ config NRFX_DPPI config NRFX_DPPI0 bool "DPPI0 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,dppic0,$(DT_COMPAT_NORDIC_NRF_DPPIC)) + depends on $(dt_nodelabel_exists,dppic0) select NRFX_DPPI config NRFX_DPPI00 bool "DPPI00 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,dppic00,$(DT_COMPAT_NORDIC_NRF_DPPIC)) + depends on $(dt_nodelabel_exists,dppic00) select NRFX_DPPI config NRFX_DPPI10 bool "DPPI10 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,dppic10,$(DT_COMPAT_NORDIC_NRF_DPPIC)) + depends on $(dt_nodelabel_exists,dppic10) select NRFX_DPPI config NRFX_DPPI20 bool "DPPI20 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,dppic20,$(DT_COMPAT_NORDIC_NRF_DPPIC)) + depends on $(dt_nodelabel_exists,dppic20) select NRFX_DPPI config NRFX_DPPI30 bool "DPPI30 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,dppic30,$(DT_COMPAT_NORDIC_NRF_DPPIC)) + depends on $(dt_nodelabel_exists,dppic30) select NRFX_DPPI config NRFX_DPPI020 bool "DPPI020 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,dppic020,$(DT_COMPAT_NORDIC_NRF_DPPIC_LOCAL)) + depends on $(dt_nodelabel_exists,dppic020) select NRFX_DPPI config NRFX_DPPI120 bool "DPPI120 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,dppic120,$(DT_COMPAT_NORDIC_NRF_DPPIC_GLOBAL)) + depends on $(dt_nodelabel_exists,dppic120) select NRFX_DPPI config NRFX_DPPI130 bool "DPPI130 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,dppic130,$(DT_COMPAT_NORDIC_NRF_DPPIC_GLOBAL)) + depends on $(dt_nodelabel_exists,dppic130) select NRFX_DPPI config NRFX_DPPI131 bool "DPPI131 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,dppic131,$(DT_COMPAT_NORDIC_NRF_DPPIC_GLOBAL)) + depends on $(dt_nodelabel_exists,dppic131) select NRFX_DPPI config NRFX_DPPI132 bool "DPPI132 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,dppic132,$(DT_COMPAT_NORDIC_NRF_DPPIC_GLOBAL)) + depends on $(dt_nodelabel_exists,dppic132) select NRFX_DPPI config NRFX_DPPI133 bool "DPPI133 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,dppic133,$(DT_COMPAT_NORDIC_NRF_DPPIC_GLOBAL)) + depends on $(dt_nodelabel_exists,dppic133) select NRFX_DPPI config NRFX_DPPI134 bool "DPPI134 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,dppic134,$(DT_COMPAT_NORDIC_NRF_DPPIC_GLOBAL)) + depends on $(dt_nodelabel_exists,dppic134) select NRFX_DPPI config NRFX_DPPI135 bool "DPPI135 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,dppic135,$(DT_COMPAT_NORDIC_NRF_DPPIC_GLOBAL)) + depends on $(dt_nodelabel_exists,dppic135) select NRFX_DPPI config NRFX_DPPI136 bool "DPPI136 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,dppic136,$(DT_COMPAT_NORDIC_NRF_DPPIC_GLOBAL)) + depends on $(dt_nodelabel_exists,dppic136) select NRFX_DPPI config NRFX_EGU @@ -117,52 +117,52 @@ config NRFX_EGU config NRFX_EGU0 bool "EGU0 driver instance" - depends on $(dt_nodelabel_has_compat,egu0,$(DT_COMPAT_NORDIC_NRF_EGU)) + depends on $(dt_nodelabel_exists,egu0) select NRFX_EGU config NRFX_EGU1 bool "EGU1 driver instance" - depends on $(dt_nodelabel_has_compat,egu1,$(DT_COMPAT_NORDIC_NRF_EGU)) + depends on $(dt_nodelabel_exists,egu1) select NRFX_EGU config NRFX_EGU2 bool "EGU2 driver instance" - depends on $(dt_nodelabel_has_compat,egu2,$(DT_COMPAT_NORDIC_NRF_EGU)) + depends on $(dt_nodelabel_exists,egu2) select NRFX_EGU config NRFX_EGU3 bool "EGU3 driver instance" - depends on $(dt_nodelabel_has_compat,egu3,$(DT_COMPAT_NORDIC_NRF_EGU)) + depends on $(dt_nodelabel_exists,egu3) select NRFX_EGU config NRFX_EGU4 bool "EGU4 driver instance" - depends on $(dt_nodelabel_has_compat,egu4,$(DT_COMPAT_NORDIC_NRF_EGU)) + depends on $(dt_nodelabel_exists,egu4) select NRFX_EGU config NRFX_EGU5 bool "EGU5 driver instance" - depends on $(dt_nodelabel_has_compat,egu5,$(DT_COMPAT_NORDIC_NRF_EGU)) + depends on $(dt_nodelabel_exists,egu5) select NRFX_EGU config NRFX_EGU10 bool "EGU10 driver instance" - depends on $(dt_nodelabel_has_compat,egu10,$(DT_COMPAT_NORDIC_NRF_EGU)) + depends on $(dt_nodelabel_exists,egu10) select NRFX_EGU config NRFX_EGU20 bool "EGU20 driver instance" - depends on $(dt_nodelabel_has_compat,egu20,$(DT_COMPAT_NORDIC_NRF_EGU)) + depends on $(dt_nodelabel_exists,egu20) select NRFX_EGU config NRFX_EGU020 bool "EGU020 driver instance" - depends on $(dt_nodelabel_has_compat,egu020,$(DT_COMPAT_NORDIC_NRF_EGU)) + depends on $(dt_nodelabel_exists,egu020) select NRFX_EGU config NRFX_EGU130 bool "EGU130 driver instance" - depends on $(dt_nodelabel_has_compat,egu130,$(DT_COMPAT_NORDIC_NRF_EGU)) + depends on $(dt_nodelabel_exists,egu130) select NRFX_EGU config NRFX_GPIOTE @@ -170,32 +170,32 @@ config NRFX_GPIOTE config NRFX_GPIOTE0 bool "GPIOTE0 driver instance" - depends on $(dt_nodelabel_has_compat,gpiote0,$(DT_COMPAT_NORDIC_NRF_GPIOTE)) + depends on $(dt_nodelabel_exists,gpiote0) select NRFX_GPIOTE config NRFX_GPIOTE1 bool "GPIOTE1 driver instance" - depends on $(dt_nodelabel_has_compat,gpiote1,$(DT_COMPAT_NORDIC_NRF_GPIOTE)) + depends on $(dt_nodelabel_exists,gpiote1) select NRFX_GPIOTE config NRFX_GPIOTE20 bool "NRFX_GPIOTE20 driver instance" - depends on $(dt_nodelabel_has_compat,gpiote20,$(DT_COMPAT_NORDIC_NRF_GPIOTE)) + depends on $(dt_nodelabel_exists,gpiote20) select NRFX_GPIOTE config NRFX_GPIOTE30 bool "NRFX_GPIOTE30 driver instance" - depends on $(dt_nodelabel_has_compat,gpiote30,$(DT_COMPAT_NORDIC_NRF_GPIOTE)) + depends on $(dt_nodelabel_exists,gpiote30) select NRFX_GPIOTE config NRFX_GPIOTE130 bool "NRFX_GPIOTE130 driver instance" - depends on $(dt_nodelabel_has_compat,gpiote130,$(DT_COMPAT_NORDIC_NRF_GPIOTE)) + depends on $(dt_nodelabel_exists,gpiote130) select NRFX_GPIOTE config NRFX_GPIOTE131 bool "NRFX_GPIOTE131 driver instance" - depends on $(dt_nodelabel_has_compat,gpiote131,$(DT_COMPAT_NORDIC_NRF_GPIOTE)) + depends on $(dt_nodelabel_exists,gpiote131) select NRFX_GPIOTE config NRFX_GPIOTE_NUM_OF_EVT_HANDLERS @@ -214,71 +214,68 @@ config NRFX_GPPI config NRFX_GRTC bool "GRTC driver" - depends on $(dt_has_compat,$(DT_COMPAT_NORDIC_NRF_GRTC)) + depends on $(dt_nodelabel_exists,grtc) config NRFX_I2S bool config NRFX_I2S0 bool "I2S0 driver instance" - depends on $(dt_nodelabel_has_compat,i2s0,$(DT_COMPAT_NORDIC_NRF_I2S)) + depends on $(dt_nodelabel_exists,i2s0) select NRFX_I2S config NRFX_I2S20 bool "I2S20 driver instance" - depends on $(dt_nodelabel_has_compat,i2s20,$(DT_COMPAT_NORDIC_NRF_I2S)) + depends on $(dt_nodelabel_exists,i2s20) select NRFX_I2S config NRFX_IPC bool "IPC driver" - depends on $(dt_has_compat,$(DT_COMPAT_NORDIC_NRF_IPC)) + depends on $(dt_nodelabel_exists,ipc) config NRFX_LPCOMP bool "LPCOMP driver" - depends on $(dt_has_compat,$(DT_COMPAT_NORDIC_NRF_LPCOMP)) + depends on $(dt_nodelabel_exists,comp) && !SOC_NRF52810 && !SOC_NRF52811 && !SOC_NRF52820 config NRFX_NFCT bool "NFCT driver" - depends on $(dt_has_compat,$(DT_COMPAT_NORDIC_NRF_NFCT)) + depends on $(dt_nodelabel_exists,nfct) select NRFX_TIMER4 if SOC_SERIES_NRF52X select NRFX_TIMER2 if SOC_SERIES_NRF53X config NRFX_NVMC bool "NVMC driver" - depends on $(dt_has_compat,$(DT_COMPAT_NORDIC_NRF51_FLASH_CONTROLLER)) \ - || $(dt_has_compat,$(DT_COMPAT_NORDIC_NRF52_FLASH_CONTROLLER)) \ - || $(dt_has_compat,$(DT_COMPAT_NORDIC_NRF53_FLASH_CONTROLLER)) \ - || $(dt_has_compat,$(DT_COMPAT_NORDIC_NRF91_FLASH_CONTROLLER)) + depends on $(dt_nodelabel_exists,flash_controller) config NRFX_PDM bool config NRFX_PDM0 bool "PDM0 driver instance" - depends on $(dt_nodelabel_has_compat,pdm0,$(DT_COMPAT_NORDIC_NRF_PDM)) + depends on $(dt_nodelabel_exists,pdm0) select NRFX_PDM config NRFX_PDM20 bool "PDM20 driver instance" - depends on $(dt_nodelabel_has_compat,pdm20,$(DT_COMPAT_NORDIC_NRF_PDM)) + depends on $(dt_nodelabel_exists,pdm20) select NRFX_PDM config NRFX_PDM21 bool "PDM21 driver instance" - depends on $(dt_nodelabel_has_compat,pdm21,$(DT_COMPAT_NORDIC_NRF_PDM)) + depends on $(dt_nodelabel_exists,pdm21) select NRFX_PDM config NRFX_POWER bool "POWER driver" - depends on $(dt_has_compat,$(DT_COMPAT_NORDIC_NRF_POWER)) + depends on $(dt_nodelabel_exists,power) # On SoCs featuring the USBREG peripheral, the POWER driver uses # internally the USBREG driver. - select NRFX_USBREG if $(dt_has_compat,$(DT_COMPAT_NORDIC_NRF_USBREG)) + select NRFX_USBREG if $(dt_nodelabel_exists,usbreg) config NRFX_PPI bool "PPI allocator" default y if NRFX_GPPI - depends on $(dt_has_compat,$(DT_COMPAT_NORDIC_NRF_PPI)) + depends on $(dt_nodelabel_exists,ppi) config NRFX_PPIB bool @@ -286,49 +283,49 @@ config NRFX_PPIB config NRFX_PPIB00 bool "PPIB00 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,ppib00,$(DT_COMPAT_NORDIC_NRF_PPIB)) + depends on $(dt_nodelabel_exists,ppib00) select NRFX_PPIB config NRFX_PPIB01 bool "PPIB01 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,ppib01,$(DT_COMPAT_NORDIC_NRF_PPIB)) + depends on $(dt_nodelabel_exists,ppib01) select NRFX_PPIB config NRFX_PPIB10 bool "PPIB10 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,ppib10,$(DT_COMPAT_NORDIC_NRF_PPIB)) + depends on $(dt_nodelabel_exists,ppib10) select NRFX_PPIB config NRFX_PPIB11 bool "PPIB11 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,ppib11,$(DT_COMPAT_NORDIC_NRF_PPIB)) + depends on $(dt_nodelabel_exists,ppib11) select NRFX_PPIB config NRFX_PPIB20 bool "PPIB20 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,ppib20,$(DT_COMPAT_NORDIC_NRF_PPIB)) + depends on $(dt_nodelabel_exists,ppib20) select NRFX_PPIB config NRFX_PPIB21 bool "PPIB21 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,ppib21,$(DT_COMPAT_NORDIC_NRF_PPIB)) + depends on $(dt_nodelabel_exists,ppib21) select NRFX_PPIB config NRFX_PPIB22 bool "PPIB22 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,ppib22,$(DT_COMPAT_NORDIC_NRF_PPIB)) + depends on $(dt_nodelabel_exists,ppib22) select NRFX_PPIB config NRFX_PPIB30 bool "PPIB30 driver instance" default y if NRFX_GPPI - depends on $(dt_nodelabel_has_compat,ppib30,$(DT_COMPAT_NORDIC_NRF_PPIB)) + depends on $(dt_nodelabel_exists,ppib30) select NRFX_PPIB config NRFX_PWM @@ -336,62 +333,62 @@ config NRFX_PWM config NRFX_PWM0 bool "PWM0 driver instance" - depends on $(dt_nodelabel_has_compat,pwm0,$(DT_COMPAT_NORDIC_NRF_PWM)) + depends on $(dt_nodelabel_exists,pwm0) select NRFX_PWM config NRFX_PWM1 bool "PWM1 driver instance" - depends on $(dt_nodelabel_has_compat,pwm1,$(DT_COMPAT_NORDIC_NRF_PWM)) + depends on $(dt_nodelabel_exists,pwm1) select NRFX_PWM config NRFX_PWM2 bool "PWM2 driver instance" - depends on $(dt_nodelabel_has_compat,pwm2,$(DT_COMPAT_NORDIC_NRF_PWM)) + depends on $(dt_nodelabel_exists,pwm2) select NRFX_PWM config NRFX_PWM3 bool "PWM3 driver instance" - depends on $(dt_nodelabel_has_compat,pwm3,$(DT_COMPAT_NORDIC_NRF_PWM)) + depends on $(dt_nodelabel_exists,pwm3) select NRFX_PWM config NRFX_PWM20 bool "PWM20 driver instance" - depends on $(dt_nodelabel_has_compat,pwm20,$(DT_COMPAT_NORDIC_NRF_PWM)) + depends on $(dt_nodelabel_exists,pwm20) select NRFX_PWM config NRFX_PWM21 bool "PWM21 driver instance" - depends on $(dt_nodelabel_has_compat,pwm21,$(DT_COMPAT_NORDIC_NRF_PWM)) + depends on $(dt_nodelabel_exists,pwm21) select NRFX_PWM config NRFX_PWM22 bool "PWM22 driver instance" - depends on $(dt_nodelabel_has_compat,pwm22,$(DT_COMPAT_NORDIC_NRF_PWM)) + depends on $(dt_nodelabel_exists,pwm22) select NRFX_PWM config NRFX_PWM120 bool "PWM120 driver instance" - depends on $(dt_nodelabel_has_compat,pwm120,$(DT_COMPAT_NORDIC_NRF_PWM)) + depends on $(dt_nodelabel_exists,pwm120) select NRFX_PWM config NRFX_PWM130 bool "PWM130 driver instance" - depends on $(dt_nodelabel_has_compat,pwm130,$(DT_COMPAT_NORDIC_NRF_PWM)) + depends on $(dt_nodelabel_exists,pwm130) select NRFX_PWM config NRFX_PWM131 bool "PWM131 driver instance" - depends on $(dt_nodelabel_has_compat,pwm131,$(DT_COMPAT_NORDIC_NRF_PWM)) + depends on $(dt_nodelabel_exists,pwm131) select NRFX_PWM config NRFX_PWM132 bool "PWM132 driver instance" - depends on $(dt_nodelabel_has_compat,pwm132,$(DT_COMPAT_NORDIC_NRF_PWM)) + depends on $(dt_nodelabel_exists,pwm132) select NRFX_PWM config NRFX_PWM133 bool "PWM133 driver instance" - depends on $(dt_nodelabel_has_compat,pwm133,$(DT_COMPAT_NORDIC_NRF_PWM)) + depends on $(dt_nodelabel_exists,pwm133) select NRFX_PWM config NRFX_QDEC @@ -399,94 +396,94 @@ config NRFX_QDEC config NRFX_QDEC0 bool "QDEC0 driver instance" - depends on $(dt_nodelabel_has_compat,qdec0,$(DT_COMPAT_NORDIC_NRF_QDEC)) + depends on $(dt_nodelabel_exists,qdec0) select NRFX_QDEC config NRFX_QDEC1 bool "QDEC1 driver instance" - depends on $(dt_nodelabel_has_compat,qdec1,$(DT_COMPAT_NORDIC_NRF_QDEC)) + depends on $(dt_nodelabel_exists,qdec1) select NRFX_QDEC config NRFX_QDEC20 bool "QDEC20 driver instance" - depends on $(dt_nodelabel_has_compat,qdec20,$(DT_COMPAT_NORDIC_NRF_QDEC)) + depends on $(dt_nodelabel_exists,qdec20) select NRFX_QDEC config NRFX_QDEC21 bool "QDEC21 driver instance" - depends on $(dt_nodelabel_has_compat,qdec21,$(DT_COMPAT_NORDIC_NRF_QDEC)) + depends on $(dt_nodelabel_exists,qdec21) select NRFX_QDEC config NRFX_QDEC130 bool "QDEC130 driver instance" - depends on $(dt_nodelabel_has_compat,qdec130,$(DT_COMPAT_NORDIC_NRF_QDEC)) + depends on $(dt_nodelabel_exists,qdec130) select NRFX_QDEC config NRFX_QDEC131 bool "QDEC131 driver instance" - depends on $(dt_nodelabel_has_compat,qdec131,$(DT_COMPAT_NORDIC_NRF_QDEC)) + depends on $(dt_nodelabel_exists,qdec131) select NRFX_QDEC config NRFX_QSPI bool "QSPI driver" - depends on $(dt_has_compat,$(DT_COMPAT_NORDIC_NRF_QSPI)) + depends on $(dt_nodelabel_exists,qspi) config NRFX_RNG bool "RNG driver" - depends on $(dt_has_compat,$(DT_COMPAT_NORDIC_NRF_RNG)) + depends on $(dt_nodelabel_exists,rng) config NRFX_RRAMC bool "RRAMC driver" - depends on $(dt_has_compat,$(DT_COMPAT_NORDIC_RRAM_CONTROLLER)) + depends on $(dt_nodelabel_exists,rram_controller) config NRFX_RTC bool config NRFX_RTC0 bool "RTC0 driver instance" - depends on $(dt_nodelabel_has_compat,rtc0,$(DT_COMPAT_NORDIC_NRF_RTC)) + depends on $(dt_nodelabel_exists,rtc0) select NRFX_RTC config NRFX_RTC1 bool "RTC1 driver instance" - depends on $(dt_nodelabel_has_compat,rtc1,$(DT_COMPAT_NORDIC_NRF_RTC)) + depends on $(dt_nodelabel_exists,rtc1) select NRFX_RTC config NRFX_RTC2 bool "RTC2 driver instance" - depends on $(dt_nodelabel_has_compat,rtc2,$(DT_COMPAT_NORDIC_NRF_RTC)) + depends on $(dt_nodelabel_exists,rtc2) select NRFX_RTC config NRFX_RTC130 bool "RTC130 driver instance" - depends on $(dt_nodelabel_has_compat,rtc130,$(DT_COMPAT_NORDIC_NRF_RTC)) + depends on $(dt_nodelabel_exists,rtc130) select NRFX_RTC config NRFX_RTC131 bool "RTC131 driver instance" - depends on $(dt_nodelabel_has_compat,rtc131,$(DT_COMPAT_NORDIC_NRF_RTC)) + depends on $(dt_nodelabel_exists,rtc131) select NRFX_RTC config NRFX_SAADC bool "SAADC driver" - depends on $(dt_has_compat,$(DT_COMPAT_NORDIC_NRF_SAADC)) + depends on $(dt_nodelabel_exists,adc) && !SOC_SERIES_NRF51X config NRFX_SPI bool config NRFX_SPI0 bool "SPI0 driver instance" - depends on $(dt_nodelabel_has_compat,spi0,$(DT_COMPAT_NORDIC_NRF_SPI)) + depends on $(dt_nodelabel_exists,spi0) && (SOC_SERIES_NRF51X || SOC_SERIES_NRF52X) select NRFX_SPI config NRFX_SPI1 bool "SPI1 driver instance" - depends on $(dt_nodelabel_has_compat,spi1,$(DT_COMPAT_NORDIC_NRF_SPI)) + depends on $(dt_nodelabel_exists,spi1) && (SOC_SERIES_NRF51X || SOC_SERIES_NRF52X) select NRFX_SPI config NRFX_SPI2 bool "SPI2 driver instance" - depends on $(dt_nodelabel_has_compat,spi2,$(DT_COMPAT_NORDIC_NRF_SPI)) + depends on $(dt_nodelabel_exists,spi2) && SOC_SERIES_NRF52X select NRFX_SPI config NRFX_SPIM @@ -494,102 +491,102 @@ config NRFX_SPIM config NRFX_SPIM0 bool "SPIM0 driver instance" - depends on $(dt_nodelabel_has_compat,spi0,$(DT_COMPAT_NORDIC_NRF_SPIM)) + depends on $(dt_nodelabel_exists,spi0) && !SOC_SERIES_NRF51X select NRFX_SPIM config NRFX_SPIM1 bool "SPIM1 driver instance" - depends on $(dt_nodelabel_has_compat,spi1,$(DT_COMPAT_NORDIC_NRF_SPIM)) + depends on $(dt_nodelabel_exists,spi1) && !SOC_SERIES_NRF51X select NRFX_SPIM config NRFX_SPIM2 bool "SPIM2 driver instance" - depends on $(dt_nodelabel_has_compat,spi2,$(DT_COMPAT_NORDIC_NRF_SPIM)) + depends on $(dt_nodelabel_exists,spi2) select NRFX_SPIM config NRFX_SPIM3 bool "SPIM3 driver instance" - depends on $(dt_nodelabel_has_compat,spi3,$(DT_COMPAT_NORDIC_NRF_SPIM)) + depends on $(dt_nodelabel_exists,spi3) select NRFX_SPIM config NRFX_SPIM4 bool "SPIM4 driver instance" - depends on $(dt_nodelabel_has_compat,spi4,$(DT_COMPAT_NORDIC_NRF_SPIM)) + depends on $(dt_nodelabel_exists,spi4) select NRFX_SPIM config NRFX_SPIM00 bool "SPIM00 driver instance" - depends on $(dt_nodelabel_has_compat,spi00,$(DT_COMPAT_NORDIC_NRF_SPIM)) + depends on $(dt_nodelabel_exists,spi00) select NRFX_SPIM config NRFX_SPIM20 bool "SPIM20 driver instance" - depends on $(dt_nodelabel_has_compat,spi20,$(DT_COMPAT_NORDIC_NRF_SPIM)) + depends on $(dt_nodelabel_exists,spi20) select NRFX_SPIM config NRFX_SPIM21 bool "SPIM21 driver instance" - depends on $(dt_nodelabel_has_compat,spi21,$(DT_COMPAT_NORDIC_NRF_SPIM)) + depends on $(dt_nodelabel_exists,spi21) select NRFX_SPIM config NRFX_SPIM22 bool "SPIM22 driver instance" - depends on $(dt_nodelabel_has_compat,spi22,$(DT_COMPAT_NORDIC_NRF_SPIM)) + depends on $(dt_nodelabel_exists,spi22) select NRFX_SPIM config NRFX_SPIM30 bool "SPIM30 driver instance" - depends on $(dt_nodelabel_has_compat,spi30,$(DT_COMPAT_NORDIC_NRF_SPIM)) + depends on $(dt_nodelabel_exists,spi30) select NRFX_SPIM config NRFX_SPIM120 bool "SPIM120 driver instance" - depends on $(dt_nodelabel_has_compat,spi120,$(DT_COMPAT_NORDIC_NRF_SPIM)) + depends on $(dt_nodelabel_exists,spi120) select NRFX_SPIM config NRFX_SPIM121 bool "SPIM121 driver instance" - depends on $(dt_nodelabel_has_compat,spi121,$(DT_COMPAT_NORDIC_NRF_SPIM)) + depends on $(dt_nodelabel_exists,spi121) select NRFX_SPIM config NRFX_SPIM130 bool "SPIM130 driver instance" - depends on $(dt_nodelabel_has_compat,spi130,$(DT_COMPAT_NORDIC_NRF_SPIM)) + depends on $(dt_nodelabel_exists,spi130) select NRFX_SPIM config NRFX_SPIM131 bool "SPIM131 driver instance" - depends on $(dt_nodelabel_has_compat,spi131,$(DT_COMPAT_NORDIC_NRF_SPIM)) + depends on $(dt_nodelabel_exists,spi131) select NRFX_SPIM config NRFX_SPIM132 bool "SPIM132 driver instance" - depends on $(dt_nodelabel_has_compat,spi132,$(DT_COMPAT_NORDIC_NRF_SPIM)) + depends on $(dt_nodelabel_exists,spi132) select NRFX_SPIM config NRFX_SPIM133 bool "SPIM133 driver instance" - depends on $(dt_nodelabel_has_compat,spi133,$(DT_COMPAT_NORDIC_NRF_SPIM)) + depends on $(dt_nodelabel_exists,spi133) select NRFX_SPIM config NRFX_SPIM134 bool "SPIM134 driver instance" - depends on $(dt_nodelabel_has_compat,spi134,$(DT_COMPAT_NORDIC_NRF_SPIM)) + depends on $(dt_nodelabel_exists,spi134) select NRFX_SPIM config NRFX_SPIM135 bool "SPIM135 driver instance" - depends on $(dt_nodelabel_has_compat,spi135,$(DT_COMPAT_NORDIC_NRF_SPIM)) + depends on $(dt_nodelabel_exists,spi135) select NRFX_SPIM config NRFX_SPIM136 bool "SPIM136 driver instance" - depends on $(dt_nodelabel_has_compat,spi136,$(DT_COMPAT_NORDIC_NRF_SPIM)) + depends on $(dt_nodelabel_exists,spi136) select NRFX_SPIM config NRFX_SPIM137 bool "SPIM137 driver instance" - depends on $(dt_nodelabel_has_compat,spi137,$(DT_COMPAT_NORDIC_NRF_SPIM)) + depends on $(dt_nodelabel_exists,spi137) select NRFX_SPIM config NRFX_SPIS @@ -597,92 +594,92 @@ config NRFX_SPIS config NRFX_SPIS0 bool "SPIS0 driver instance" - depends on $(dt_nodelabel_has_compat,spi0,$(DT_COMPAT_NORDIC_NRF_SPIS)) + depends on $(dt_nodelabel_exists,spi0) && !SOC_SERIES_NRF51X select NRFX_SPIS config NRFX_SPIS1 bool "SPIS1 driver instance" - depends on $(dt_nodelabel_has_compat,spi1,$(DT_COMPAT_NORDIC_NRF_SPIS)) + depends on $(dt_nodelabel_exists,spi1) select NRFX_SPIS config NRFX_SPIS2 bool "SPIS2 driver instance" - depends on $(dt_nodelabel_has_compat,spi2,$(DT_COMPAT_NORDIC_NRF_SPIS)) + depends on $(dt_nodelabel_exists,spi2) select NRFX_SPIS config NRFX_SPIS3 bool "SPIS3 driver instance" - depends on $(dt_nodelabel_has_compat,spi3,$(DT_COMPAT_NORDIC_NRF_SPIS)) + depends on $(dt_nodelabel_exists,spi3) select NRFX_SPIS config NRFX_SPIS00 bool "SPIS00 driver instance" - depends on $(dt_nodelabel_has_compat,spi00,$(DT_COMPAT_NORDIC_NRF_SPIS)) + depends on $(dt_nodelabel_exists,spi00) select NRFX_SPIS config NRFX_SPIS20 bool "SPIS20 driver instance" - depends on $(dt_nodelabel_has_compat,spi20,$(DT_COMPAT_NORDIC_NRF_SPIS)) + depends on $(dt_nodelabel_exists,spi20) select NRFX_SPIS config NRFX_SPIS21 bool "SPIS21 driver instance" - depends on $(dt_nodelabel_has_compat,spi21,$(DT_COMPAT_NORDIC_NRF_SPIS)) + depends on $(dt_nodelabel_exists,spi21) select NRFX_SPIS config NRFX_SPIS22 bool "SPIS22 driver instance" - depends on $(dt_nodelabel_has_compat,spi22,$(DT_COMPAT_NORDIC_NRF_SPIS)) + depends on $(dt_nodelabel_exists,spi22) select NRFX_SPIS config NRFX_SPIS30 bool "SPIS30 driver instance" - depends on $(dt_nodelabel_has_compat,spi30,$(DT_COMPAT_NORDIC_NRF_SPIS)) + depends on $(dt_nodelabel_exists,spi30) select NRFX_SPIS config NRFX_SPIS120 bool "SPIS120 driver instance" - depends on $(dt_nodelabel_has_compat,spi120,$(DT_COMPAT_NORDIC_NRF_SPIS)) + depends on $(dt_nodelabel_exists,spi120) select NRFX_SPIS config NRFX_SPIS130 bool "SPIS130 driver instance" - depends on $(dt_nodelabel_has_compat,spi130,$(DT_COMPAT_NORDIC_NRF_SPIS)) + depends on $(dt_nodelabel_exists,spi130) select NRFX_SPIS config NRFX_SPIS131 bool "SPIS131 driver instance" - depends on $(dt_nodelabel_has_compat,spi131,$(DT_COMPAT_NORDIC_NRF_SPIS)) + depends on $(dt_nodelabel_exists,spi131) select NRFX_SPIS config NRFX_SPIS132 bool "SPIS132 driver instance" - depends on $(dt_nodelabel_has_compat,spi132,$(DT_COMPAT_NORDIC_NRF_SPIS)) + depends on $(dt_nodelabel_exists,spi132) select NRFX_SPIS config NRFX_SPIS133 bool "SPIS133 driver instance" - depends on $(dt_nodelabel_has_compat,spi133,$(DT_COMPAT_NORDIC_NRF_SPIS)) + depends on $(dt_nodelabel_exists,spi133) select NRFX_SPIS config NRFX_SPIS134 bool "SPIS134 driver instance" - depends on $(dt_nodelabel_has_compat,spi134,$(DT_COMPAT_NORDIC_NRF_SPIS)) + depends on $(dt_nodelabel_exists,spi134) select NRFX_SPIS config NRFX_SPIS135 bool "SPIS135 driver instance" - depends on $(dt_nodelabel_has_compat,spi135,$(DT_COMPAT_NORDIC_NRF_SPIS)) + depends on $(dt_nodelabel_exists,spi135) select NRFX_SPIS config NRFX_SPIS136 bool "SPIS136 driver instance" - depends on $(dt_nodelabel_has_compat,spi136,$(DT_COMPAT_NORDIC_NRF_SPIS)) + depends on $(dt_nodelabel_exists,spi136) select NRFX_SPIS config NRFX_SPIS137 bool "SPIS137 driver instance" - depends on $(dt_nodelabel_has_compat,spi137,$(DT_COMPAT_NORDIC_NRF_SPIS)) + depends on $(dt_nodelabel_exists,spi137) select NRFX_SPIS config NRFX_SYSTICK @@ -691,7 +688,7 @@ config NRFX_SYSTICK config NRFX_TBM bool "TBM driver" - depends on $(dt_has_compat,$(DT_COMPAT_NORDIC_NRF_TBM)) + depends on $(dt_nodelabel_exists,tbm) config NRFX_TDM bool @@ -708,134 +705,134 @@ config NRFX_TDM131 config NRFX_TEMP bool "TEMP driver" - depends on $(dt_has_compat,$(DT_COMPAT_NORDIC_NRF_TEMP)) + depends on $(dt_nodelabel_exists,temp) config NRFX_TIMER bool config NRFX_TIMER0 bool "TIMER0 driver instance" - depends on $(dt_nodelabel_has_compat,timer0,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer0) select NRFX_TIMER config NRFX_TIMER1 bool "TIMER1 driver instance" - depends on $(dt_nodelabel_has_compat,timer1,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer1) select NRFX_TIMER config NRFX_TIMER2 bool "TIMER2 driver instance" - depends on $(dt_nodelabel_has_compat,timer2,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer2) select NRFX_TIMER config NRFX_TIMER3 bool "TIMER3 driver instance" - depends on $(dt_nodelabel_has_compat,timer3,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer3) select NRFX_TIMER config NRFX_TIMER4 bool "TIMER4 driver instance" - depends on $(dt_nodelabel_has_compat,timer4,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer4) select NRFX_TIMER config NRFX_TIMER00 bool "TIMER00 driver instance" - depends on $(dt_nodelabel_has_compat,timer00,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer00) select NRFX_TIMER config NRFX_TIMER10 bool "TIMER10 driver instance" - depends on $(dt_nodelabel_has_compat,timer10,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer10) select NRFX_TIMER config NRFX_TIMER20 bool "TIMER20 driver instance" - depends on $(dt_nodelabel_has_compat,timer20,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer20) select NRFX_TIMER config NRFX_TIMER21 bool "TIMER21 driver instance" - depends on $(dt_nodelabel_has_compat,timer21,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer21) select NRFX_TIMER config NRFX_TIMER22 bool "TIMER22 driver instance" - depends on $(dt_nodelabel_has_compat,timer22,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer22) select NRFX_TIMER config NRFX_TIMER23 bool "TIMER23 driver instance" - depends on $(dt_nodelabel_has_compat,timer23,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer23) select NRFX_TIMER config NRFX_TIMER24 bool "TIMER24 driver instance" - depends on $(dt_nodelabel_has_compat,timer24,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer24) select NRFX_TIMER config NRFX_TIMER020 bool "TIMER020 driver instance" - depends on $(dt_nodelabel_has_compat,timer020,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer020) select NRFX_TIMER config NRFX_TIMER021 bool "TIMER021 driver instance" - depends on $(dt_nodelabel_has_compat,timer021,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer021) select NRFX_TIMER config NRFX_TIMER022 bool "TIMER022 driver instance" - depends on $(dt_nodelabel_has_compat,timer022,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer022) select NRFX_TIMER config NRFX_TIMER120 bool "TIMER120 driver instance" - depends on $(dt_nodelabel_has_compat,timer120,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer120) select NRFX_TIMER config NRFX_TIMER121 bool "TIMER121 driver instance" - depends on $(dt_nodelabel_has_compat,timer121,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer121) select NRFX_TIMER config NRFX_TIMER130 bool "TIMER130 driver instance" - depends on $(dt_nodelabel_has_compat,timer130,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer130) select NRFX_TIMER config NRFX_TIMER131 bool "TIMER131 driver instance" - depends on $(dt_nodelabel_has_compat,timer131,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer131) select NRFX_TIMER config NRFX_TIMER132 bool "TIMER132 driver instance" - depends on $(dt_nodelabel_has_compat,timer132,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer132) select NRFX_TIMER config NRFX_TIMER133 bool "TIMER133 driver instance" - depends on $(dt_nodelabel_has_compat,timer133,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer133) select NRFX_TIMER config NRFX_TIMER134 bool "TIMER134 driver instance" - depends on $(dt_nodelabel_has_compat,timer134,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer134) select NRFX_TIMER config NRFX_TIMER135 bool "TIMER135 driver instance" - depends on $(dt_nodelabel_has_compat,timer135,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer135) select NRFX_TIMER config NRFX_TIMER136 bool "TIMER136 driver instance" - depends on $(dt_nodelabel_has_compat,timer136,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer136) select NRFX_TIMER config NRFX_TIMER137 bool "TIMER137 driver instance" - depends on $(dt_nodelabel_has_compat,timer137,$(DT_COMPAT_NORDIC_NRF_TIMER)) + depends on $(dt_nodelabel_exists,timer137) select NRFX_TIMER config NRFX_TWI @@ -843,12 +840,12 @@ config NRFX_TWI config NRFX_TWI0 bool "TWI0 driver instance" - depends on $(dt_nodelabel_has_compat,i2c0,$(DT_COMPAT_NORDIC_NRF_TWI)) + depends on $(dt_nodelabel_exists,i2c0) && (SOC_SERIES_NRF51X || SOC_SERIES_NRF52X) select NRFX_TWI config NRFX_TWI1 bool "TWI1 driver instance" - depends on $(dt_nodelabel_has_compat,i2c1,$(DT_COMPAT_NORDIC_NRF_TWI)) + depends on $(dt_nodelabel_exists,i2c1) && (SOC_SERIES_NRF51X || SOC_SERIES_NRF52X) select NRFX_TWI config NRFX_TWIM @@ -856,87 +853,87 @@ config NRFX_TWIM config NRFX_TWIM0 bool "TWIM0 driver instance" - depends on $(dt_nodelabel_has_compat,i2c0,$(DT_COMPAT_NORDIC_NRF_TWIM)) + depends on $(dt_nodelabel_exists,i2c0) && !SOC_SERIES_NRF51X select NRFX_TWIM config NRFX_TWIM1 bool "TWIM1 driver instance" - depends on $(dt_nodelabel_has_compat,i2c1,$(DT_COMPAT_NORDIC_NRF_TWIM)) + depends on $(dt_nodelabel_exists,i2c1) && !SOC_SERIES_NRF51X select NRFX_TWIM config NRFX_TWIM2 bool "TWIM2 driver instance" - depends on $(dt_nodelabel_has_compat,i2c2,$(DT_COMPAT_NORDIC_NRF_TWIM)) + depends on $(dt_nodelabel_exists,i2c2) select NRFX_TWIM config NRFX_TWIM3 bool "TWIM3 driver instance" - depends on $(dt_nodelabel_has_compat,i2c3,$(DT_COMPAT_NORDIC_NRF_TWIM)) + depends on $(dt_nodelabel_exists,i2c3) select NRFX_TWIM config NRFX_TWIM20 bool "TWIM20 driver instance" - depends on $(dt_nodelabel_has_compat,i2c20,$(DT_COMPAT_NORDIC_NRF_TWIM)) + depends on $(dt_nodelabel_exists,i2c20) select NRFX_TWIM config NRFX_TWIM21 bool "TWIM21 driver instance" - depends on $(dt_nodelabel_has_compat,i2c21,$(DT_COMPAT_NORDIC_NRF_TWIM)) + depends on $(dt_nodelabel_exists,i2c21) select NRFX_TWIM config NRFX_TWIM22 bool "TWIM22 driver instance" - depends on $(dt_nodelabel_has_compat,i2c22,$(DT_COMPAT_NORDIC_NRF_TWIM)) + depends on $(dt_nodelabel_exists,i2c22) select NRFX_TWIM config NRFX_TWIM30 bool "TWIM30 driver instance" - depends on $(dt_nodelabel_has_compat,i2c30,$(DT_COMPAT_NORDIC_NRF_TWIM)) + depends on $(dt_nodelabel_exists,i2c30) select NRFX_TWIM config NRFX_TWIM120 bool "TWIM120 driver instance" - depends on $(dt_nodelabel_has_compat,i2c120,$(DT_COMPAT_NORDIC_NRF_TWIM)) + depends on $(dt_nodelabel_exists,i2c120) select NRFX_TWIM config NRFX_TWIM130 bool "TWIM130 driver instance" - depends on $(dt_nodelabel_has_compat,i2c130,$(DT_COMPAT_NORDIC_NRF_TWIM)) + depends on $(dt_nodelabel_exists,i2c130) select NRFX_TWIM config NRFX_TWIM131 bool "TWIM131 driver instance" - depends on $(dt_nodelabel_has_compat,i2c131,$(DT_COMPAT_NORDIC_NRF_TWIM)) + depends on $(dt_nodelabel_exists,i2c131) select NRFX_TWIM config NRFX_TWIM132 bool "TWIM132 driver instance" - depends on $(dt_nodelabel_has_compat,i2c132,$(DT_COMPAT_NORDIC_NRF_TWIM)) + depends on $(dt_nodelabel_exists,i2c132) select NRFX_TWIM config NRFX_TWIM133 bool "TWIM133 driver instance" - depends on $(dt_nodelabel_has_compat,i2c133,$(DT_COMPAT_NORDIC_NRF_TWIM)) + depends on $(dt_nodelabel_exists,i2c133) select NRFX_TWIM config NRFX_TWIM134 bool "TWIM134 driver instance" - depends on $(dt_nodelabel_has_compat,i2c134,$(DT_COMPAT_NORDIC_NRF_TWIM)) + depends on $(dt_nodelabel_exists,i2c134) select NRFX_TWIM config NRFX_TWIM135 bool "TWIM135 driver instance" - depends on $(dt_nodelabel_has_compat,i2c135,$(DT_COMPAT_NORDIC_NRF_TWIM)) + depends on $(dt_nodelabel_exists,i2c135) select NRFX_TWIM config NRFX_TWIM136 bool "TWIM136 driver instance" - depends on $(dt_nodelabel_has_compat,i2c136,$(DT_COMPAT_NORDIC_NRF_TWIM)) + depends on $(dt_nodelabel_exists,i2c136) select NRFX_TWIM config NRFX_TWIM137 bool "TWIM137 driver instance" - depends on $(dt_nodelabel_has_compat,i2c137,$(DT_COMPAT_NORDIC_NRF_TWIM)) + depends on $(dt_nodelabel_exists,i2c137) select NRFX_TWIM config NRFX_TWIS @@ -944,82 +941,82 @@ config NRFX_TWIS config NRFX_TWIS0 bool "TWIS0 driver instance" - depends on $(dt_nodelabel_has_compat,i2c0,$(DT_COMPAT_NORDIC_NRF_TWIS)) + depends on $(dt_nodelabel_exists,i2c0) && !SOC_SERIES_NRF51X select NRFX_TWIS config NRFX_TWIS1 bool "TWIS1 driver instance" - depends on $(dt_nodelabel_has_compat,i2c1,$(DT_COMPAT_NORDIC_NRF_TWIS)) + depends on $(dt_nodelabel_exists,i2c1) && !SOC_SERIES_NRF51X select NRFX_TWIS config NRFX_TWIS2 bool "TWIS2 driver instance" - depends on $(dt_nodelabel_has_compat,i2c2,$(DT_COMPAT_NORDIC_NRF_TWIS)) + depends on $(dt_nodelabel_exists,i2c2) select NRFX_TWIS config NRFX_TWIS3 bool "TWIS3 driver instance" - depends on $(dt_nodelabel_has_compat,i2c3,$(DT_COMPAT_NORDIC_NRF_TWIS)) + depends on $(dt_nodelabel_exists,i2c3) select NRFX_TWIS config NRFX_TWIS20 bool "TWIS20 driver instance" - depends on $(dt_nodelabel_has_compat,i2c20,$(DT_COMPAT_NORDIC_NRF_TWIS)) + depends on $(dt_nodelabel_exists,i2c20) select NRFX_TWIS config NRFX_TWIS21 bool "TWIS21 driver instance" - depends on $(dt_nodelabel_has_compat,i2c21,$(DT_COMPAT_NORDIC_NRF_TWIS)) + depends on $(dt_nodelabel_exists,i2c21) select NRFX_TWIS config NRFX_TWIS22 bool "TWIS22 driver instance" - depends on $(dt_nodelabel_has_compat,i2c22,$(DT_COMPAT_NORDIC_NRF_TWIS)) + depends on $(dt_nodelabel_exists,i2c22) select NRFX_TWIS config NRFX_TWIS30 bool "TWIS30 driver instance" - depends on $(dt_nodelabel_has_compat,i2c30,$(DT_COMPAT_NORDIC_NRF_TWIS)) + depends on $(dt_nodelabel_exists,i2c30) select NRFX_TWIS config NRFX_TWIS130 bool "TWIS130 driver instance" - depends on $(dt_nodelabel_has_compat,i2c130,$(DT_COMPAT_NORDIC_NRF_TWIS)) + depends on $(dt_nodelabel_exists,i2c130) select NRFX_TWIS config NRFX_TWIS131 bool "TWIS131 driver instance" - depends on $(dt_nodelabel_has_compat,i2c131,$(DT_COMPAT_NORDIC_NRF_TWIS)) + depends on $(dt_nodelabel_exists,i2c131) select NRFX_TWIS config NRFX_TWIS132 bool "TWIS132 driver instance" - depends on $(dt_nodelabel_has_compat,i2c132,$(DT_COMPAT_NORDIC_NRF_TWIS)) + depends on $(dt_nodelabel_exists,i2c132) select NRFX_TWIS config NRFX_TWIS133 bool "TWIS133 driver instance" - depends on $(dt_nodelabel_has_compat,i2c133,$(DT_COMPAT_NORDIC_NRF_TWIS)) + depends on $(dt_nodelabel_exists,i2c133) select NRFX_TWIS config NRFX_TWIS134 bool "TWIS134 driver instance" - depends on $(dt_nodelabel_has_compat,i2c134,$(DT_COMPAT_NORDIC_NRF_TWIS)) + depends on $(dt_nodelabel_exists,i2c134) select NRFX_TWIS config NRFX_TWIS135 bool "TWIS135 driver instance" - depends on $(dt_nodelabel_has_compat,i2c135,$(DT_COMPAT_NORDIC_NRF_TWIS)) + depends on $(dt_nodelabel_exists,i2c135) select NRFX_TWIS config NRFX_TWIS136 bool "TWIS136 driver instance" - depends on $(dt_nodelabel_has_compat,i2c136,$(DT_COMPAT_NORDIC_NRF_TWIS)) + depends on $(dt_nodelabel_exists,i2c136) select NRFX_TWIS config NRFX_TWIS137 bool "TWIS137 driver instance" - depends on $(dt_nodelabel_has_compat,i2c137,$(DT_COMPAT_NORDIC_NRF_TWIS)) + depends on $(dt_nodelabel_exists,i2c137) select NRFX_TWIS config NRFX_UART @@ -1027,7 +1024,7 @@ config NRFX_UART config NRFX_UART0 bool "UART0 driver instance" - depends on $(dt_nodelabel_has_compat,uart0,$(DT_COMPAT_NORDIC_NRF_UART)) + depends on $(dt_nodelabel_exists,uart0) && (SOC_SERIES_NRF51X || SOC_SERIES_NRF52X) select NRFX_UART config NRFX_UARTE @@ -1035,92 +1032,92 @@ config NRFX_UARTE config NRFX_UARTE0 bool "UARTE0 driver instance" - depends on $(dt_nodelabel_has_compat,uart0,$(DT_COMPAT_NORDIC_NRF_UARTE)) + depends on $(dt_nodelabel_exists,uart0) select NRFX_UARTE config NRFX_UARTE1 bool "UARTE1 driver instance" - depends on $(dt_nodelabel_has_compat,uart1,$(DT_COMPAT_NORDIC_NRF_UARTE)) + depends on $(dt_nodelabel_exists,uart1) select NRFX_UARTE config NRFX_UARTE2 bool "UARTE2 driver instance" - depends on $(dt_nodelabel_has_compat,uart2,$(DT_COMPAT_NORDIC_NRF_UARTE)) + depends on $(dt_nodelabel_exists,uart2) select NRFX_UARTE config NRFX_UARTE3 bool "UARTE3 driver instance" - depends on $(dt_nodelabel_has_compat,uart3,$(DT_COMPAT_NORDIC_NRF_UARTE)) + depends on $(dt_nodelabel_exists,uart3) select NRFX_UARTE config NRFX_UARTE00 bool "UARTE00 driver instance" - depends on $(dt_nodelabel_has_compat,uart00,$(DT_COMPAT_NORDIC_NRF_UARTE)) + depends on $(dt_nodelabel_exists,uart00) select NRFX_UARTE config NRFX_UARTE20 bool "UARTE20 driver instance" - depends on $(dt_nodelabel_has_compat,uart20,$(DT_COMPAT_NORDIC_NRF_UARTE)) + depends on $(dt_nodelabel_exists,uart20) select NRFX_UARTE config NRFX_UARTE21 bool "UARTE21 driver instance" - depends on $(dt_nodelabel_has_compat,uart21,$(DT_COMPAT_NORDIC_NRF_UARTE)) + depends on $(dt_nodelabel_exists,uart21) select NRFX_UARTE config NRFX_UARTE22 bool "UARTE22 driver instance" - depends on $(dt_nodelabel_has_compat,uart22,$(DT_COMPAT_NORDIC_NRF_UARTE)) + depends on $(dt_nodelabel_exists,uart22) select NRFX_UARTE config NRFX_UARTE30 bool "UARTE30 driver instance" - depends on $(dt_nodelabel_has_compat,uart30,$(DT_COMPAT_NORDIC_NRF_UARTE)) + depends on $(dt_nodelabel_exists,uart30) select NRFX_UARTE config NRFX_UARTE120 bool "UARTE120 driver instance" - depends on $(dt_nodelabel_has_compat,uart120,$(DT_COMPAT_NORDIC_NRF_UARTE)) + depends on $(dt_nodelabel_exists,uart120) select NRFX_UARTE config NRFX_UARTE130 bool "UARTE130 driver instance" - depends on $(dt_nodelabel_has_compat,uart130,$(DT_COMPAT_NORDIC_NRF_UARTE)) + depends on $(dt_nodelabel_exists,uart130) select NRFX_UARTE config NRFX_UARTE131 bool "UARTE131 driver instance" - depends on $(dt_nodelabel_has_compat,uart131,$(DT_COMPAT_NORDIC_NRF_UARTE)) + depends on $(dt_nodelabel_exists,uart131) select NRFX_UARTE config NRFX_UARTE132 bool "UARTE132 driver instance" - depends on $(dt_nodelabel_has_compat,uart132,$(DT_COMPAT_NORDIC_NRF_UARTE)) + depends on $(dt_nodelabel_exists,uart132) select NRFX_UARTE config NRFX_UARTE133 bool "UARTE133 driver instance" - depends on $(dt_nodelabel_has_compat,uart133,$(DT_COMPAT_NORDIC_NRF_UARTE)) + depends on $(dt_nodelabel_exists,uart133) select NRFX_UARTE config NRFX_UARTE134 bool "UARTE134 driver instance" - depends on $(dt_nodelabel_has_compat,uart134,$(DT_COMPAT_NORDIC_NRF_UARTE)) + depends on $(dt_nodelabel_exists,uart134) select NRFX_UARTE config NRFX_UARTE135 bool "UARTE135 driver instance" - depends on $(dt_nodelabel_has_compat,uart135,$(DT_COMPAT_NORDIC_NRF_UARTE)) + depends on $(dt_nodelabel_exists,uart135) select NRFX_UARTE config NRFX_UARTE136 bool "UARTE136 driver instance" - depends on $(dt_nodelabel_has_compat,uart136,$(DT_COMPAT_NORDIC_NRF_UARTE)) + depends on $(dt_nodelabel_exists,uart136) select NRFX_UARTE config NRFX_UARTE137 bool "UARTE137 driver instance" - depends on $(dt_nodelabel_has_compat,uart137,$(DT_COMPAT_NORDIC_NRF_UARTE)) + depends on $(dt_nodelabel_exists,uart137) select NRFX_UARTE config NRFX_UARTE_CONFIG_SKIP_GPIO_CONFIG @@ -1145,54 +1142,54 @@ config NRFX_UARTE_CONFIG_RX_CACHE_ENABLED config NRFX_USBREG bool "USBREG driver" - depends on $(dt_has_compat,$(DT_COMPAT_NORDIC_NRF_USBREG)) + depends on $(dt_nodelabel_exists,usbreg) config NRFX_WDT bool config NRFX_WDT0 bool "WDT0 driver instance" - depends on $(dt_nodelabel_has_compat,wdt0,$(DT_COMPAT_NORDIC_NRF_WDT)) + depends on $(dt_nodelabel_exists,wdt0) select NRFX_WDT config NRFX_WDT1 bool "WDT1 driver instance" - depends on $(dt_nodelabel_has_compat,wdt1,$(DT_COMPAT_NORDIC_NRF_WDT)) + depends on $(dt_nodelabel_exists,wdt1) select NRFX_WDT config NRFX_WDT30 bool "WDT30 driver instance" - depends on $(dt_nodelabel_has_compat,wdt30,$(DT_COMPAT_NORDIC_NRF_WDT)) + depends on $(dt_nodelabel_exists,wdt30) select NRFX_WDT config NRFX_WDT31 bool "WDT31 driver instance" - depends on $(dt_nodelabel_has_compat,wdt31,$(DT_COMPAT_NORDIC_NRF_WDT)) + depends on $(dt_nodelabel_exists,wdt31) select NRFX_WDT config NRFX_WDT010 bool "WDT010 driver instance" - depends on $(dt_nodelabel_has_compat,wdt010,$(DT_COMPAT_NORDIC_NRF_WDT)) + depends on $(dt_nodelabel_exists,wdt010) select NRFX_WDT config NRFX_WDT011 bool "WDT011 driver instance" - depends on $(dt_nodelabel_has_compat,wdt011,$(DT_COMPAT_NORDIC_NRF_WDT)) + depends on $(dt_nodelabel_exists,wdt011) select NRFX_WDT config NRFX_WDT130 bool "WDT130 driver instance" - depends on $(dt_nodelabel_has_compat,wdt130,$(DT_COMPAT_NORDIC_NRF_WDT)) + depends on $(dt_nodelabel_exists,wdt130) select NRFX_WDT config NRFX_WDT131 bool "WDT131 driver instance" - depends on $(dt_nodelabel_has_compat,wdt131,$(DT_COMPAT_NORDIC_NRF_WDT)) + depends on $(dt_nodelabel_exists,wdt131) select NRFX_WDT config NRFX_WDT132 bool "WDT132 driver instance" - depends on $(dt_nodelabel_has_compat,wdt132,$(DT_COMPAT_NORDIC_NRF_WDT)) + depends on $(dt_nodelabel_exists,wdt132) select NRFX_WDT menu "Peripheral Resource Sharing module" From bf25ecb07285ddb850fa772c4fd6920dbea236f5 Mon Sep 17 00:00:00 2001 From: Nikodem Kastelik Date: Fri, 28 Feb 2025 13:01:05 +0100 Subject: [PATCH 4/7] [nrf fromtree] soc: nordic: add support for SPIS120 instance It is defined as spis120 rather than spi120, because spi120 is already used for SPIM120 hardware instance, but their base address is different. Signed-off-by: Nikodem Kastelik (cherry picked from commit d8506af12aff17e5a86c1f8b457723eb104ea6c0) --- dts/common/nordic/nrf54h20.dtsi | 20 ++++++++++++++++---- modules/hal_nordic/nrfx/Kconfig | 2 +- soc/nordic/common/Kconfig.peripherals | 2 +- soc/nordic/validate_base_addresses.c | 1 + 4 files changed, 19 insertions(+), 6 deletions(-) diff --git a/dts/common/nordic/nrf54h20.dtsi b/dts/common/nordic/nrf54h20.dtsi index bfce794ff3c4..1fe345e33f2c 100644 --- a/dts/common/nordic/nrf54h20.dtsi +++ b/dts/common/nordic/nrf54h20.dtsi @@ -661,6 +661,20 @@ #pwm-cells = <3>; }; + spis120: spi@8e5000 { + compatible = "nordic,nrf-spis"; + reg = <0x8e5000 0x1000>; + status = "disabled"; + power-domains = <&gpd NRF_GPD_FAST_ACTIVE1>; + easydma-maxcnt-bits = <15>; + interrupts = <229 NRF_DEFAULT_IRQ_PRIORITY>; + clocks = <&hsfll120>; + max-frequency = ; + #address-cells = <1>; + #size-cells = <0>; + nordic,clockpin-enable = ; + }; + spi120: spi@8e6000 { compatible = "nordic,nrf-spim"; reg = <0x8e6000 0x1000>; @@ -674,8 +688,7 @@ #size-cells = <0>; rx-delay-supported; rx-delay = <1>; - nordic,clockpin-enable = , - ; + nordic,clockpin-enable = ; }; uart120: uart@8e6000 { @@ -702,8 +715,7 @@ #size-cells = <0>; rx-delay-supported; rx-delay = <1>; - nordic,clockpin-enable = , - ; + nordic,clockpin-enable = ; }; cpuppr_vpr: vpr@908000 { diff --git a/modules/hal_nordic/nrfx/Kconfig b/modules/hal_nordic/nrfx/Kconfig index d510d1111ac3..1e9f717e4bcc 100644 --- a/modules/hal_nordic/nrfx/Kconfig +++ b/modules/hal_nordic/nrfx/Kconfig @@ -639,7 +639,7 @@ config NRFX_SPIS30 config NRFX_SPIS120 bool "SPIS120 driver instance" - depends on $(dt_nodelabel_exists,spi120) + depends on $(dt_nodelabel_exists,spis120) select NRFX_SPIS config NRFX_SPIS130 diff --git a/soc/nordic/common/Kconfig.peripherals b/soc/nordic/common/Kconfig.peripherals index 451a534d101f..b9f582375d6d 100644 --- a/soc/nordic/common/Kconfig.peripherals +++ b/soc/nordic/common/Kconfig.peripherals @@ -342,7 +342,7 @@ config HAS_HW_NRF_SPIS30 def_bool $(dt_nodelabel_enabled_with_compat,spi30,$(DT_COMPAT_NORDIC_NRF_SPIS)) config HAS_HW_NRF_SPIS120 - def_bool $(dt_nodelabel_enabled_with_compat,spi120,$(DT_COMPAT_NORDIC_NRF_SPIS)) + def_bool $(dt_nodelabel_enabled_with_compat,spis120,$(DT_COMPAT_NORDIC_NRF_SPIS)) config HAS_HW_NRF_SPIS130 def_bool $(dt_nodelabel_enabled_with_compat,spi130,$(DT_COMPAT_NORDIC_NRF_SPIS)) diff --git a/soc/nordic/validate_base_addresses.c b/soc/nordic/validate_base_addresses.c index ac800f1cf00b..9de947a5c7f6 100644 --- a/soc/nordic/validate_base_addresses.c +++ b/soc/nordic/validate_base_addresses.c @@ -277,6 +277,7 @@ CHECK_DT_REG(spi134, NRF_SPIM134); CHECK_DT_REG(spi135, NRF_SPIM135); CHECK_DT_REG(spi136, NRF_SPIM136); CHECK_DT_REG(spi137, NRF_SPIM137); +CHECK_DT_REG(spis120, NRF_SPIS120); CHECK_DT_REG(spu, NRF_SPU); CHECK_DT_REG(swi0, NRF_SWI0); CHECK_DT_REG(swi1, NRF_SWI1); From 2c36c138bceea6734bb6f646505d32b4880add11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Chru=C5=9Bci=C5=84ski?= Date: Tue, 11 Mar 2025 15:59:30 +0100 Subject: [PATCH 5/7] [nrf fromtree] drivers: spi: nrfx_spis: Extend support for device runtime PM MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extend runtime PM to support fast instance (spis120) which requires additional action in suspend/resume phase. Signed-off-by: Krzysztof Chruściński (cherry picked from commit 125e5d83349ac63bfea28c379694f23a914eab4b) --- drivers/spi/spi_nrfx_spis.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/drivers/spi/spi_nrfx_spis.c b/drivers/spi/spi_nrfx_spis.c index 50d37d0dc062..daa382c41374 100644 --- a/drivers/spi/spi_nrfx_spis.c +++ b/drivers/spi/spi_nrfx_spis.c @@ -19,6 +19,10 @@ LOG_MODULE_REGISTER(spi_nrfx_spis, CONFIG_SPI_LOG_LEVEL); #include "spi_context.h" +#ifdef CONFIG_SOC_NRF54H20_GPD +#include +#endif + struct spi_nrfx_data { struct spi_context ctx; const struct device *dev; @@ -31,6 +35,9 @@ struct spi_nrfx_config { nrfx_spis_config_t config; void (*irq_connect)(void); uint16_t max_buf_len; +#ifdef CONFIG_SOC_NRF54H20_GPD + bool gpd_ctrl; +#endif const struct pinctrl_dev_config *pcfg; struct gpio_dt_spec wake_gpio; }; @@ -299,6 +306,12 @@ static void spi_nrfx_suspend(const struct device *dev) nrf_spis_disable(dev_config->spis.p_reg); } +#ifdef CONFIG_SOC_NRF54H20_GPD + if (dev_config->gpd_ctrl) { + nrf_gpd_retain_pins_set(dev_config->pcfg, true); + } +#endif + (void)pinctrl_apply_state(dev_config->pcfg, PINCTRL_STATE_SLEEP); } @@ -308,6 +321,12 @@ static void spi_nrfx_resume(const struct device *dev) (void)pinctrl_apply_state(dev_config->pcfg, PINCTRL_STATE_DEFAULT); +#ifdef CONFIG_SOC_NRF54H20_GPD + if (dev_config->gpd_ctrl) { + nrf_gpd_retain_pins_set(dev_config->pcfg, false); + } +#endif + if (dev_config->wake_gpio.port == NULL) { nrf_spis_enable(dev_config->spis.p_reg); } @@ -338,11 +357,6 @@ static int spi_nrfx_init(const struct device *dev) nrfx_err_t result; int err; - err = pinctrl_apply_state(dev_config->pcfg, PINCTRL_STATE_DEFAULT); - if (err < 0) { - return err; - } - /* This sets only default values of mode and bit order. The ones to be * actually used are set in configure() when a transfer is prepared. */ @@ -435,6 +449,9 @@ static int spi_nrfx_init(const struct device *dev) .irq_connect = irq_connect##idx, \ .pcfg = PINCTRL_DT_DEV_CONFIG_GET(SPIS(idx)), \ .max_buf_len = BIT_MASK(SPIS_PROP(idx, easydma_maxcnt_bits)), \ + IF_ENABLED(CONFIG_SOC_NRF54H20_GPD, \ + (.gpd_ctrl = NRF_PERIPH_GET_FREQUENCY(SPIS(idx)) > \ + NRFX_MHZ_TO_HZ(16UL),)) \ .wake_gpio = GPIO_DT_SPEC_GET_OR(SPIS(idx), wake_gpios, {0}), \ }; \ BUILD_ASSERT(!DT_NODE_HAS_PROP(SPIS(idx), wake_gpios) || \ From cfb263411466120b2f377fd1584301ac320adeb5 Mon Sep 17 00:00:00 2001 From: Nikodem Kastelik Date: Fri, 28 Feb 2025 13:04:04 +0100 Subject: [PATCH 6/7] [nrf fromtree] drivers: spi: nrf: add support for SPIS120 instance SPIS120 is a SPI slave device with >8 MHz SCK compatibility. Signed-off-by: Nikodem Kastelik (cherry picked from commit f13c8a59e2888a9a921b6cf43e65e3f60a8d77c0) --- drivers/spi/spi_nrfx_spis.c | 57 +++++++++++++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 6 deletions(-) diff --git a/drivers/spi/spi_nrfx_spis.c b/drivers/spi/spi_nrfx_spis.c index daa382c41374..049154f791d2 100644 --- a/drivers/spi/spi_nrfx_spis.c +++ b/drivers/spi/spi_nrfx_spis.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -40,6 +41,7 @@ struct spi_nrfx_config { #endif const struct pinctrl_dev_config *pcfg; struct gpio_dt_spec wake_gpio; + void *mem_reg; }; static inline nrf_spis_mode_t get_nrf_spis_mode(uint16_t operation) @@ -125,7 +127,11 @@ static int prepare_for_transfer(const struct device *dev, uint8_t *rx_buf, size_t rx_buf_len) { const struct spi_nrfx_config *dev_config = dev->config; + struct spi_nrfx_data *dev_data = dev->data; nrfx_err_t result; + uint8_t *dmm_tx_buf; + uint8_t *dmm_rx_buf; + int err; if (tx_buf_len > dev_config->max_buf_len || rx_buf_len > dev_config->max_buf_len) { @@ -134,14 +140,36 @@ static int prepare_for_transfer(const struct device *dev, return -EINVAL; } + err = dmm_buffer_out_prepare(dev_config->mem_reg, tx_buf, tx_buf_len, (void **)&dmm_tx_buf); + if (err != 0) { + LOG_ERR("DMM TX allocation failed err=%d", err); + goto out_alloc_failed; + } + + /* Keep user RX buffer address to copy data from DMM RX buffer on transfer completion. */ + dev_data->ctx.rx_buf = rx_buf; + err = dmm_buffer_in_prepare(dev_config->mem_reg, rx_buf, rx_buf_len, (void **)&dmm_rx_buf); + if (err != 0) { + LOG_ERR("DMM RX allocation failed err=%d", err); + goto in_alloc_failed; + } + result = nrfx_spis_buffers_set(&dev_config->spis, - tx_buf, tx_buf_len, - rx_buf, rx_buf_len); + dmm_tx_buf, tx_buf_len, + dmm_rx_buf, rx_buf_len); if (result != NRFX_SUCCESS) { - return -EIO; + err = -EIO; + goto buffers_set_failed; } return 0; + +buffers_set_failed: + dmm_buffer_in_release(dev_config->mem_reg, rx_buf, rx_buf_len, rx_buf); +in_alloc_failed: + dmm_buffer_out_release(dev_config->mem_reg, (void *)tx_buf); +out_alloc_failed: + return err; } static void wake_callback(const struct device *dev, struct gpio_callback *cb, @@ -288,9 +316,22 @@ static DEVICE_API(spi, spi_nrfx_driver_api) = { static void event_handler(const nrfx_spis_evt_t *p_event, void *p_context) { - struct spi_nrfx_data *dev_data = p_context; + const struct device *dev = p_context; + struct spi_nrfx_data *dev_data = dev->data; + const struct spi_nrfx_config *dev_config = dev->config; if (p_event->evt_type == NRFX_SPIS_XFER_DONE) { + int err; + + + err = dmm_buffer_out_release(dev_config->mem_reg, p_event->p_tx_buf); + (void)err; + __ASSERT_NO_MSG(err == 0); + + err = dmm_buffer_in_release(dev_config->mem_reg, dev_data->ctx.rx_buf, + p_event->rx_amount, p_event->p_rx_buf); + __ASSERT_NO_MSG(err == 0); + spi_context_complete(&dev_data->ctx, dev_data->dev, p_event->rx_amount); @@ -361,7 +402,7 @@ static int spi_nrfx_init(const struct device *dev) * actually used are set in configure() when a transfer is prepared. */ result = nrfx_spis_init(&dev_config->spis, &dev_config->config, - event_handler, dev_data); + event_handler, (void *)dev); if (result != NRFX_SUCCESS) { LOG_ERR("Failed to initialize device: %s", dev->name); @@ -416,7 +457,10 @@ static int spi_nrfx_init(const struct device *dev) * - Name-based HAL IRQ handlers, e.g. nrfx_spis_0_irq_handler */ -#define SPIS(idx) DT_NODELABEL(spi##idx) +#define SPIS_NODE(idx) COND_CODE_1(IS_EQ(idx, 120), (spis##idx), (spi##idx)) + +#define SPIS(idx) DT_NODELABEL(SPIS_NODE(idx)) + #define SPIS_PROP(idx, prop) DT_PROP(SPIS(idx), prop) #define SPI_NRFX_SPIS_DEFINE(idx) \ @@ -453,6 +497,7 @@ static int spi_nrfx_init(const struct device *dev) (.gpd_ctrl = NRF_PERIPH_GET_FREQUENCY(SPIS(idx)) > \ NRFX_MHZ_TO_HZ(16UL),)) \ .wake_gpio = GPIO_DT_SPEC_GET_OR(SPIS(idx), wake_gpios, {0}), \ + .mem_reg = DMM_DEV_TO_REG(SPIS(idx)), \ }; \ BUILD_ASSERT(!DT_NODE_HAS_PROP(SPIS(idx), wake_gpios) || \ !(DT_GPIO_FLAGS(SPIS(idx), wake_gpios) & GPIO_ACTIVE_LOW),\ From 15a2ac1577d014116b236f40d0284d1fee31243b Mon Sep 17 00:00:00 2001 From: Nikodem Kastelik Date: Fri, 28 Feb 2025 13:06:22 +0100 Subject: [PATCH 7/7] [nrf fromtree] tests: drivers: spi: add test case for nRF54H20 SPIS120 New test case is for building an application simultaneously utilizing SPIM120, SPIM120, SPIS120 and SPIS13x. Signed-off-by: Nikodem Kastelik (cherry picked from commit 8b77098ca1357b7d998ae83e3cf10baf9560d4a3) --- ...f54h20dk_nrf54h20_cpuapp_fast_spis.overlay | 138 ++++++++++++++++++ .../spi_controller_peripheral/testcase.yaml | 12 ++ 2 files changed, 150 insertions(+) create mode 100644 tests/drivers/spi/spi_controller_peripheral/boards/nrf54h20dk_nrf54h20_cpuapp_fast_spis.overlay diff --git a/tests/drivers/spi/spi_controller_peripheral/boards/nrf54h20dk_nrf54h20_cpuapp_fast_spis.overlay b/tests/drivers/spi/spi_controller_peripheral/boards/nrf54h20dk_nrf54h20_cpuapp_fast_spis.overlay new file mode 100644 index 000000000000..36b5dcb06290 --- /dev/null +++ b/tests/drivers/spi/spi_controller_peripheral/boards/nrf54h20dk_nrf54h20_cpuapp_fast_spis.overlay @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2025 Nordic Semiconductor + * + * SPDX-License-Identifier: Apache-2.0 + */ + +&pinctrl { + spis120_default_alt: spis120_default_alt { + group1 { + psels = , + , + , + ; + }; + }; + + spis120_sleep_alt: spis120_sleep_alt { + group1 { + psels = , + , + , + ; + low-power-enable; + }; + }; + + spi120_default_alt: spi120_default_alt { + group1 { + psels = , + , + ; + }; + }; + + spi120_sleep_alt: spi120_sleep_alt { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; + + spi121_default_alt: spi121_default_alt { + group1 { + psels = , + , + ; + }; + }; + + spi121_sleep_alt: spi121_sleep_alt { + group1 { + psels = , + , + ; + low-power-enable; + }; + }; + + spis131_default_alt: spis131_default_alt { + group1 { + psels = , + , + , + ; + }; + }; + + spis131_sleep_alt: spis131_sleep_alt { + group1 { + psels = , + , + , + ; + low-power-enable; + }; + }; +}; + +&gpio0 { + status = "okay"; +}; + +&dma_fast_region { + status = "okay"; +}; + +&spis120 { + compatible = "nordic,nrf-spis"; + status = "okay"; + def-char = <0x00>; + pinctrl-0 = <&spis120_default_alt>; + pinctrl-1 = <&spis120_sleep_alt>; + pinctrl-names = "default", "sleep"; + memory-regions = <&dma_fast_region>; +}; + +&spi120 { + compatible = "nordic,nrf-spim"; + status = "okay"; + pinctrl-0 = <&spi120_default_alt>; + pinctrl-1 = <&spi120_sleep_alt>; + pinctrl-names = "default", "sleep"; + overrun-character = <0x00>; + memory-regions = <&dma_fast_region>; + cs-gpios = <&gpio0 9 GPIO_ACTIVE_LOW>; + zephyr,pm-device-runtime-auto; + dut_spi_dt: test-spi-dev@0 { + compatible = "vnd,spi-device"; + reg = <0>; + spi-max-frequency = ; + }; +}; + +&spi121 { + compatible = "nordic,nrf-spim"; + status = "okay"; + pinctrl-0 = <&spi121_default_alt>; + pinctrl-1 = <&spi121_sleep_alt>; + pinctrl-names = "default", "sleep"; + overrun-character = <0x00>; + memory-regions = <&dma_fast_region>; + cs-gpios = <&gpio0 10 GPIO_ACTIVE_LOW>; + zephyr,pm-device-runtime-auto; +}; + +dut_spis: &spi131 { + compatible = "nordic,nrf-spis"; + status = "okay"; + def-char = <0x00>; + pinctrl-0 = <&spis131_default_alt>; + pinctrl-1 = <&spis131_sleep_alt>; + pinctrl-names = "default", "sleep"; + memory-regions = <&cpuapp_dma_region>; + /delete-property/rx-delay-supported; + /delete-property/rx-delay; +}; diff --git a/tests/drivers/spi/spi_controller_peripheral/testcase.yaml b/tests/drivers/spi/spi_controller_peripheral/testcase.yaml index 6bc5644d7704..ca153293f571 100644 --- a/tests/drivers/spi/spi_controller_peripheral/testcase.yaml +++ b/tests/drivers/spi/spi_controller_peripheral/testcase.yaml @@ -66,6 +66,18 @@ tests: - nrf54h20dk/nrf54h20/cpuppr - nrf54l20pdk/nrf54l20/cpuapp + drivers.spi.spis_fast: + # SPIS120 instance occupies P6 which is not available on nRF54H20 DK pin headers + # It is added only to check the compilation. + build_only: true + extra_args: DTC_OVERLAY_FILE="boards/nrf54h20dk_nrf54h20_cpuapp_fast_spis.overlay" + platform_exclude: + - nrf52840dk/nrf52840 + - nrf54l15dk/nrf54l15/cpuapp + - nrf54h20dk/nrf54h20/cpurad + - nrf54h20dk/nrf54h20/cpuppr + - nrf54l20pdk/nrf54l20/cpuapp + drivers.spi.pm_runtime: extra_configs: - CONFIG_PM_DEVICE=y