[openfirmware] [commit] r2706 - in cpu: arm/olpc/1.75 x86/pc/olpc

repository service svn at openfirmware.info
Mon Nov 28 06:37:17 CET 2011


Author: quozl
Date: Mon Nov 28 06:37:17 2011
New Revision: 2706
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2706

Log:
OLPC XO-1.75 - synchronise EC flags flash page when reprogramming manufacturing tags #11493 (thanks to Mitch for initial design on 22nd August), and fix flash-ec which was failing if any flags were set.

Modified:
   cpu/arm/olpc/1.75/ecflash.fth
   cpu/arm/olpc/1.75/edi.fth
   cpu/x86/pc/olpc/setwp.fth

Modified: cpu/arm/olpc/1.75/ecflash.fth
==============================================================================
--- cpu/arm/olpc/1.75/ecflash.fth	Mon Nov 28 01:05:38 2011	(r2705)
+++ cpu/arm/olpc/1.75/ecflash.fth	Mon Nov 28 06:37:17 2011	(r2706)
@@ -36,6 +36,25 @@
 ;
 \ Tells the EC to auto-restart after power cycling
 : set-ec-reboot  ( -- )  1 h# f018 edi-b!  ;
+: ?reflash-ec-flags  ( adr -- )
+   use-edi-spi                          ( adr )
+   spi-start                            ( adr )  \ avoids holding EC in reset
+   load-base /flash-page ec-flags-offset edi-read-flash         ( adr )
+   dup load-base /flash-page comp       ( adr different? )
+   if
+      edi-open                          ( adr )
+      hdd-led-on                        ( adr )
+      ec-flags-offset erase-page        ( adr )
+      ec-flags-offset edi-program-page  ( )
+      hdd-led-off
+      set-ec-reboot
+      unreset-8051                      \ should not return
+      ec-power-cycle
+   then
+   drop                                 ( )
+   use-ssp-spi
+;
+: ignore-ec-flags  ( adr -- )  ec-flags-offset +  /flash-page  erase  ;
 : reflash-ec
    hdd-led-on
 [ifdef] cl2-a1
@@ -50,13 +69,14 @@
    ." Verifying ..."
    load-base /ec-flash + /ec-flash 0 edi-read-flash
 [then]
+   load-base  ignore-ec-flags
+   load-base  /ec-flash +  ignore-ec-flags
    load-base  load-base /ec-flash +  /ec-flash  comp
    abort"  Miscompare!"
    cr
    hdd-led-off
 [ifndef] cl2-a1
    ." Restarting EC and rebooting" cr
-   d# 2000 ms
    set-ec-reboot
    unreset-8051
 [then]

Modified: cpu/arm/olpc/1.75/edi.fth
==============================================================================
--- cpu/arm/olpc/1.75/edi.fth	Mon Nov 28 01:05:38 2011	(r2705)
+++ cpu/arm/olpc/1.75/edi.fth	Mon Nov 28 06:37:17 2011	(r2706)
@@ -69,6 +69,7 @@
 ;
 : unreset-8051  ( -- )  \ Reset 8-5
    h# f010 edi-b@  1 invert and  h# f010 edi-b!
+   d# 2000 ms
 ;
 
 \ 0 in bit 0 selects masked ROM as code source for 8051, 1 selects FLASH

Modified: cpu/x86/pc/olpc/setwp.fth
==============================================================================
--- cpu/x86/pc/olpc/setwp.fth	Mon Nov 28 01:05:38 2011	(r2705)
+++ cpu/x86/pc/olpc/setwp.fth	Mon Nov 28 06:37:17 2011	(r2706)
@@ -33,17 +33,48 @@
 \ Set and clear the write-protect tag by copying, erasing, rewriting
 
 : (put-mfg-data)
+   hdd-led-on
    mfg-data-buf  mfg-data-end-offset mfg-data-offset  write-flash-range
+   hdd-led-off
 ;
 
 : ram-find-tag  ( name$ -- false | data$ true )
    mfg-data-buf /flash-block +  (find-tag)
 ;
 
+\ FIXME: ifdef XO-1.75
+
+: set-cp  ( adr -- )
+   " CP" find-tag  if           ( adr len )
+      2drop [char] C            ( expected )
+   else                         ( )
+      0                         ( expected )
+   then                         ( expected )
+   swap c!                      ( )
+;
+
+: set-ap  ( adr -- )
+   " AP" find-tag  if           ( adr len )
+      2drop [char] A            ( expected )
+   else                         ( )
+      0                         ( expected )
+   then                         ( expected )
+   swap 1+ c!                   ( )
+;
+
+/flash-page buffer: ec-flags-buf
+: ?sync-ec  ( -- )
+   ec-flags-buf /flash-page erase
+   ec-flags-buf set-cp
+   ec-flags-buf set-ap
+   ec-flags-buf ?reflash-ec-flags
+;
+
 \ Write mfg data from RAM to FLASH
 : put-mfg-data  ( -- )
    spi-start spi-identify
    (put-mfg-data)
+   ?sync-ec
    spi-reprogrammed
 ;
 



More information about the openfirmware mailing list