mirror of
https://github.com/apache/nuttx.git
synced 2026-05-31 23:40:19 +08:00
xtensa/esp32: allows the rtc wdt to be configured in bootloader and used later
This commit is contained in:
@@ -71,7 +71,6 @@ static int esp32_wtd_start(FAR struct esp32_wtd_dev_s *dev);
|
|||||||
static int esp32_wtd_stop(FAR struct esp32_wtd_dev_s *dev);
|
static int esp32_wtd_stop(FAR struct esp32_wtd_dev_s *dev);
|
||||||
static int esp32_wtd_enablewp(FAR struct esp32_wtd_dev_s *dev);
|
static int esp32_wtd_enablewp(FAR struct esp32_wtd_dev_s *dev);
|
||||||
static int esp32_wtd_disablewp(FAR struct esp32_wtd_dev_s *dev);
|
static int esp32_wtd_disablewp(FAR struct esp32_wtd_dev_s *dev);
|
||||||
static int esp32_wtd_initconf(FAR struct esp32_wtd_dev_s *dev);
|
|
||||||
static int esp32_wtd_pre(FAR struct esp32_wtd_dev_s *dev, uint16_t value);
|
static int esp32_wtd_pre(FAR struct esp32_wtd_dev_s *dev, uint16_t value);
|
||||||
static int esp32_wtd_settimeout(FAR struct esp32_wtd_dev_s *dev,
|
static int esp32_wtd_settimeout(FAR struct esp32_wtd_dev_s *dev,
|
||||||
uint32_t value, uint8_t stage);
|
uint32_t value, uint8_t stage);
|
||||||
@@ -95,7 +94,6 @@ struct esp32_wtd_ops_s esp32_mwtd_ops =
|
|||||||
{
|
{
|
||||||
.start = esp32_wtd_start,
|
.start = esp32_wtd_start,
|
||||||
.stop = esp32_wtd_stop,
|
.stop = esp32_wtd_stop,
|
||||||
.initconf = esp32_wtd_initconf,
|
|
||||||
.enablewp = esp32_wtd_enablewp,
|
.enablewp = esp32_wtd_enablewp,
|
||||||
.disablewp = esp32_wtd_disablewp,
|
.disablewp = esp32_wtd_disablewp,
|
||||||
.pre = esp32_wtd_pre,
|
.pre = esp32_wtd_pre,
|
||||||
@@ -113,7 +111,6 @@ struct esp32_wtd_ops_s esp32_rwtd_ops =
|
|||||||
{
|
{
|
||||||
.start = esp32_wtd_start,
|
.start = esp32_wtd_start,
|
||||||
.stop = esp32_wtd_stop,
|
.stop = esp32_wtd_stop,
|
||||||
.initconf = esp32_wtd_initconf,
|
|
||||||
.enablewp = esp32_wtd_enablewp,
|
.enablewp = esp32_wtd_enablewp,
|
||||||
.disablewp = esp32_wtd_disablewp,
|
.disablewp = esp32_wtd_disablewp,
|
||||||
.pre = NULL,
|
.pre = NULL,
|
||||||
@@ -474,45 +471,6 @@ static int esp32_wtd_disablewp(FAR struct esp32_wtd_dev_s *dev)
|
|||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
|
||||||
* Name: esp32_wtd_initconf
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* It turn off all the stages and ensure Flash Boot Protection is disabled.
|
|
||||||
* In case of RWDT, it also turns off the WDT, in case it was already
|
|
||||||
* turned on before. NOTE: The main system reset does not reset RTC, so
|
|
||||||
* all the registers values are kept.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
static int esp32_wtd_initconf(FAR struct esp32_wtd_dev_s *dev)
|
|
||||||
{
|
|
||||||
uint32_t mask = 0;
|
|
||||||
|
|
||||||
DEBUGASSERT(dev);
|
|
||||||
|
|
||||||
/* If it is a RWDT */
|
|
||||||
|
|
||||||
if (((struct esp32_wtd_priv_s *)dev)->base == RTC_CNTL_WDTCONFIG0_REG)
|
|
||||||
{
|
|
||||||
mask = RTC_CNTL_WDT_INT_ENA_M | RTC_CNTL_WDT_STG0_M
|
|
||||||
| RTC_CNTL_WDT_STG1_M | RTC_CNTL_WDT_STG2_M | RTC_CNTL_WDT_STG3_M
|
|
||||||
| RTC_CNTL_WDT_FLASHBOOT_MOD_EN_M;
|
|
||||||
esp32_wtd_modifyreg32(dev, RWDT_CONFIG0_OFFSET, mask, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If it is a MWDT */
|
|
||||||
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mask = TIMG_WDT_STG0_M | TIMG_WDT_STG1_M | TIMG_WDT_STG2_M
|
|
||||||
| TIMG_WDT_STG3_M | TIMG_WDT_FLASHBOOT_MOD_EN_M;
|
|
||||||
esp32_wtd_modifyreg32(dev, MWDT_CONFIG0_OFFSET, mask, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: esp32_wtd_pre
|
* Name: esp32_wtd_pre
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -41,7 +41,6 @@
|
|||||||
#define ESP32_WTD_STOP(d) ((d)->ops->stop(d))
|
#define ESP32_WTD_STOP(d) ((d)->ops->stop(d))
|
||||||
#define ESP32_WTD_LOCK(d) ((d)->ops->enablewp(d))
|
#define ESP32_WTD_LOCK(d) ((d)->ops->enablewp(d))
|
||||||
#define ESP32_WTD_UNLOCK(d) ((d)->ops->disablewp(d))
|
#define ESP32_WTD_UNLOCK(d) ((d)->ops->disablewp(d))
|
||||||
#define ESP32_WTD_INITCONF(d) ((d)->ops->initconf(d))
|
|
||||||
#define ESP32_WTD_PRE(d, v) ((d)->ops->pre(d, v))
|
#define ESP32_WTD_PRE(d, v) ((d)->ops->pre(d, v))
|
||||||
#define ESP32_WTD_STO(d, v, s) ((d)->ops->settimeout(d, v, s))
|
#define ESP32_WTD_STO(d, v, s) ((d)->ops->settimeout(d, v, s))
|
||||||
#define ESP32_WTD_FEED(d) ((d)->ops->feed(d))
|
#define ESP32_WTD_FEED(d) ((d)->ops->feed(d))
|
||||||
|
|||||||
@@ -679,10 +679,6 @@ int esp32_wtd_initialize(FAR const char *devpath, uint8_t wdt)
|
|||||||
|
|
||||||
ESP32_WTD_UNLOCK(lower->wtd);
|
ESP32_WTD_UNLOCK(lower->wtd);
|
||||||
|
|
||||||
/* Ensure stages are disabled and Flash boot protection was disabled */
|
|
||||||
|
|
||||||
ESP32_WTD_INITCONF(lower->wtd);
|
|
||||||
|
|
||||||
/* If it is a Main System Watchdog Timer configure the Prescale to
|
/* If it is a Main System Watchdog Timer configure the Prescale to
|
||||||
* have a 500us period.
|
* have a 500us period.
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user