diff options
Diffstat (limited to 'arch/ppc64/kernel/rtc.c')
-rw-r--r-- | arch/ppc64/kernel/rtc.c | 39 |
1 files changed, 1 insertions, 38 deletions
diff --git a/arch/ppc64/kernel/rtc.c b/arch/ppc64/kernel/rtc.c index 3e70b91375fc..67989055a9fe 100644 --- a/arch/ppc64/kernel/rtc.c +++ b/arch/ppc64/kernel/rtc.c | |||
@@ -292,47 +292,10 @@ int iSeries_set_rtc_time(struct rtc_time *tm) | |||
292 | 292 | ||
293 | void iSeries_get_boot_time(struct rtc_time *tm) | 293 | void iSeries_get_boot_time(struct rtc_time *tm) |
294 | { | 294 | { |
295 | unsigned long time; | ||
296 | static unsigned long lastsec = 1; | ||
297 | |||
298 | u32 dataWord1 = *((u32 *)(&xSpCommArea.xBcdTimeAtIplStart)); | ||
299 | u32 dataWord2 = *(((u32 *)&(xSpCommArea.xBcdTimeAtIplStart)) + 1); | ||
300 | int year = 1970; | ||
301 | int year1 = ( dataWord1 >> 24 ) & 0x000000FF; | ||
302 | int year2 = ( dataWord1 >> 16 ) & 0x000000FF; | ||
303 | int sec = ( dataWord1 >> 8 ) & 0x000000FF; | ||
304 | int min = dataWord1 & 0x000000FF; | ||
305 | int hour = ( dataWord2 >> 24 ) & 0x000000FF; | ||
306 | int day = ( dataWord2 >> 8 ) & 0x000000FF; | ||
307 | int mon = dataWord2 & 0x000000FF; | ||
308 | |||
309 | if ( piranha_simulator ) | 295 | if ( piranha_simulator ) |
310 | return; | 296 | return; |
311 | 297 | ||
312 | BCD_TO_BIN(sec); | 298 | mf_get_boot_rtc(tm); |
313 | BCD_TO_BIN(min); | ||
314 | BCD_TO_BIN(hour); | ||
315 | BCD_TO_BIN(day); | ||
316 | BCD_TO_BIN(mon); | ||
317 | BCD_TO_BIN(year1); | ||
318 | BCD_TO_BIN(year2); | ||
319 | year = year1 * 100 + year2; | ||
320 | |||
321 | time = mktime(year, mon, day, hour, min, sec); | ||
322 | time += ( jiffies / HZ ); | ||
323 | |||
324 | /* Now THIS is a nasty hack! | ||
325 | * It ensures that the first two calls get different answers. | ||
326 | * That way the loop in init_time (time.c) will not think | ||
327 | * the clock is stuck. | ||
328 | */ | ||
329 | if ( lastsec ) { | ||
330 | time -= lastsec; | ||
331 | --lastsec; | ||
332 | } | ||
333 | |||
334 | to_tm(time, tm); | ||
335 | tm->tm_year -= 1900; | ||
336 | tm->tm_mon -= 1; | 299 | tm->tm_mon -= 1; |
337 | } | 300 | } |
338 | #endif | 301 | #endif |