|
@@ -739,12 +739,20 @@ static int __init get_freq(char *name, int cells, unsigned long *val)
|
|
|
static void start_cpu_decrementer(void)
|
|
|
{
|
|
|
#if defined(CONFIG_BOOKE) || defined(CONFIG_40x)
|
|
|
+ unsigned int tcr;
|
|
|
+
|
|
|
/* Clear any pending timer interrupts */
|
|
|
mtspr(SPRN_TSR, TSR_ENW | TSR_WIS | TSR_DIS | TSR_FIS);
|
|
|
|
|
|
- /* Enable decrementer interrupt */
|
|
|
- mtspr(SPRN_TCR, TCR_DIE);
|
|
|
-#endif /* defined(CONFIG_BOOKE) || defined(CONFIG_40x) */
|
|
|
+ tcr = mfspr(SPRN_TCR);
|
|
|
+ /*
|
|
|
+ * The watchdog may have already been enabled by u-boot. So leave
|
|
|
+ * TRC[WP] (Watchdog Period) alone.
|
|
|
+ */
|
|
|
+ tcr &= TCR_WP_MASK; /* Clear all bits except for TCR[WP] */
|
|
|
+ tcr |= TCR_DIE; /* Enable decrementer */
|
|
|
+ mtspr(SPRN_TCR, tcr);
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
void __init generic_calibrate_decr(void)
|