--- alpha-rtc/arch/alpha/kernel/time.c.~1~ Tue Oct 3 06:14:16 2000 +++ alpha-rtc/arch/alpha/kernel/time.c Tue Oct 3 14:46:23 2000 @@ -236,7 +236,7 @@ time_init(void) { void (*irq_handler)(int, void *, struct pt_regs *); - unsigned int year, mon, day, hour, min, sec, cc1, cc2; + unsigned int year, mon, day, hour, min, sec, cc1, cc2, epoch; unsigned long cycle_freq, ppm_error; long diff; @@ -311,16 +311,21 @@ BCD_TO_BIN(mon); BCD_TO_BIN(year); } -#ifdef ALPHA_PRE_V1_2_SRM_CONSOLE - /* - * The meaning of life, the universe, and everything. Plus - * this makes the year come out right on SRM consoles earlier - * than v1.2. - */ - year -= 42; -#endif - if ((year += 1900) < 1970) + + /* PC-like is standard; used for year < 20 || year >= 70 */ + epoch = 1900; + if (year >= 20 && year < 48) + /* NT epoch */ + epoch = 1980; + else if (year >= 48 && year < 70) + /* Digital UNIX epoch */ + epoch = 1952; + + printk(KERN_INFO "Using epoch = %d\n", epoch); + + if ((year += epoch) < 1970) year += 100; + xtime.tv_sec = mktime(year, mon, day, hour, min, sec); xtime.tv_usec = 0; --- alpha-rtc/drivers/char/rtc.c.~1~ Tue Oct 3 06:14:18 2000 +++ alpha-rtc/drivers/char/rtc.c Tue Oct 3 06:26:37 2000 @@ -561,9 +561,12 @@ if (year > 10 && year < 44) { epoch = 1980; guess = "ARC console"; - } else if (year < 96) { + } else if (year >= 48 && year < 70) { epoch = 1952; guess = "Digital UNIX"; + } else if (year >= 70 && year < 100) { + epoch = 1928; + guess = "Digital DECstation"; } if (guess) printk("rtc: %s epoch (%lu) detected\n", guess, epoch);