[openfirmware] [commit] r2033 - dev/olpc/kb3700

repository service svn at openfirmware.info
Tue Nov 23 23:34:45 CET 2010


Author: wmb
Date: Tue Nov 23 23:34:45 2010
New Revision: 2033
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2033

Log:
OLPC XO-1.75 - Fixed race condition in EC SPI module.

Modified:
   dev/olpc/kb3700/spicmd.fth

Modified: dev/olpc/kb3700/spicmd.fth
==============================================================================
--- dev/olpc/kb3700/spicmd.fth	Tue Nov 23 00:42:23 2010	(r2032)
+++ dev/olpc/kb3700/spicmd.fth	Tue Nov 23 23:34:45 2010	(r2033)
@@ -241,6 +241,7 @@
    pulse-ack
 ;
 : (upstream)  ( -- )
+   rxavail 2 <>  if  ." ec-spi rxavail = " rxavail . cr  debug-me  then
    ssp-ssdr rl@  ssp-ssdr rl@              ( channel# data )
    debug? if
       ." UP: " over . dup . cr
@@ -265,7 +266,9 @@
 ;
 
 : poll  ( -- )
+   lock[
    ssp-ready?  if  do-state  then
+   ]unlock
    debug?  if  key?  if  key drop debug-me  then  then
 ;
 : cancel-command  ( -- )  \ Called when the command child times out
@@ -354,10 +357,20 @@
    dup 5 >  abort" Too many EC command arguments"
    ec-cmdbuf 3 +   swap  bounds  ?do  i c!  loop  ( )
 ;
+: timed-get-data  ( -- b )
+   get-msecs  d# 20 +   begin         ( limit )
+      " get-data?" $call-parent  if   ( limit data )
+         nip exit
+      then                            ( limit )
+      dup get-msecs - 0<              ( limit )
+   until                              ( limit )
+   drop
+   true abort" EC command result timeout"
+;
+   
 : get-results  ( -- [ results ] )
    ec-respbuf  #results  bounds  ?do
-      begin  " get-data?" $call-parent  until  ( byte )
-      i c!
+      timed-get-data i c!
    loop
 
    #results 0 ?do  \ XXX maybe this loop should go backwards?



More information about the openfirmware mailing list