mirror of
https://github.com/zephyrproject-rtos/zephyr
synced 2025-09-08 09:22:30 +00:00
Add wdt0 node labels for all watchdogs. Keep the existing wdt node labels in place for backwards compatibility. Add a wdt1 node to the nRF5340 application core .dtsi, but leave it disabled. Leave the wdt node's label set to "WDT" on this core for backwards compatibility also, in case any users are getting it with a string literal instead of asking the devicetree. This can be changed later after this round of watchdog changes has been shaken out and tested more. Signed-off-by: Martí Bolívar <marti.bolivar@nordicsemi.no>
137 lines
4.0 KiB
C
137 lines
4.0 KiB
C
/*
|
|
* Copyright (c) 2019, 2020 Nordic Semiconductor ASA
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#include <kernel.h>
|
|
#include <soc.h>
|
|
#include <devicetree.h>
|
|
|
|
/*
|
|
* Account for MDK inconsistencies
|
|
*/
|
|
|
|
#if !defined(NRF_I2S0) && defined(NRF_I2S)
|
|
#define NRF_I2S0 NRF_I2S
|
|
#endif
|
|
|
|
#if !defined(NRF_P0) && defined(NRF_GPIO)
|
|
#define NRF_P0 NRF_GPIO
|
|
#endif
|
|
|
|
#if !defined(NRF_PDM0) && defined(NRF_PDM)
|
|
#define NRF_PDM0 NRF_PDM
|
|
#endif
|
|
|
|
#if !defined(NRF_WDT0) && defined(NRF_WDT)
|
|
#define NRF_WDT0 NRF_WDT
|
|
#endif
|
|
|
|
/**
|
|
* Check that a devicetree node's "reg" base address matches the
|
|
* correct value from the MDK.
|
|
*
|
|
* This check will only happen if the node is enabled. Disabled or
|
|
* nonexistent nodes are not checked.
|
|
*
|
|
* This allows the same file to work with multiple SoCs and devicetree
|
|
* configurations.
|
|
*
|
|
* @param lbl lowercase-and-underscores devicetree node label to check
|
|
* @param mdk_addr expected address from the Nordic MDK.
|
|
*/
|
|
#define CHECK_DT_REG(lbl, mdk_addr) \
|
|
BUILD_ASSERT( \
|
|
UTIL_OR(UTIL_NOT(DT_HAS_NODE(DT_NODELABEL(lbl))), \
|
|
(DT_REG_ADDR(DT_NODELABEL(lbl)) == \
|
|
(u32_t)(mdk_addr))))
|
|
|
|
/**
|
|
* If a node label "lbl" might have different addresses depending on
|
|
* its compatible "compat", you can use this macro to pick the right
|
|
* one.
|
|
*
|
|
* @param lbl lowercase-and-underscores devicetree node label to check
|
|
* @param compat lowercase-and-underscores compatible to check
|
|
* @param addr_if_match MDK address to return if "lbl" has compatible "compat"
|
|
* @param addr_if_no_match MDK address to return otherwise
|
|
*/
|
|
#define NODE_ADDRESS(lbl, compat, addr_if_match, addr_if_no_match) \
|
|
COND_CODE_1(DT_NODE_HAS_COMPAT(DT_NODELABEL(lbl), compat), \
|
|
(addr_if_match), (addr_if_no_match))
|
|
|
|
#define CHECK_SPI_REG(lbl, num) \
|
|
CHECK_DT_REG(lbl, \
|
|
NODE_ADDRESS(lbl, nordic_nrf_spi, NRF_SPI##num, \
|
|
NODE_ADDRESS(lbl, nordic_nrf_spim, NRF_SPIM##num, \
|
|
NRF_SPIS##num)))
|
|
|
|
#define CHECK_I2C_REG(lbl, num) \
|
|
CHECK_DT_REG(lbl, \
|
|
NODE_ADDRESS(lbl, nordic_nrf_twi, NRF_TWI##num, \
|
|
NODE_ADDRESS(lbl, nordic_nrf_twim, NRF_TWIM##num, \
|
|
NRF_TWIS##num)))
|
|
|
|
#define CHECK_UART_REG(lbl, num) \
|
|
CHECK_DT_REG(lbl, \
|
|
NODE_ADDRESS(lbl, nordic_nrf_uart, NRF_UART##num, \
|
|
NRF_UARTE##num))
|
|
|
|
CHECK_DT_REG(adc, NODE_ADDRESS(adc, nordic_nrf_adc, NRF_ADC, NRF_SAADC));
|
|
CHECK_DT_REG(clock, NRF_CLOCK);
|
|
CHECK_DT_REG(cryptocell, NRF_CRYPTOCELL);
|
|
CHECK_DT_REG(dppic, NRF_DPPIC);
|
|
CHECK_DT_REG(egu0, NRF_EGU0);
|
|
CHECK_DT_REG(egu1, NRF_EGU1);
|
|
CHECK_DT_REG(egu2, NRF_EGU2);
|
|
CHECK_DT_REG(egu3, NRF_EGU3);
|
|
CHECK_DT_REG(egu4, NRF_EGU4);
|
|
CHECK_DT_REG(egu5, NRF_EGU5);
|
|
CHECK_DT_REG(ficr, NRF_FICR);
|
|
CHECK_DT_REG(flash_controller, NRF_NVMC);
|
|
CHECK_DT_REG(gpio0, NRF_P0);
|
|
CHECK_DT_REG(gpio1, NRF_P1);
|
|
CHECK_DT_REG(gpiote, NRF_GPIOTE);
|
|
CHECK_DT_REG(i2s0, NRF_I2S0);
|
|
CHECK_DT_REG(ipc, NRF_IPC);
|
|
CHECK_DT_REG(kmu, NRF_KMU);
|
|
CHECK_DT_REG(pdm0, NRF_PDM0);
|
|
CHECK_DT_REG(power, NRF_POWER);
|
|
CHECK_DT_REG(pwm0, NRF_PWM0);
|
|
CHECK_DT_REG(pwm1, NRF_PWM1);
|
|
CHECK_DT_REG(pwm2, NRF_PWM2);
|
|
CHECK_DT_REG(pwm3, NRF_PWM3);
|
|
CHECK_DT_REG(qdec, NRF_QDEC);
|
|
CHECK_DT_REG(regulators, NRF_REGULATORS);
|
|
CHECK_DT_REG(rng, NRF_RNG);
|
|
CHECK_DT_REG(rtc0, NRF_RTC0);
|
|
CHECK_DT_REG(rtc1, NRF_RTC1);
|
|
CHECK_DT_REG(rtc2, NRF_RTC2);
|
|
CHECK_SPI_REG(spi0, 0);
|
|
CHECK_SPI_REG(spi1, 1);
|
|
CHECK_SPI_REG(spi2, 2);
|
|
CHECK_DT_REG(spi3, NRF_SPIM3);
|
|
CHECK_DT_REG(spi4, NRF_SPIM4);
|
|
CHECK_DT_REG(spu, NRF_SPU);
|
|
CHECK_DT_REG(temp, NRF_TEMP);
|
|
CHECK_DT_REG(timer0, NRF_TIMER0);
|
|
CHECK_DT_REG(timer1, NRF_TIMER1);
|
|
CHECK_DT_REG(timer2, NRF_TIMER2);
|
|
CHECK_DT_REG(timer3, NRF_TIMER3);
|
|
CHECK_DT_REG(timer4, NRF_TIMER4);
|
|
CHECK_I2C_REG(i2c0, 0);
|
|
CHECK_I2C_REG(i2c1, 1);
|
|
CHECK_DT_REG(i2c2, NRF_TWIM2);
|
|
CHECK_DT_REG(i2c3, NRF_TWIM3);
|
|
CHECK_UART_REG(uart0, 0);
|
|
CHECK_DT_REG(uart1, NRF_UARTE1);
|
|
CHECK_DT_REG(uart2, NRF_UARTE2);
|
|
CHECK_DT_REG(uart3, NRF_UARTE3);
|
|
CHECK_DT_REG(uicr, NRF_UICR);
|
|
CHECK_DT_REG(usbd, NRF_USBD);
|
|
CHECK_DT_REG(vmc, NRF_VMC);
|
|
CHECK_DT_REG(wdt, NRF_WDT0); /* this should be the same node as wdt0 */
|
|
CHECK_DT_REG(wdt0, NRF_WDT0);
|
|
CHECK_DT_REG(wdt1, NRF_WDT1);
|