• Finn Thain's avatar
    m68k: Fix off-by-one calendar month · b65769fc
    Finn Thain authored
    This fixes a bug in read_persistent_clock() which causes the system
    clock to lag the Real Time Clock by one month. The problem was noticed
    on a Mac, but theoretically it must also affect Atari, BVME6000 and Q40.
    
    The tm_mon value in the struct rtc_time passed to mach_hwclk() is
    zero-based, and atari_mste_hwclk(), atari_tt_hwclk(), bvme6000_hwclk(),
    mac_hwclk() and q40_hwclk() all make this adjustment. Unfortunately,
    dn_dummy_hwclk(), mvme147_hwclk(), mvme16x_hwclk(), sun3_hwclk() and
    sun3x_hwclk() fail to decrement tm_mon.  Also m68328_hwclk() assumes
    a one-based tm_mon.
    
    Bring these platforms into line and fix read_persistent_clock() so it
    works correctly on all m68k platforms.
    
    The datasheets for the RTC devices found on the affected platforms
    all confirm that the year is stored as a value in the range 0-99 and
    the month is stored as a value in the range 1-12. Please refer to the
    datasheets for MC146818 (Apollo), DS1643 (MVME), ICM7170 (Sun 3)
    and M48T02 (Sun 3x).
    Reported-by: default avatarStan Johnson <userm57@yahoo.com>
    Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
    Reviewed-by: default avatarArnd Bergmann <arnd@arndb.de>
    Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
    b65769fc
timers.c 3.42 KB