[openfirmware] [commit] r2146 - cpu/arm/olpc/1.75

repository service svn at openfirmware.info
Mon Jan 24 23:44:23 CET 2011


Author: wmb
Date: Mon Jan 24 23:44:23 2011
New Revision: 2146
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2146

Log:
OLPC XO-1.75 - flash-ec is now working on A2.

Modified:
   cpu/arm/olpc/1.75/devices.fth
   cpu/arm/olpc/1.75/ecflash.fth
   cpu/arm/olpc/1.75/edi.fth

Modified: cpu/arm/olpc/1.75/devices.fth
==============================================================================
--- cpu/arm/olpc/1.75/devices.fth	Fri Jan 21 23:19:08 2011	(r2145)
+++ cpu/arm/olpc/1.75/devices.fth	Mon Jan 24 23:44:23 2011	(r2146)
@@ -143,6 +143,9 @@
 : ofw-fw-filename$  " disk:\boot\olpc.rom"  ;
 ' ofw-fw-filename$ to fw-filename$
 
+fload ${BP}/cpu/arm/olpc/1.75/bbedi.fth
+fload ${BP}/cpu/arm/olpc/1.75/edi.fth
+
 fload ${BP}/cpu/arm/olpc/1.75/ecflash.fth
 
 0 0  " d420b000"  " /" begin-package
@@ -308,9 +311,6 @@
 fload ${BP}/cpu/arm/olpc/1.75/accelerometer.fth
 fload ${BP}/cpu/arm/olpc/1.75/compass.fth
 
-fload ${BP}/cpu/arm/olpc/1.75/bbedi.fth
-fload ${BP}/cpu/arm/olpc/1.75/edi.fth
-
 warning @ warning off
 : stand-init
    stand-init

Modified: cpu/arm/olpc/1.75/ecflash.fth
==============================================================================
--- cpu/arm/olpc/1.75/ecflash.fth	Fri Jan 21 23:19:08 2011	(r2145)
+++ cpu/arm/olpc/1.75/ecflash.fth	Mon Jan 24 23:44:23 2011	(r2146)
@@ -1,14 +1,19 @@
 \ See license at end of file
 purpose: Reflash the EC code
 
-h# 10000 value /ec-flash
 
+[ifdef] cl2-a1
+h# 10000 value /ec-flash
 char 3 value expected-ec-version
+[else]
+h# 8000 value /ec-flash
+char 4 value expected-ec-version
+[then]
 
 : check-signature  ( adr -- )
-   h# ff00 +                   ( adr' )
+   /ec-flash +  h# 100 -                                 ( adr' )
    dup  " XO-EC" comp abort" Bad signature in EC image"  ( adr )
-   dup ." EC firmware verison: " cscount type cr         ( adr )
+   dup ." EC firmware version: " cscount type cr         ( adr )
    dup 6 + c@ expected-ec-version <>  abort" Wrong EC version"  ( adr )
    drop
 ;
@@ -31,20 +36,38 @@
 ;
 : flash-ec  ( "filename" -- )
    get-ec-file
+[ifdef] cl2-a1
    " enter-updater" $call-ec
    ." Erasing ..." cr  " erase-flash" $call-ec cr
    ." Writing ..." cr  load-base /ec-flash 0 " write-flash" $call-ec  cr
    ." Verifying ..." cr
    load-base /ec-flash + /ec-flash 0 " read-flash" $call-ec
+[else]
+   use-edi-spi  edi-open
+   ." Erasing ..."  erase-chip cr
+   ." Writing ..."  load-base /ec-flash 0 edi-program-flash cr
+   ." Verifying ..."
+   load-base /ec-flash + /ec-flash 0 edi-read-flash  
+[then]
    load-base  load-base /ec-flash +  /ec-flash  comp
-   abort" Miscompare!"
+   abort"  Miscompare!"
    cr
+[ifndef] cl2-a1
+   ." Restarting EC and powering off" cr
+   d# 3000 ms
+   unreset-8051
+[then]
    reset-ec
 ;
 : read-ec-flash  ( -- )
+[ifdef] cl2-a1
    " enter-updater" $call-ec
    flash-buf /ec-flash 0 " read-flash" $call-ec
 \  " reboot-ec" $call-ec
+[else]
+   use-edi-spi  edi-open
+   flash-buf /ec-flash 0 edi-read-flash
+[then]
 ;
 : save-ec-flash  ( "name" -- )
    safe-parse-word $new-file

