[openfirmware] [commit] r3631 - cpu/arm/olpc dev

repository service svn at openfirmware.info
Thu Mar 28 00:57:23 CET 2013


Author: quozl
Date: Thu Mar 28 00:57:22 2013
New Revision: 3631
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/3631

Log:
OLPC - avoid use of RTC undefined data, by detecting power loss and
clearing the RTC count.

XO-1 and XO-1.5 (ds1385): clear all the RTC count registers, not only
the date.

XO-1.75 and XO-4 (ds1338): force the century to 20 like on previous
models, check and clear the oscillator stop flag, clear all the RTC
count registers, separate the clearing of RTC SRAM from the clearing
of RTC count, and fix a regression in r3608 where the wrong register
offsets were used.

Modified:
   cpu/arm/olpc/rtc.fth
   dev/ds1385r.fth

Modified: cpu/arm/olpc/rtc.fth
==============================================================================
--- cpu/arm/olpc/rtc.fth	Tue Mar 26 07:26:33 2013	(r3630)
+++ cpu/arm/olpc/rtc.fth	Thu Mar 28 00:57:22 2013	(r3631)
@@ -12,12 +12,20 @@
 
 headerless
 
+: reinit
+   h# 20 h#  8 rtc! \ century
+   h# 13 h#  6 rtc! \ year
+   h#  1 h#  5 rtc! \ month
+   h#  1 h#  4 rtc! \ day of month
+   h#  2 h#  3 rtc! \ day of week, monday
+   h#  0 h#  2 rtc! \ hours
+   h#  0 h#  1 rtc! \ minutes
+   h#  0 h#  0 rtc! \ seconds
+   ." RTC cleared" cr
+;
+
 : ?clear
    h# 3f rtc@  h# 3e rtc@  bwjoin  h# 55aa  <>  if
-      h# 20 h#  8 rtc!                 \ century
-      h# 13 h#  9 rtc!                 \ year
-      h#  1 h#  8 rtc!                 \ month
-      h#  1 h#  7 rtc!                 \ day
       h# 20 h# 10  do  0 i rtc!  loop  \ wipe cmos@ cmos! area
       h# 55aa  wbsplit  h# 3e rtc!  h# 3f rtc!
       ." RTC SRAM cleared" cr
@@ -44,6 +52,12 @@
       drop true                ( true )
    then                        ( okay? )
 
+   \ check and clear the oscillator stop flag
+   7 rtc@ h# 20 and  if
+      reinit
+      7 rtc@ h# 20 invert and 7 rtc!
+   then
+
    \ manage legacy RTC CMOS usage
    ?clear
 
@@ -69,6 +83,7 @@
    bcd-time&date  >r >r >r >r >r >r
    bcd>  r> bcd>  r> bcd>  r> bcd>  r> bcd>  r> bcd>  r> bcd> ( s m h d m y c )
 
+   d# 20 max
    d# 100 * +  		\ Merge century with year
 ;
 : set-time  ( s m h d m y -- )

Modified: dev/ds1385r.fth
==============================================================================
--- dev/ds1385r.fth	Tue Mar 26 07:26:33 2013	(r3630)
+++ dev/ds1385r.fth	Thu Mar 28 00:57:22 2013	(r3631)
@@ -89,10 +89,14 @@
    then
 ;
 : reinit
-   h# 20 h# 1a rtc!
-   h# 13 h#  9 rtc!
-   h#  1 h#  8 rtc!
-   h#  1 h#  7 rtc!
+   h# 20 h# 1a rtc! \ century
+   h# 13 h#  9 rtc! \ year
+   h#  1 h#  8 rtc! \ month
+   h#  1 h#  7 rtc! \ day of the month
+   h#  2 h#  6 rtc! \ day of week, monday
+   h#  0 h#  4 rtc! \ hours
+   h#  0 h#  2 rtc! \ minutes
+   h#  0 h#  0 rtc! \ seconds
    ." RTC cleared" cr
 ;
 true value first-open?
@@ -137,13 +141,7 @@
    bcd-time&date  >r >r >r >r >r >r
    bcd>  r> bcd>  r> bcd>  r> bcd>  r> bcd>  r> bcd>  r> bcd> ( s m h d m y c )
 
-   \ We allow the century byte to force the year to 20xx, but not to force
-   \ it to 19xx, because that would cause a problem when the century
-   \ rolls over.
-   dup  d# 20 <>  if
-      drop  dup d# 94 <  if  d# 20  else  d# 19  then
-   then
-
+   d# 20 max
    d# 100 * +  		\ Merge century with year
 ;
 : set-time  ( s m h d m y -- )



More information about the openfirmware mailing list