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 |
