[openfirmware] [commit] r2162 - cpu/arm/mmp2

repository service svn at openfirmware.info
Thu Feb 3 02:00:19 CET 2011


Author: wmb
Date: Thu Feb  3 02:00:19 2011
New Revision: 2162
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2162

Log:
OLPC XO-1.75 - Added a device node for the Marvell Armada 610 TWSI hardware.

Modified:
   cpu/arm/mmp2/twsi.fth

Modified: cpu/arm/mmp2/twsi.fth
==============================================================================
--- cpu/arm/mmp2/twsi.fth	Thu Feb  3 01:59:11 2011	(r2161)
+++ cpu/arm/mmp2/twsi.fth	Thu Feb  3 02:00:19 2011	(r2162)
@@ -91,41 +91,32 @@
 
 : twsi-get  ( register-address .. #reg-bytes #data-bytes -- data-byte ... )
    >r                    ( reg-adr .. #regs  r: #data-bytes )
-   \ Handle the case where the device does not require that a write register address be sent
-   slave-address         ( reg-adr .. #regs slave-address  r: #data-bytes )
-   over 0=  if           ( reg-adr .. #regs slave-address  r: #data-bytes )
-      r@  if             ( reg-adr .. #regs slave-address  r: #data-bytes )
-         1 or            ( reg-adr .. #regs slave-address' r: #data-bytes )
-      then               ( reg-adr .. #regs slave-address' r: #data-bytes )
-   then                  ( reg-adr .. #regs slave-address' r: #data-bytes )
-
-   twsi-start            ( reg-adr .. #regs  r: #data-bytes )
-
-   \ Abort the transaction if both #reg-bytes and #data-bytes are 0
-   dup r@ or  0=  if                  ( #regs  r: #data-bytes )
-      iue+scle bbu_ICR_MA or  cr!     ( #regs  r: #data-bytes )  \ Master abort
-      r> 2drop exit                   ( -- )
-   then                               ( reg-adr .. #regs  r: #data-bytes )
-
-   \ Send register addresses, if any
-   0  ?do  0 twsi-putbyte  loop       ( r: #data-bytes )
-
-   \ If no result data requested, quit now
-   r>  dup 0=  if                     ( #data-bytes )
-      drop                            ( )
-      iue+scle bbu_ICR_STOP or  cr!   ( )
-      exit
-   then                               ( #data-bytes )
-
-   \ Otherwise send the read address with another start bit
-   slave-address 1 or  bbu_ICR_START twsi-putbyte     ( #data-bytes )   
-   sr@ sr!    \ clear ITE and IRF status bits         ( #data-bytes )
-   \ Bug on line 367 of bbu_TWSI.s - writes SR without first reading it
-
-   1-  0  ?do  0 twsi-getbyte   loop  ( bytes )
-
-   \ Set the stop bit on the final byte
-   bbu_ICR_STOP  bbu_ICR_ACKNAK or twsi-getbyte   ( bytes )
+   ?dup  if              ( reg-adr .. #regs slave-address  r: #data-bytes )
+      slave-address      ( reg-adr .. #regs slave-address  r: #data-bytes )
+      twsi-start         ( reg-adr .. #regs  r: #data-bytes )
+
+      \ Send register addresses
+      0  ?do  0 twsi-putbyte  loop       ( r: #data-bytes )
+
+      \ If no result data requested, quit now
+      r@ 0=  if                          ( r: #data-bytes )
+         r> drop                         ( )
+         iue+scle bbu_ICR_STOP or  cr!   ( )
+         exit
+      then                               ( r: #data-bytes )
+   then                                  ( r: #data-bytes )
+
+   r>  ?dup  if                          ( #data-bytes )
+      \ Send the read address with a (or another) start bit
+      slave-address 1 or  bbu_ICR_START twsi-putbyte     ( #data-bytes )   
+      sr@ sr!    \ clear ITE and IRF status bits         ( #data-bytes )
+      \ Bug on line 367 of bbu_TWSI.s - writes SR without first reading it
+
+      1-  0  ?do  0 twsi-getbyte   loop  ( bytes )
+
+      \ Set the stop bit on the final byte
+      bbu_ICR_STOP  bbu_ICR_ACKNAK or twsi-getbyte   ( bytes )
+   then
 ;
 
 : twsi-write  ( byte .. #bytes -- )
@@ -137,3 +128,20 @@
 
 : twsi-b@  ( reg -- byte )  1 1 twsi-get  ;
 : twsi-b!  ( byte reg -- )  2 twsi-write  ;
+
+0 0  " "  " /" begin-package
+" twsi" name
+
+0 0 instance 2value child-address
+: open  ( -- okay? )  true  ;
+: close  ( -- )  ;
+: set-address  ( target channel -- )  to child-address  ;
+2 " #address-cells" integer-property
+0 " #size-cells" integer-property
+: get  ( #bytes -- bytes ... )
+   child-address set-twsi-target
+   0 swap twsi-get
+;
+: decode-unit  ( adr len -- low high )  parse-2int  ;
+: encode-unit  ( low high -- adr len )  >r <# u#s drop [char] , hold r> u#s u#>  ;
+end-package



More information about the openfirmware mailing list