/**
 * Reset the cpu by setting up the watchdog timer and let it time out
 */
void __noreturn reset_cpu (unsigned long ignored)
{
        while ( ignored ) { ; };

	/* Disable watchdog and set Time-Out field to minimum timeout value */
	MCF_GPT_GMS0 = 0;
	MCF_GPT_GCIR0 =  MCF_GPT_GCIR_PRE(1) | MCF_GPT_GCIR_CNT(0xffff);

	/* Enable watchdog */
	MCF_GPT_GMS0 = MCF_GPT_GMS_OCPW(0xA5) | MCF_GPT_GMS_WDEN | MCF_GPT_GMS_CE | MCF_GPT_GMS_TMS_GPIO;

	while (1);
	/*NOTREACHED*/
}
示例#2
0
static void wdt_enable(void)
{
	unsigned int gms0;

	/* preserve GPIO usage, if any */
	gms0 = __raw_readl(MCF_GPT_GMS0);
	if (gms0 & MCF_GPT_GMS_TMS_GPIO)
		gms0 &= (MCF_GPT_GMS_TMS_GPIO | MCF_GPT_GMS_GPIO_MASK
							| MCF_GPT_GMS_OD);
	else
		gms0 = MCF_GPT_GMS_TMS_GPIO | MCF_GPT_GMS_OD;
	__raw_writel(gms0, MCF_GPT_GMS0);
	__raw_writel(MCF_GPT_GCIR_PRE(heartbeat*(MCF_BUSCLK/0xffff)) |
			MCF_GPT_GCIR_CNT(0xffff), MCF_GPT_GCIR0);
	gms0 |= MCF_GPT_GMS_OCPW(0xA5) | MCF_GPT_GMS_WDEN | MCF_GPT_GMS_CE;
	__raw_writel(gms0, MCF_GPT_GMS0);
}