11 T_WDT_ACTION_TYPE action;
16 LOCAL T_WDT_CTRL wdt_ctrl;
18 /*!- Initialize watchdog timer
22 cmnos_wdt_last_boot(void)
25 if (HAL_WORD_REG_READ(MAGPIE_REG_RST_WDT_TIMER_CTRL_ADDR) & 0x80000000 )
28 return ENUM_COLD_BOOT;
31 #if defined(PROJECT_MAGPIE)
32 if ( *((volatile uint32_t*)WATCH_DOG_MAGIC_PATTERN_ADDR) == WDT_MAGIC_PATTERN )
34 else if ( *((volatile uint32_t*)WATCH_DOG_MAGIC_PATTERN_ADDR) == SUS_MAGIC_PATTERN )
35 return ENUM_SUSP_BOOT;
37 return ENUM_COLD_BOOT;
38 #elif defined(PROJECT_K2)
39 //if (HAL_WORD_REG_READ(MAGPIE_REG_RST_STATUS_ADDR) == WDT_MAGIC_PATTERN || HAL_WORD_REG_READ(MAGPIE_REG_RST_STATUS_ADDR) == SUS_MAGIC_PATTERN)
40 if ( HAL_WORD_REG_READ(MAGPIE_REG_RST_STATUS_ADDR) == WDT_MAGIC_PATTERN )
42 else if ( HAL_WORD_REG_READ(MAGPIE_REG_RST_STATUS_ADDR) == SUS_MAGIC_PATTERN )
43 return ENUM_SUSP_BOOT;
45 return ENUM_COLD_BOOT;
46 #endif /* #if defined(PROJECT_MAGPIE) */
50 /*!- trigger a wdt reset.
56 HAL_WORD_REG_WRITE(MAGPIE_REG_RST_WDT_TIMER_CTRL_ADDR, WDT_ACTION_RESET);
57 HAL_WORD_REG_WRITE(MAGPIE_REG_RST_WDT_TIMER_ADDR, 0x100);
58 while(1); // never return;
62 /*!- setup the timeout value.
66 cmnos_wdt_set(T_WDT_CMD wdt_cmd)
71 if( wdt_cmd.timeout>0 ) //dummy check
73 wdt_ctrl.timeout = wdt_cmd.timeout;
74 HAL_WORD_REG_WRITE(MAGPIE_REG_RST_WDT_TIMER_ADDR, wdt_ctrl.timeout);
79 if( wdt_cmd.action < WDT_ACTION_UNKNOWN )
81 wdt_ctrl.action = wdt_cmd.action;
82 HAL_WORD_REG_WRITE(MAGPIE_REG_RST_WDT_TIMER_CTRL_ADDR, wdt_ctrl.action);
88 /*!- Enable watchdog timer.
95 wdt_ctrl.state = TRUE;
97 wdt_cmd.cmd = WDT_ACTION;
98 wdt_cmd.action = WDT_ACTION_RESET;
99 cmnos_wdt_set(wdt_cmd);
100 //HAL_WORD_REG_WRITE(MAGPIE_REG_RST_WDT_TIMER_CTRL_ADDR, HAL_WORD_REG_READ(MAGPIE_REG_RST_WDT_TIMER_CTRL_ADDR)|(BIT0|BIT1));
103 /*!- Disable watchdog timer.
111 wdt_ctrl.state = FALSE;
113 wdt_cmd.cmd = WDT_ACTION;
114 wdt_cmd.action = WDT_ACTION_NO;
115 cmnos_wdt_set(wdt_cmd);
116 // HAL_WORD_REG_WRITE(MAGPIE_REG_RST_WDT_TIMER_CTRL_ADDR, (HAL_WORD_REG_READ(MAGPIE_REG_RST_WDT_TIMER_CTRL_ADDR)&(~(BIT0|BIT1))));
117 // MAGPIE_REG_RST_WDT_TIMER_CTRL &= ~(BIT0|BIT1);
121 /*!- Initialize watchdog timer
129 //wdt_init_done = TRUE;
130 wdt_ctrl.state = FALSE;
131 wdt_ctrl.action = WDT_ACTION_NO;
132 wdt_ctrl.timeout = WDT_DEFAULT_TIMEOUT_VALUE;
134 // should be init outside but just kick it ticking at here for workaround
137 wdt_cmd.cmd = WDT_TIMEOUT;
138 wdt_cmd.timeout= wdt_ctrl.timeout;
139 cmnos_wdt_set(wdt_cmd);
143 /*!- update the watchdog timer timerout value.
149 // if wdt is not enable, just skip the update
152 HAL_WORD_REG_WRITE(MAGPIE_REG_RST_WDT_TIMER_ADDR, wdt_ctrl.timeout);
158 cmnos_wdt_module_install(struct wdt_api *tbl)
160 tbl->_wdt_init = cmnos_wdt_init;
161 tbl->_wdt_enable = cmnos_wdt_enable;
162 tbl->_wdt_disable = cmnos_wdt_disable;
163 tbl->_wdt_set = cmnos_wdt_set;
164 tbl->_wdt_task = cmnos_wdt_task;
165 tbl->_wdt_reset = cmnos_wdt_reset;
166 tbl->_wdt_last_boot = cmnos_wdt_last_boot;
169 #endif /* SYSTEM_MODULE_WDT */