@@ -200,9 +200,16 @@ void lpc23xx_restart(enum reboot_mode mode, const char *cmd)
__raw_writel(LPC32XX_CLKPWR_PWMCLK_WDOG_EN,
LPC32XX_CLKPWR_TIMER_CLK_CTRL);
- /* Instant assert of RESETOUT_N with pulse length 1mS */
- __raw_writel(13000, io_p2v(LPC32XX_WDTIM_BASE + 0x18));
- __raw_writel(0x70, io_p2v(LPC32XX_WDTIM_BASE + 0xC));
+ if (mode == REBOOT_SOFT) {
+ /* Force match output active */
+ __raw_writel(0x01, io_p2v(LPC32XX_WDTIM_BASE + 0x14));
+ /* Enable internal reset on match output (RESOUT_N not asserted) */
+ __raw_writel(0x08, io_p2v(LPC32XX_WDTIM_BASE + 0xC));
+ } else {
+ /* Instant assert of RESETOUT_N with pulse length 1mS */
+ __raw_writel(13000, io_p2v(LPC32XX_WDTIM_BASE + 0x18));
+ __raw_writel(0x70, io_p2v(LPC32XX_WDTIM_BASE + 0xC));
+ }
/* Wait for watchdog to reset system */
while (1)