|
|
@@ -171,14 +171,17 @@ unsigned int get_c0_compare_int(void)
|
|
|
|
|
|
static void __init init_rtc(void)
|
|
|
{
|
|
|
- /* stop the clock whilst setting it up */
|
|
|
- CMOS_WRITE(RTC_SET | RTC_24H, RTC_CONTROL);
|
|
|
+ unsigned char freq, ctrl;
|
|
|
|
|
|
- /* 32KHz time base */
|
|
|
- CMOS_WRITE(RTC_REF_CLCK_32KHZ, RTC_FREQ_SELECT);
|
|
|
+ /* Set 32KHz time base if not already set */
|
|
|
+ freq = CMOS_READ(RTC_FREQ_SELECT);
|
|
|
+ if ((freq & RTC_DIV_CTL) != RTC_REF_CLCK_32KHZ)
|
|
|
+ CMOS_WRITE(RTC_REF_CLCK_32KHZ, RTC_FREQ_SELECT);
|
|
|
|
|
|
- /* start the clock */
|
|
|
- CMOS_WRITE(RTC_24H, RTC_CONTROL);
|
|
|
+ /* Ensure SET bit is clear so RTC can run */
|
|
|
+ ctrl = CMOS_READ(RTC_CONTROL);
|
|
|
+ if (ctrl & RTC_SET)
|
|
|
+ CMOS_WRITE(ctrl & ~RTC_SET, RTC_CONTROL);
|
|
|
}
|
|
|
|
|
|
void __init plat_time_init(void)
|