[openfirmware] [commit] r2196 - cpu/arm/mmp2 cpu/arm/olpc/1.75 cpu/x86/pc/olpc cpu/x86/pc/olpc/via dev/olpc/kb3700 dev/olpc/spiflash
repository service
svn at openfirmware.info
Tue May 10 19:53:29 CEST 2011
Author: wmb
Date: Tue May 10 19:53:29 2011
New Revision: 2196
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2196
Log:
OLPC - RTC Anti-rollback security feature - initial checkin.
Added:
cpu/x86/pc/olpc/guardrtc.fth
Modified:
cpu/arm/mmp2/sspspi.fth
cpu/arm/olpc/1.75/devices.fth
cpu/arm/olpc/1.75/fw.bth
cpu/x86/pc/olpc/fw.bth
cpu/x86/pc/olpc/security.fth
cpu/x86/pc/olpc/setwp.fth
cpu/x86/pc/olpc/via/fw.bth
dev/olpc/kb3700/ecio.fth
dev/olpc/spiflash/flashif.fth
dev/olpc/spiflash/spiflash.fth
Modified: cpu/arm/mmp2/sspspi.fth
==============================================================================
--- cpu/arm/mmp2/sspspi.fth Tue May 10 01:27:14 2011 (r2195)
+++ cpu/arm/mmp2/sspspi.fth Tue May 10 19:53:29 2011 (r2196)
@@ -24,12 +24,105 @@
: ssp-spi-cs-on ( -- ) d# 46 gpio-clr ;
: ssp-spi-cs-off ( -- ) d# 46 gpio-set ;
+code ssp-spi-out-in ( bo -- bi )
+ set r0,`ssp-base #`
+ begin
+ ldr r1,[r0,#8]
+ ands r1,r1,#4
+ 0<> until
+ str tos,[r0,#0x10]
+ begin
+ ldr r1,[r0,#8]
+ ands r1,r1,#8
+ 0<> until
+ ldr tos,[r0,#0x10]
+c;
+0 [if]
: ssp-spi-out-in ( bo -- bi )
begin ssp-sssr l@ 4 and until \ Tx not full
ssp-ssdr l!
begin ssp-sssr l@ 8 and until \ Rx not empty
ssp-ssdr l@
;
+[then]
+code ssp-spi-in16 ( adr -- adr' )
+ set r0,`ssp-base #`
+ set r2,#0xf04
+ set r3,#0xf008
+ mov r4,#0
+ begin
+ ldr r1,[r0,#8]
+ and r1,r1,r2
+ cmp r1,#4
+ 0= until
+ str r4,[r0,#0x10]
+ str r4,[r0,#0x10]
+ str r4,[r0,#0x10]
+ str r4,[r0,#0x10]
+ str r4,[r0,#0x10]
+ str r4,[r0,#0x10]
+ str r4,[r0,#0x10]
+ str r4,[r0,#0x10]
+ str r4,[r0,#0x10]
+ str r4,[r0,#0x10]
+ str r4,[r0,#0x10]
+ str r4,[r0,#0x10]
+ str r4,[r0,#0x10]
+ str r4,[r0,#0x10]
+ str r4,[r0,#0x10]
+ str r4,[r0,#0x10]
+ begin
+ ldr r1,[r0,#8]
+ and r1,r1,r3
+ cmp r1,r3
+ 0= until
+ ldr r4,[r0,#0x10]
+ strb r4,[tos],#1
+ ldr r4,[r0,#0x10]
+ strb r4,[tos],#1
+ ldr r4,[r0,#0x10]
+ strb r4,[tos],#1
+ ldr r4,[r0,#0x10]
+ strb r4,[tos],#1
+ ldr r4,[r0,#0x10]
+ strb r4,[tos],#1
+ ldr r4,[r0,#0x10]
+ strb r4,[tos],#1
+ ldr r4,[r0,#0x10]
+ strb r4,[tos],#1
+ ldr r4,[r0,#0x10]
+ strb r4,[tos],#1
+ ldr r4,[r0,#0x10]
+ strb r4,[tos],#1
+ ldr r4,[r0,#0x10]
+ strb r4,[tos],#1
+ ldr r4,[r0,#0x10]
+ strb r4,[tos],#1
+ ldr r4,[r0,#0x10]
+ strb r4,[tos],#1
+ ldr r4,[r0,#0x10]
+ strb r4,[tos],#1
+ ldr r4,[r0,#0x10]
+ strb r4,[tos],#1
+ ldr r4,[r0,#0x10]
+ strb r4,[tos],#1
+ ldr r4,[r0,#0x10]
+ strb r4,[tos],#1
+c;
+: fast-spi-flash-read ( adr len offset -- )
+ 3 spi-cmd spi-adr ( adr len )
+ d# 16 /mod ( adr len%16 len/16 )
+ swap >r ( adr len/16 r: len%16 )
+ 0 ?do ( adr r: len%16 )
+ ssp-spi-in16 ( adr' r: len%16 )
+ loop ( adr' r: len%16 )
+ r> 0 ?do ( adr )
+ spi-in over c! ( adr )
+ 1+ ( adr' )
+ loop ( adr )
+ drop ( )
+ spi-cs-off ( )
+;
: ssp-spi-out ( b -- ) ssp-spi-out-in drop ;
: ssp-spi-in ( -- b ) 0 ssp-spi-out-in ;
@@ -48,8 +141,10 @@
['] ssp-spi-out to spi-out
['] ssp-spi-cs-on to spi-cs-on
['] ssp-spi-cs-off to spi-cs-off
- ['] ssp-spi-reprogrammed to spi-reprogrammed
- use-spi-flash-read
+ ['] noop to spi-reprogrammed
+ ['] noop to spi-reprogrammed-no-reboot
+\ use-spi-flash-read
+ ['] fast-spi-flash-read to flash-read
;
use-ssp-spi
Modified: cpu/arm/olpc/1.75/devices.fth
==============================================================================
--- cpu/arm/olpc/1.75/devices.fth Tue May 10 01:27:14 2011 (r2195)
+++ cpu/arm/olpc/1.75/devices.fth Tue May 10 19:53:29 2011 (r2196)
@@ -103,7 +103,6 @@
fload ${BP}/dev/olpc/spiflash/spiflash.fth \ SPI FLASH programming
: ignore-power-button ; \ XXX implement me
-: ssp-spi-reprogrammed ;
fload ${BP}/cpu/arm/mmp2/sspspi.fth \ Synchronous Serial Port SPI interface
Modified: cpu/arm/olpc/1.75/fw.bth
==============================================================================
--- cpu/arm/olpc/1.75/fw.bth Tue May 10 01:27:14 2011 (r2195)
+++ cpu/arm/olpc/1.75/fw.bth Tue May 10 19:53:29 2011 (r2196)
@@ -229,6 +229,7 @@
;
code halt ( -- ) wfi c;
fload ${BP}/cpu/x86/pc/olpc/sound.fth
+fload ${BP}/cpu/x86/pc/olpc/guardrtc.fth
fload ${BP}/cpu/x86/pc/olpc/security.fth
: pre-setup-for-linux ( -- )
@@ -361,12 +362,16 @@
game-key-mask = if protect-fw try-fs-update then
;
+\ fload ${BP}/cpu/arm/mmp2/clocks.fth
+
+\ 0 [if]
: 400mhz ( -- )
h# d428.2804 l@ 7 invert and h# 7000.0000 or 1 or h# d428.2804 l!
;
: 800mhz ( -- )
h# d428.2804 l@ 7 invert and h# 7000.0000 or h# d428.2804 l!
;
+\ [then]
: startup ( -- )
standalone? 0= if exit then
Modified: cpu/x86/pc/olpc/fw.bth
==============================================================================
--- cpu/x86/pc/olpc/fw.bth Tue May 10 01:27:14 2011 (r2195)
+++ cpu/x86/pc/olpc/fw.bth Tue May 10 19:53:29 2011 (r2196)
@@ -361,6 +361,7 @@
fload ${BP}/cpu/x86/pc/olpc/setwp.fth
fload ${BP}/cpu/x86/pc/olpc/sound.fth
+fload ${BP}/cpu/x86/pc/olpc/guardrtc.fth
fload ${BP}/cpu/x86/pc/olpc/security.fth
fload ${BP}/cpu/x86/pc/olpc/xpsecure.fth
fload ${BP}/ofw/gui/ofpong.fth
Added: cpu/x86/pc/olpc/guardrtc.fth
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ cpu/x86/pc/olpc/guardrtc.fth Tue May 10 19:53:29 2011 (r2196)
@@ -0,0 +1,282 @@
+\ See license at end of file
+purpose: Real-Time Clock Anti-rollback for security
+
+\ The entry points are:
+\ rtcar-enabled? ( -- flag )
+\ True if an "rt" tag is present in manufacturing data, thus enabling anti-rollback
+\ rtc-rollback? ( -- flag )
+\ True if either a rollback attach is detected or the timestamp area is corrupt
+\ fix-rtc-timestamps ( data$ -- ) \ "count old-timestamp new-timestamp"
+\ Restores valid data in the timestamp area according to data$
+
+\ Layout of timestamp area:
+\ Bytes 0-3 - 4-byte rewrite count - little-endian
+\ Bytes 4-8 - Timestamp 0
+\ Bytes 9-13 - Timestamp 1
+\ ...
+\ Bytes 32759-32763 - Timestamp 6552
+\ Each timestamp is a 4-byte little-endian "unixtime" (seconds since
+\ epoch), followed by a 1-byte xor checksum of the preceding 4 bytes ^ 0x55
+
+5 constant /timestamp
+
+\ First 4 bytes are the write counter base value
+/l constant timestamp-start
+d# 32768 timestamp-start - /timestamp / constant #timestamps/rewrite
+#timestamps/rewrite /timestamp * constant /timestamps
+
+0 value timestamp-offset
+0 value rtc-timestamp
+0 value new-timestamp
+: +tsbuf ( offset -- adr ) mfg-data-buf + ;
+: timestamp-adr ( -- adr ) timestamp-offset +tsbuf timestamp-start + ;
+: compute-check-byte ( timestamp -- check )
+ lbsplit xor xor xor h# 55 xor
+;
+: count-base@ ( -- n ) 0 +tsbuf le-l@ ;
+: count-base! ( n -- ) 0 +tsbuf le-l! ;
+: #timestamps ( timestamp-offset -- n )
+ timestamp-offset /timestamp / ( #buffered-timestamps )
+ count-base@ + ( n )
+;
+: timestamp-bad? ( -- timestamp error? )
+ timestamp-adr le-l@ ( timestamp )
+ dup compute-check-byte ( timestamp computed-check )
+ timestamp-adr la1+ c@ <> ( timestamp error )
+;
+: set-timestamp-offset ( -- error? )
+ 0 to timestamp-offset ( )
+ 0 to rtc-timestamp
+ begin timestamp-offset /timestamps <> while ( )
+ timestamp-adr le-l@ h# ffffffff = if ( )
+ \ Verify that the rest of the area is all ff too
+ timestamp-adr /timestamps timestamp-offset - ( adr len )
+ h# ff bskip 0<> ( error? )
+ exit ( -- error? )
+ then ( )
+ timestamp-bad? if ( timestamp )
+ drop ( )
+ true exit \ Bad checksum ( -- error? )
+ else ( timestamp )
+ to rtc-timestamp ( )
+ then ( )
+
+ timestamp-offset /timestamp + to timestamp-offset ( )
+ repeat ( )
+ false ( )
+;
+
+: commit-timestamp-area ( -- )
+ flash-open ( )
+ (put-mfg-data) ( )
+ flash-close ( )
+;
+: flash-write-some ( adr len offset -- )
+ flash-open ( adr len offset )
+ flash-write ( )
+ flash-close ( )
+;
+: init-timestamp-area ( base -- )
+ count-base! ( )
+
+ timestamp-start +tsbuf /timestamps h# ff bskip if ( )
+ \ There is junk in the timestamp area so we must erase and rewrite
+ timestamp-start +tsbuf /timestamps h# ff fill ( )
+ commit-timestamp-area
+ else
+ \ The timestamp area is already erased, so we can write without erasing
+ mfg-data-buf /l mfg-data-offset flash-write-some
+ then
+
+ 0 to timestamp-offset
+;
+: rewrite-timestamp-area ( -- )
+ \ Fill the timestamp area with ff's
+ timestamp-start +tsbuf /timestamps /timestamp /string h# ff fill
+
+ \ Update the rewrite count
+ count-base@ #timestamps/rewrite + count-base!
+
+ \ Perform an erase and rewrite on the mfg data area
+ commit-timestamp-area
+;
+: update-timestamp ( -- )
+ timestamp-offset /timestamps = if ( )
+ rewrite-timestamp-area ( )
+ 0 to timestamp-offset ( )
+ then
+
+ new-timestamp dup timestamp-adr le-l! ( unixtime )
+ compute-check-byte timestamp-adr la1+ c! ( )
+ timestamp-adr /timestamp timestamp-offset timestamp-start + mfg-data-offset + flash-write-some ( )
+;
+
+: find-timestamp ( -- status )
+ get-mfg-data ( )
+
+ count-base@ h# ffffffff = if ( )
+ 0 init-timestamp-area ( )
+ then ( )
+
+ set-timestamp-offset if ( )
+ \ There is bad data after the last timestamp, if any
+ 2 exit ( -- 1 )
+ then ( )
+
+ timestamp-offset 0= if ( )
+ \ There is no data in the timestamp area
+ 1 exit ( -- 2 )
+ then ( )
+ 0 ( -- 0 )
+;
+: ?update-timestamp ( status -- status' )
+ dup 1 > if exit then ( status )
+
+ time&date >unix-seconds to new-timestamp ( status )
+
+ new-timestamp rtc-timestamp <= if ( status )
+ \ Time went backwards
+ drop 3 exit ( -- status' )
+ then ( status )
+
+ update-timestamp ( status )
+;
+
+1 buffer: byte-buf
+: encode-byte ( b -- ) byte-buf c! byte-buf 1 encode-bytes ;
+: +encode-bytes ( prop$ $ -- prop$' ) encode-bytes encode+ ;
+
+: make-timestamp-property ( -- )
+ rtc-timestamp 0= if exit then
+ " /chosen" find-package drop push-package ( )
+ rtc-timestamp unix-seconds> ( s m h d m y )
+ push-decimal ( s m h d m y )
+ #timestamps (.) encode-bytes ( s m h d m y prop$ )
+ " ," +encode-bytes rot (.4) +encode-bytes ( s m h d m prop$ )
+ " -" +encode-bytes rot (.2) +encode-bytes ( s m h d prop$' )
+ " -" +encode-bytes rot (.2) +encode-bytes ( s m h prop$' )
+ " @" +encode-bytes rot (.2) +encode-bytes ( s m prop$' )
+ " :" +encode-bytes rot (.2) +encode-bytes ( s prop$' )
+ " :" +encode-bytes rot (.2) +encode-bytes ( prop$' )
+ " "(00)" +encode-bytes ( prop$' )
+ pop-base ( )
+
+ " rtc-timestamp" (property) ( )
+ pop-package
+;
+: make-status-property ( value$ -- )
+ " /chosen" find-package drop push-package ( value$ )
+ encode-string " rtc-status" (property) ( )
+ pop-package
+;
+
+: rtcar-enabled? ( -- flag )
+ " rt" find-tag if ( data$ )
+ 2drop true ( flag )
+ else ( )
+ false ( flag )
+ then ( flag )
+;
+
+: rtc-rollback? ( -- flag )
+ rtcar-enabled? 0= if exit then
+
+ find-timestamp ( status )
+ ?update-timestamp ( status' )
+ make-timestamp-property ( status )
+ case
+ 0 of " ok" make-status-property false endof
+ 1 of " empty" make-status-property false endof
+ 2 of " residue" make-status-property true endof
+ 3 of " rollback" make-status-property true endof
+ ( default ) true swap
+ endcase
+;
+
+: parse-field ( val$ delimiter expected-length -- val$' field$ )
+ >r left-parse-string ( val$' field$ )
+ dup r> <> throw
+;
+\ Throws an error if either a number is unparsable or out of range
+: decode-number ( field$ min max -- n )
+ 2>r ( field$ r: min max )
+ push-decimal $number pop-base ( n error? r: min max )
+ throw ( n r: min max )
+ dup 2r> between 0= throw ( n )
+;
+
+: decode-timestamp ( val$ -- s m h d m y )
+ [char] - 4 parse-field d# 2000 d# 2099 decode-number >r ( val$' r: y )
+ [char] - 2 parse-field 1 d# 12 decode-number >r ( val$' r: y m )
+ [char] @ 2 parse-field 1 d# 31 decode-number >r ( val$' r: y m d )
+ [char] : 2 parse-field 0 d# 23 decode-number >r ( val$' r: y m d h )
+ [char] : 2 parse-field 0 d# 59 decode-number >r ( val$' r: y m d h m )
+ dup 2 <> throw 0 d# 59 decode-number >r ( r: y m d h m s )
+ r> r> r> r> r> r> ( s m h d m y )
+;
+: fix-rtc-timestamps ( data$ -- ) \ "count old-ts new-ts" e.g. 2011-10-12,00:23:45
+ bl left-parse-string ( rem$ count$ )
+
+ 0 h# 7fffffff ['] decode-number catch if ( rem$ x x x x )
+ 4drop 2drop ." Bad count format" cr ( )
+ exit ( -- )
+ then ( rem$ count )
+ -rot ( count rem$ )
+
+ find-timestamp ( count rem$ )
+
+ bl left-parse-string ( count rem$ old-timestamp$ )
+ 2dup " no-timestamp" $= if ( count rem$ old-timestamp$ )
+ 2drop ( count rem$ )
+ rtc-timestamp if ( count rem$ )
+ 3drop ( )
+ ." Old timestamp mismatch" cr ( )
+ exit ( -- )
+ then
+ else ( count rem$ old-timestamp$ )
+ ['] decode-timestamp catch if ( count rem$ x x )
+ 5drop ( )
+ ." Bad timestamp format" cr ( )
+ exit ( -- )
+ then ( count rem$ s m h d m y )
+ then ( count rem$ s m h d m y )
+
+ >unix-seconds ( count rem$ old-timestamp )
+ rtc-timestamp <> if ( count rem$ )
+ 3drop ( )
+ ." Old timestamp mismatch" cr ( )
+ exit ( -- )
+ then ( count rem$ )
+ rot init-timestamp-area ( rem$ )
+
+ ['] decode-timestamp catch if ( x x )
+ 2drop ." Bad timestamp format" cr ( )
+ exit ( -- )
+ then ( s m h d m y )
+ >unix-seconds to new-timestamp ( )
+ update-timestamp ( )
+;
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2011 FirmWorks
+\
+\ Permission is hereby granted, free of charge, to any person obtaining
+\ a copy of this software and associated documentation files (the
+\ "Software"), to deal in the Software without restriction, including
+\ without limitation the rights to use, copy, modify, merge, publish,
+\ distribute, sublicense, and/or sell copies of the Software, and to
+\ permit persons to whom the Software is furnished to do so, subject to
+\ the following conditions:
+\
+\ The above copyright notice and this permission notice shall be
+\ included in all copies or substantial portions of the Software.
+\
+\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+\
+\ LICENSE_END
Modified: cpu/x86/pc/olpc/security.fth
==============================================================================
--- cpu/x86/pc/olpc/security.fth Tue May 10 01:27:14 2011 (r2195)
+++ cpu/x86/pc/olpc/security.fth Tue May 10 19:53:29 2011 (r2196)
@@ -728,7 +728,11 @@
" ak" find-tag if
2drop " run"
else
- lease-valid? if " run" else " act" then
+ rtc-rollback? if
+ " act"
+ else
+ lease-valid? if " run" else " act" then
+ then
then
cn-buf place
;
@@ -951,6 +955,39 @@
r> to debug-security?
;
+: fix-rtc-history ( data$ -- ) \ SN UUID counter timestamp newtimestamp
+ \ Isolate data from first line
+ newline left-parse-string 2nip ( rem$ )
+
+ bl left-parse-string ( rem$ serial$ )
+ my-sn$ $= 0= if ( rem$ )
+ ." Wrong serial number" ?lease-error-cr ( rem$ )
+ 2drop exit ( -- )
+ then ( rem$ )
+
+ \ Ignore UUID for now
+ bl left-parse-string ( rem$ uuid$ )
+ 2drop ( rem$ )
+
+ fix-rtc-timestamps ( )
+;
+
+: ?rtc-update ( -- )
+ rtcar-enabled? 0= if exit then
+ show-dot
+ null$ cn-buf place
+ " rtcreset" bundle-present? if
+ " RTCRESET found - " ?lease-debug
+ leasekey$ to pubkey$
+ img$ sig$ sha-valid? if
+ img$ fix-rtc-history
+ show-unlock
+ else
+ show-lock
+ then
+ then
+;
+
: load-from-device ( devname$ -- done? )
show-dot
@@ -972,6 +1009,8 @@
then
then
+ ?rtc-update
+
show-dot
?leased \ Sets cn-buf
Modified: cpu/x86/pc/olpc/setwp.fth
==============================================================================
--- cpu/x86/pc/olpc/setwp.fth Tue May 10 01:27:14 2011 (r2195)
+++ cpu/x86/pc/olpc/setwp.fth Tue May 10 19:53:29 2011 (r2196)
@@ -1,3 +1,6 @@
+\ See license at end of file
+purpose: Changing manufacturing data - adding and deleting tags
+
\ Set the write protect tag. This is used to convert unlocked prototype
\ machined to locked machines for testing the firmware security. This
\ should not be necessary once mass production systems start coming from
@@ -217,3 +220,27 @@
$add-tag ( data$ )
free-mem
;
+
+\ LICENSE_BEGIN
+\ Copyright (c) 2007 FirmWorks
+\
+\ Permission is hereby granted, free of charge, to any person obtaining
+\ a copy of this software and associated documentation files (the
+\ "Software"), to deal in the Software without restriction, including
+\ without limitation the rights to use, copy, modify, merge, publish,
+\ distribute, sublicense, and/or sell copies of the Software, and to
+\ permit persons to whom the Software is furnished to do so, subject to
+\ the following conditions:
+\
+\ The above copyright notice and this permission notice shall be
+\ included in all copies or substantial portions of the Software.
+\
+\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+\
+\ LICENSE_END
Modified: cpu/x86/pc/olpc/via/fw.bth
==============================================================================
--- cpu/x86/pc/olpc/via/fw.bth Tue May 10 01:27:14 2011 (r2195)
+++ cpu/x86/pc/olpc/via/fw.bth Tue May 10 19:53:29 2011 (r2196)
@@ -406,6 +406,7 @@
fload ${BP}/cpu/x86/firfilter.fth
fload ${BP}/cpu/x86/pc/olpc/sound.fth
fload ${BP}/cpu/x86/pc/olpc/via/sound.fth
+fload ${BP}/cpu/x86/pc/olpc/guardrtc.fth
fload ${BP}/cpu/x86/pc/olpc/security.fth
fload ${BP}/cpu/x86/pc/olpc/xpsecure.fth
fload ${BP}/ofw/gui/ofpong.fth
Modified: dev/olpc/kb3700/ecio.fth
==============================================================================
--- dev/olpc/kb3700/ecio.fth Tue May 10 01:27:14 2011 (r2195)
+++ dev/olpc/kb3700/ecio.fth Tue May 10 19:53:29 2011 (r2196)
@@ -348,6 +348,10 @@
." Restarting..." d# 2000 ms cr
kbc-on begin again
;
+: io-spi-reprogrammed-no-reboot ( -- )
+ no-kbc-reboot
+ kbc-on
+;
: io-spi-start ( -- )
['] io-spi@ to spi@
@@ -356,6 +360,7 @@
use-ec-spi \ spi-in, spi-cs-on, spi-cs-off via EC commands
['] io-spi-reprogrammed to spi-reprogrammed
+ ['] io-spi-reprogrammed-no-reboot to spi-reprogrammed-no-reboot
use-mem-flash-read
[ifdef] uncache-flash uncache-flash [then]
Modified: dev/olpc/spiflash/flashif.fth
==============================================================================
--- dev/olpc/spiflash/flashif.fth Tue May 10 01:27:14 2011 (r2195)
+++ dev/olpc/spiflash/flashif.fth Tue May 10 19:53:29 2011 (r2196)
@@ -2,6 +2,7 @@
purpose: Generic interface for FLASH programming operations
defer flash-open ( -- )
+defer flash-close ( -- )
defer flash-write-enable ( -- )
defer flash-write-disable ( -- )
defer flash-write ( adr len offset -- )
Modified: dev/olpc/spiflash/spiflash.fth
==============================================================================
--- dev/olpc/spiflash/spiflash.fth Tue May 10 01:27:14 2011 (r2195)
+++ dev/olpc/spiflash/spiflash.fth Tue May 10 19:53:29 2011 (r2196)
@@ -219,6 +219,8 @@
defer spi-reprogrammed ( -- ) \ What to do when done reprogramming
' noop to spi-reprogrammed
+defer spi-reprogrammed-no-reboot ( -- ) \ What to do when done reprogramming
+' noop to spi-reprogrammed-no-reboot
defer write-spi-flash ( adr len offset -- )
@@ -312,6 +314,7 @@
\ Install the SPI FLASH versions as their implementations.
: use-spi-flash ( -- )
['] spi-flash-open to flash-open
+ ['] spi-reprogrammed-no-reboot to flash-close
['] spi-flash-write-enable to flash-write-enable
['] spi-reprogrammed to flash-write-disable
['] write-spi-flash to flash-write
More information about the openfirmware
mailing list