[openfirmware] [commit] r2059 - dev/via/spi

repository service svn at openfirmware.info
Thu Dec 2 03:09:16 CET 2010


Author: wmb
Date: Thu Dec  2 03:09:15 2010
New Revision: 2059
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2059

Log:
OLPC XO-1.5 - fixed a bug in the SPI "cloning" code that lets you use an XO-1.5 board as an SPI programmer.  Also added high-level versions of a couple of code words just for good measure.

Modified:
   dev/via/spi/bbspi.fth

Modified: dev/via/spi/bbspi.fth
==============================================================================
--- dev/via/spi/bbspi.fth	Thu Dec  2 03:07:34 2010	(r2058)
+++ dev/via/spi/bbspi.fth	Thu Dec  2 03:09:15 2010	(r2059)
@@ -22,6 +22,7 @@
 : bb-spi-cs-on   ( -- )  gpo-port dup pc@ 8 invert and  swap pc!  ;
 : bb-spi-cs-off  ( -- )  gpo-port dup pc@ 8 or          swap pc!  ;
 
+[ifdef] 386-assembler
 code bb-spi-out  ( b -- )
    bx pop
 
@@ -39,6 +40,8 @@
       ax dx out
       bl bl add                  \ Shift left
    loopa
+   clk-mask do-mask +  invert #  ax  and   \ Clk low
+   ax dx out
 c;
 
 code bb-spi-in  ( -- b )
@@ -66,9 +69,44 @@
          bx inc
       then
    loopa
+   bp ax mov                  \ Base value
+   gpo-port # dx mov          \ Out port
+   ax dx out                  \ CLK low
    bp pop
    bx push
 c;
+[then]
+[ifndef] bb-spi-in
+: bb-spi-out  ( b -- )
+   gpo-port pl@                  ( portval )
+   clk-mask invert and           ( portval' )
+   do-mask invert and            ( portval' )
+   swap                          ( portval b )
+   8 0  do                       ( portval b )
+      2dup h# 80 and  if         ( portval b portval )
+         do-mask or              ( portval b portval' )
+      then                       ( portval b portval )
+      dup gpo-port pl!           ( portval b portval )  \ CLK low with data
+      clk-mask or  gpo-port pl!  ( portval b )          \ CLK high with data
+      2*                         ( portval b' )
+   loop                          ( portval b )
+   drop   gpo-port pl!           ( )                    \ CLK low
+;
+
+: bb-spi-in  ( -- b )
+   gpo-port pl@                      ( portval )
+   clk-mask invert and  0            ( portval b )
+   8 0  do                           ( portval b )
+      over gpo-port pl!              ( portval b )  \ CLK low
+      over clk-mask or  gpo-port pl! ( portval b )  \ CLK high
+      2*                             ( portval b' )
+      gpi-port pl@ di-mask and  if   ( portval b )
+         1+                          ( portval b' )
+      then                           ( portval b )
+   loop                              ( portval b )
+   swap  gpo-port pl!                ( b )          \ CLK low
+;
+[then]
 
 : bb-spi-start  ( -- )
    ['] bb-spi-in     to spi-in
@@ -80,7 +118,7 @@
 \  use-spi-flash-read           \ Readback with SPI commands, not memory ops
    use-hw-spi-flash-read
 
-   gpo-port dup pc@  clk-mask invert and  do-mask invert and  cs-mask or  swap pc!     \ CLK, DO low, CS# high
+   gpo-port dup pl@  clk-mask invert and  do-mask invert and  cs-mask or  swap pl!     \ CLK, DO low, CS# high
    h# 88e4 config-b@ 2 or  h# 88e4 config-b!
 ;
 



More information about the openfirmware mailing list