|
@@ -42,11 +42,10 @@
|
|
|
static int at91_wdt_settimeout(unsigned int timeout)
|
|
|
{
|
|
|
unsigned int reg;
|
|
|
- unsigned int mr;
|
|
|
+ at91_wdt_t *wd = (at91_wdt_t *) AT91_WDT_BASE;
|
|
|
|
|
|
/* Check if disabled */
|
|
|
- mr = at91_sys_read(AT91_WDT_MR);
|
|
|
- if (mr & AT91_WDT_WDDIS) {
|
|
|
+ if (readl(&wd->mr) & AT91_WDT_MR_WDDIS) {
|
|
|
printf("sorry, watchdog is disabled\n");
|
|
|
return -1;
|
|
|
}
|
|
@@ -57,19 +56,21 @@ static int at91_wdt_settimeout(unsigned int timeout)
|
|
|
* Since WDV is a 12-bit counter, the maximum period is
|
|
|
* 4096 / 256 = 16 seconds.
|
|
|
*/
|
|
|
- reg = AT91_WDT_WDRSTEN /* causes watchdog reset */
|
|
|
- /* | AT91_WDT_WDRPROC causes processor reset only */
|
|
|
- | AT91_WDT_WDDBGHLT /* disabled in debug mode */
|
|
|
- | AT91_WDT_WDD /* restart at any time */
|
|
|
- | (timeout & AT91_WDT_WDV); /* timer value */
|
|
|
- at91_sys_write(AT91_WDT_MR, reg);
|
|
|
+
|
|
|
+ reg = AT91_WDT_MR_WDRSTEN /* causes watchdog reset */
|
|
|
+ | AT91_WDT_MR_WDDBGHLT /* disabled in debug mode */
|
|
|
+ | AT91_WDT_MR_WDD(0xfff) /* restart at any time */
|
|
|
+ | AT91_WDT_MR_WDV(timeout); /* timer value */
|
|
|
+
|
|
|
+ writel(reg, &wd->mr);
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
void hw_watchdog_reset(void)
|
|
|
{
|
|
|
- at91_sys_write(AT91_WDT_CR, AT91_WDT_KEY | AT91_WDT_WDRSTT);
|
|
|
+ at91_wdt_t *wd = (at91_wdt_t *) AT91_WDT_BASE;
|
|
|
+ writel(AT91_WDT_CR_WDRSTT | AT91_WDT_CR_KEY, &wd->cr);
|
|
|
}
|
|
|
|
|
|
void hw_watchdog_init(void)
|