Modified: cpu/arm/olpc/1.75/edi.fth
==============================================================================
--- cpu/arm/olpc/1.75/edi.fth	Fri Jan 21 23:19:08 2011	(r2145)
+++ cpu/arm/olpc/1.75/edi.fth	Mon Jan 24 23:44:23 2011	(r2146)
@@ -13,7 +13,7 @@
 \  spi-out    ( byte -- ) - Send byte
 \  spi-in     ( -- byte ) - Receive byte
 
-h# 128 constant /flash-page
+d# 128 constant /flash-page
 
 : edi-cmd,adr  ( offset cmd -- )   \ Send command plus 3 address bytes
    spi-cs-on     ( offset cmd )
@@ -32,6 +32,7 @@
          unloop exit
       then
    loop
+   spi-cs-off
    true abort" EDI byte in timeout"
 ;
 [then]
@@ -114,7 +115,7 @@
 
 : send-byte  ( b offset -- )  set-offset  h# feaa edi-b!  2 flash-cmd  ;
 
-: program-page  ( adr offset -- )
+: edi-program-page  ( adr offset -- )
    \ Clear HVPL
    wait-flash-busy  h# 80 flash-cmd  ( adr offset )
 
@@ -130,6 +131,14 @@
    h# 70 flash-cmd                ( )
    wait-flash-busy                ( )
 ;
+: edi-program-flash  ( adr len offset -- )
+   cr
+   swap  0  ?do
+      (cr i .
+      over i +  over i +  edi-program-page  ( adr offset )
+   /flash-page +loop    ( adr offset )
+   2drop                ( )
+;
 : edi-read-flash  ( adr len offset -- )
    over 0=  if  3drop exit  then  ( adr len offset )
    edi-b@                         ( adr len byte )
@@ -138,44 +147,6 @@
       edi-next-b@ i c!            ( )
    loop                           ( )
 ;
-: edi-open  ( -- )
-   \ slow-edi-clock   \ Target speed between 1 and 2 MHz
-   spi-start
-   reset-8051
-   \ fast-edi-clock   \ Target speed up to 16 MHz
-   \ reset
-;
-0 [if]
-+// IO3731 internal register locations
-+#define E51_RST         0xf010  // 8051 Reset Control
-+#define CODE_SEL        0xf011  // Code Source selection
-+#define CHIP_ID_H       0xf01c  // Chip ID High Byte
-+#define CHIP_ID_L       0xf01d  // Chip ID Low Byte
-+#define IOSCCR		0xf02b  // Internal OSC Control
-+#define LVD_TRIM	0xf035  // Low Voltage Detect Trim
-+#define XBIEFCFG        0xfea0  // XBI Embedded Flash Configuration
-+#define XBIEFSIG1       0xfea1  // XBI Embedded Flash signals 1 in FW mode
-+#define XBIEFSIG2       0xfea2  // XBI Embedded Flash signals 2 in FW mode
-+#define XBIPUMP         0xfea3  // XBI Pump IP trimming bits
-+#define XBIFM           0xfea4  // XBI Flash IP trimming bits
-+#define XBIVR           0xfea5  // XBI VR IP trimming bits
-+#define XBIMISC         0xfea6  // XBI MISC Reg
-+#define XBIEFCMD        0xfea7  // XBI Embedded Flash Command Port
-+#define XBIEFA0         0xfea8  // XBI Embedded Flash Address high
-+#define XBIEFA1         0xfea9  // XBI Embedded Flash Address low
-+#define XBIEFDO         0xfeaa  // XBI Embedded Flash Output Data Port
-+#define XBIEFDI         0xfeab  // XBI Embedded Flash Input Data Port
-+
-+
-+// IO3731 embedded flash command support:
-+#define PAGE_LATCH     0x02  // Page latch
-+#define READ           0x03  // Read
-+#define ERASEPAGE      0x20  // Erase selected page
-+#define ERASECHIP      0x60  // Erase whole e-flash
-+#define PROGRAMPAGE    0x70  // Program selected page
-+#define CLEARPAGELATCH 0x80  // Clear HVPL data
-+#define READTRIMDATA   0x90  // Read Trim data from special rows
-[then]
 : trim@  ( offset -- b )
    set-offset
    h# 90 flash-cmd
@@ -240,6 +211,16 @@
       then
 \   then
 ;
+: edi-open  ( -- )
+   \ slow-edi-clock   \ Target speed between 1 and 2 MHz
+   spi-start
+   \ The first operation often fails so retry it
+   ['] select-flash  catch  if  select-flash  then
+   reset-8051
+   trim-tune
+   \ fast-edi-clock   \ Target speed up to 16 MHz
+   \ reset
+;
 
 \ LICENSE_BEGIN
 \ Copyright (c) 2011 FirmWorks



More information about the openfirmware mailing list