Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 19 Sep 2004 23:52:02 +0200
From:      Marius Strobl <marius@alchemy.franken.de>
To:        freebsd-sparc64@freebsd.org
Subject:   HEADS UP [marius@freebsd.org: cvs commit: src/sys/dev/mk48txx mk48txx.c mk48txxreg.h]
Message-ID:  <20040919235202.A68697@newtrinity.zeist.de>

next in thread | raw e-mail | index | archive | help

As this commit changes the format FreeBSD stores the date in the clock
of the 'eeprom' device you will get another "Invalid time in real time
clock. Check and reset the date immediately!" after updating when the
date was previously set using FreeBSD. To get rid of it set the date
again with date(1) or ntpdate(8).

  Modified files:
    sys/dev/mk48txx      mk48txx.c mk48txxreg.h 
  Log:
  - Some of the upper bits of the time related (seconds, minutes, etc.)
    registers are control bits or depending on the model contain additional
    time bits with a different meaning than the lower ones. In order to
    only read the desired time bits and not change the upper bits on write
    use appropriate masks in the gettime and settime function respectively.
    Due to the polarity of the stop oscillator bit and the fact that the
    century bits aren't used on sparc64 not masking them didn't cause
    problems so far.
  - Fix two off-by-one errors in the handling of the day of week. The
    genclock code represents the dow as 0 - 6 with 0 being Sunday but the
    mk48txx use 1 - 7 with 1 being Sunday. In the settime function when
    writing the dow to the clock the range wasn't adjusted accordingly but
    the clock apparently played along nicely otherwise the second bug in
    the gettime function which mapped 1 - 7 to 0 - 6 but with 0 meaning
    Saturday would have been triggered. Fixing these makes the date being
    stored in the same format Sun/Solaris uses and cures the "Invalid time
    in real time clock. Check and reset the date immediately!" when the
    date was set under Solaris prior to booting FreeBSD/sparc64. [1]
    Looking at other clock drivers/code e.g. FreeBSD/alpha the former "bug",
    i.e. storing the dow as 0 - 6 even when the clock uses 1 - 7, seems to
    be common but might be on purpose for compatibility when multi-booting
    with other OS which do the same. So it might make sense to add a flag
    to handle the dow off-by-one for use of this driver on platforms other
    than sparc64.
  - Check the state of the battery on mk48txx that support this in the
    attach function.
  - Add a note that use of the century bit should be implemented but isn't
    required at the moment because it isn't used on sparc64.
  
  Problem noted by:       joerg [1]
  MT5 candidate.
  
  Revision  Changes    Path
  1.4       +53 -14    src/sys/dev/mk48txx/mk48txx.c
  1.2       +78 -5     src/sys/dev/mk48txx/mk48txxreg.h



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040919235202.A68697>