[openfirmware] [commit] r2392 - in cpu/arm/olpc: . 1.75

repository service svn at openfirmware.info
Tue Jul 19 15:08:06 CEST 2011


Author: wmb
Date: Tue Jul 19 15:08:06 2011
New Revision: 2392
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2392

Log:
OLPC XO-1.75 - Added numeric display of startup progress messages.  Press the check key to see them - or CForth will automatically make them visible if OFW fails to take over the display after a few seconds.

Added:
   cpu/arm/olpc/fbmsg.fth
   cpu/arm/olpc/fbnums.fth
   cpu/arm/olpc/numdot.fth
Modified:
   cpu/arm/olpc/1.75/fw.bth
   cpu/arm/olpc/resetvec.bth

Modified: cpu/arm/olpc/1.75/fw.bth
==============================================================================
--- cpu/arm/olpc/1.75/fw.bth	Tue Jul 19 14:48:52 2011	(r2391)
+++ cpu/arm/olpc/1.75/fw.bth	Tue Jul 19 15:08:06 2011	(r2392)
@@ -11,6 +11,10 @@
 \ ' $report-name is include-hook
 \ ' noop is include-hook
 
+fb-pa constant display-pa
+fload ${BP}/cpu/arm/olpc/fbnums.fth
+fload ${BP}/cpu/arm/olpc/fbmsg.fth
+
 fload ${BP}/cpu/arm/olpc/1.75/devices.fth
 
 [ifndef] virtual-mode
@@ -195,10 +199,12 @@
 
 fload ${BP}/cpu/arm/mmp2/keypad.fth
 [ifndef] cl2-a1
+[ifdef] notdef  \ CForth turns on the keypad; resetting it makes it not work
 stand-init: keypad
    keypad-on
    8 keypad-direct-mode
 ;
+[then]
 : keypad-bit  ( n keypad out-mask key-mask -- n' keypad )
    third invert  and  if    ( n keypad out-mask )
       rot or swap           ( n' keypad )

Added: cpu/arm/olpc/fbmsg.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/olpc/fbmsg.fth	Tue Jul 19 15:08:06 2011	(r2392)
@@ -0,0 +1,45 @@
+\ See license at end of file
+purpose: Put message codes out on the frame buffer
+
+h# 40 value the-debug-code
+: next-debug-code  ( -- n )
+   the-debug-code  dup 1+           ( n )
+   dup h# f and  h# a =  if  6 +  then  ( n )  \ Use BCD
+   to the-debug-code
+;
+
+: show-debug-code  ( adr len code# -- )
+   ." Msg#: " push-hex <# u# u# u#> type pop-base  space type  cr
+;
+: put-fbmsg  ( msg$ -- )
+   next-debug-code dup >r show-debug-code  r> ( adr len b )
+   postpone literal  postpone puthex          ( adr len )
+;
+
+\ Automatically insert port80 codes in named stand-init: words
+: fbmsg  ( msg$ -- msg$ )  2dup put-fbmsg  ;
+' fbmsg to check-message
+
+\ 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

Added: cpu/arm/olpc/fbnums.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/olpc/fbnums.fth	Tue Jul 19 15:08:06 2011	(r2392)
@@ -0,0 +1,88 @@
+\ See license at end of file
+purpose: Numeric display of startup progress
+
+\ Display 2-digit hex or decimal numbers using a simple 3x5 font
+\ in a small framebuffer.  The framebuffer is assumed to be 4 bits/pixel,
+\ 12 pixels per line, with a pitch of 6 bytes.  The 3x5 font is
+\ equivalent to a 7-segment display.
+
+\ There are only 4 distinct row values in a 7-segment display -
+\ horizontal bar , left vertical bar, right vertical bar, and
+\ left+right vertical bars.  The patterns below encode those
+\ cases as pixel values.
+\ The frame buffer is assumed to be little-endian, i.e. the
+\ least-significant nibble of a shortword displays in the
+\ leftmost pixel of the group.
+\ 0 is black (foreground), while f is white (background)
+\ The 3x5 font is displayed in a 4-wide cell, so each row
+\ has a white (f, background) leftmost pixel.
+
+create patterns
+h# ff0f w, \ 0  - dot on the right
+h# 0fff w, \ 1  - dot on the left
+h# 0f0f w, \ 2  - dots on left and right
+h# 000f w, \ 3  - dots all the way across
+
+\ Each digit in the base-4 numerals below indexes one of the four patterns.
+\ The rightmost (least significant) digit is the topmost line of the 5-high
+\ glyph.
+
+create numerals
+4 base !
+32223 w, \ 0
+11111 w, \ 1
+30313 w, \ 2
+31313 w, \ 3
+11322 w, \ 4
+31303 w, \ 5
+32303 w, \ 6
+11113 w, \ 7
+32323 w, \ 8
+31323 w, \ 9
+22323 w, \ a
+32300 w, \ b
+30003 w, \ c
+32311 w, \ d
+30303 w, \ e
+00303 w, \ f
+hex
+
+6 constant fb-pitch
+: putdig  ( n pos -- )
+   numerals rot wa+ w@                ( pos glyph )
+   \ Vertical offset by 2 lines (fb-pitch 2*), horizontal by pos character cells
+   display-pa fb-pitch 2* +  rot wa+  ( glyph fb-adr )
+   5 0  do                            ( glyph fb-adr )
+      over 3 and                      ( glyph fb-adr pattern# )
+      patterns swap wa+ w@            ( glyph fb-adr pattern )
+      over w!                         ( glyph fb-adr )
+      swap 2/ 2/  swap fb-pitch +     ( glyph' fb-adr' )
+   loop                               ( glyph fb-adr )
+   2drop                              ( )
+;
+: putdec  ( n -- )  d# 10 /mod  0 putdig  1 putdig  ;
+: puthex  ( n -- )  d# 16 /mod  0 putdig  1 putdig  ;
+
+\ 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

Added: cpu/arm/olpc/numdot.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/olpc/numdot.fth	Tue Jul 19 15:08:06 2011	(r2392)
@@ -0,0 +1,259 @@
+\ See license at end of file
+purpose: Numeric display of startup progress in ARM assembly language
+
+\ This is an ARM assembly language version of the 3x5 font numeric display
+\ code, a high-level version of which is in fbnums.fth .  This assembly
+\ language version uses a less-compact font encoding, because the compact
+\ encoding in fbnums.fth requires more registers to display.  This version
+\ trades size for reduced register use - it needs only R0-R3 and LR, so it
+\ can be called with less concern for the register use of the calling point,
+\ and without needing a stack.  The value of the "no stack" attribute is
+\ questionable, since the frame buffer used to display the number is likely
+\ to be in memory, so if memory doesn't work, this feature probably won't
+\ work in any case.
+
+label fb-adr-loc  \ Frame buffer address
+fb-pa ,
+end-code
+
+label numerals
+hex
+\ 0
+ffff w,
+000f w,
+0f0f w,
+0f0f w,
+0f0f w,
+000f w,
+
+\ 1
+ffff w,
+0fff w,
+0fff w,
+0fff w,
+0fff w,
+0fff w,
+
+\ 2
+ffff w,
+000f w,
+0fff w,
+000f w,
+ff0f w,
+000f w,
+
+\ 3
+ffff w,
+000f w,
+0fff w,
+000f w,
+0fff w,
+000f w,
+
+\ 4
+ffff w,
+0f0f w,
+0f0f w,
+000f w,
+0fff w,
+0fff w,
+
+\ 5
+ffff w,
+000f w,
+ff0f w,
+000f w,
+0fff w,
+000f w,
+
+\ 6
+ffff w,
+000f w,
+ff0f w,
+000f w,
+0f0f w,
+000f w,
+
+\ 7
+ffff w,
+000f w,
+0fff w,
+0fff w,
+0fff w,
+0fff w,
+
+\ 8
+ffff w,
+000f w,
+0f0f w,
+000f w,
+0f0f w,
+000f w,
+
+\ 9
+ffff w,
+000f w,
+0f0f w,
+000f w,
+0fff w,
+000f w,
+
+\ a
+ffff w,
+000f w,
+0f0f w,
+000f w,
+0f0f w,
+0f0f w,
+
+\ b
+ffff w,
+ff0f w,
+ff0f w,
+000f w,
+0f0f w,
+000f w,
+
+\ c
+ffff w,
+000f w,
+ff0f w,
+ff0f w,
+ff0f w,
+000f w,
+
+\ d
+ffff w,
+0fff w,
+0fff w,
+000f w,
+0f0f w,
+000f w,
+
+\ e
+ffff w,
+000f w,
+ff0f w,
+000f w,
+ff0f w,
+000f w,
+
+\ f
+ffff w,
+000f w,
+ff0f w,
+000f w,
+ff0f w,
+ff0f w,
+
+end-code
+
+[ifdef] test-me
+code puthex  ( r0: nn \ kills: r1-r3 )
+   mov     r0,tos
+[else]
+label puthex  ( r0: nn \ kills: r1-r3 )
+[then]
+
+   mov     r3,r0,lsr #4       \ r3: Hidigit
+   and     r3,r3,#0xf         \ r3: Hidigit
+
+   sub     r2,pc,`here 8 + numerals - #`  \ adr r2,=numerals  r2: 'glyphs
+   
+   add     r2,r2,r3,lsl #3    \ r2: 'glyph
+   add     r2,r2,r3,lsl #2    \ r2: 'glyph
+
+   ldr     r3,[pc,`fb-adr-loc  here 8 +  - #`]  \ r3: 'fb
+
+   ldr     r1,[r2],#4         \ r1: bits
+   strh    r1,[r3,#6]!        \ Write halfword
+   mov     r1,r1,lsr #16
+   strh    r1,[r3,#6]!        \ Write halfword
+   
+   ldr     r1,[r2],#4         \ r1: bits
+   strh    r1,[r3,#6]!        \ Write halfword
+   mov     r1,r1,lsr #16
+   strh    r1,[r3,#6]!        \ Write halfword
+   
+   ldr     r1,[r2],#4         \ r1: bits
+   strh    r1,[r3,#6]!        \ Write halfword
+   mov     r1,r1,lsr #16
+   strh    r1,[r3,#6]!        \ Write halfword
+   
+   and     r3,r0,#0xf         \ r3: Lodigit
+
+   sub     r2,pc,`here 8 + numerals - #`  \ adr r2,=numerals  r2: 'glyphs
+   \ r2 = numerals + 12*r3
+   add     r2,r2,r3,lsl #3    \ r2: 'glyph
+   add     r2,r2,r3,lsl #2    \ r2: 'glyph
+
+   ldr     r3,[pc,`fb-adr-loc  here 8 +  - #`]  \ r3: 'fb
+   inc     r3,#2              \ r3: 'fb
+
+   ldr     r1,[r2],#4         \ r1: bits
+   strh    r1,[r3,#6]!        \ Write halfword
+   mov     r1,r1,lsr #16
+   strh    r1,[r3,#6]!        \ Write halfword
+   
+   ldr     r1,[r2],#4         \ r1: bits
+   strh    r1,[r3,#6]!        \ Write halfword
+   mov     r1,r1,lsr #16
+   strh    r1,[r3,#6]!        \ Write halfword
+   
+   ldr     r1,[r2],#4         \ r1: bits
+   strh    r1,[r3,#6]!        \ Write halfword
+   mov     r1,r1,lsr #16
+   strh    r1,[r3,#6]!        \ Write halfword
+
+[ifdef] test-me
+   pop     tos,sp
+c;
+[else]
+   mov     pc,lr
+end-code
+[then]
+
+0 [if]
+dev screen
+: lcd-setup  ( -- )
+   text-off
+
+   0 h# 190 lcd!
+
+   h# 9000c h# 104 lcd!
+
+   \ Set the pitch to 6 bytes
+   6  h# fc lcd!
+
+   \ Graphics in 4bpp mode
+   h# 8009.1100 h# 190 lcd!
+
+   \ Set the no-display-source background color to white
+\   h# ffffffff h# 124 lcd!
+;
+[then]
+
+
+\ 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/arm/olpc/resetvec.bth
==============================================================================
--- cpu/arm/olpc/resetvec.bth	Tue Jul 19 14:48:52 2011	(r2391)
+++ cpu/arm/olpc/resetvec.bth	Tue Jul 19 15:08:06 2011	(r2392)
@@ -44,6 +44,8 @@
    0 ,				\ To be patched later
 end-code
 
+fload ${BP}/cpu/arm/olpc/numdot.fth
+
 \ This subroutine is used by the startup code.
 \ It compares two null-terminated strings, returning zero if they match.
 \ Destroys: r2, r3
@@ -145,6 +147,9 @@
    mov     pc,r0	\ Execute the dropin
 [then]
 
+   mov     r0,#0x10
+   bl      `puthex`
+
    \ Setup the page (section) table and turn on the MMU and caches
 \    set     r0,`page-table-pa #`
    set     r0,`fw-pa page-table-offset + #`
@@ -152,6 +157,9 @@
    bl	   `enable-mmu`			\ Turn on the MMU
    bl	   `caches-on`			\ Turn on the caches
 
+   mov     r0,#0x11
+   bl      `puthex`
+
    \ Now we are running with the MMU and caches on, thus going faster
 
    \ Locate the dropin module named "firmware".
@@ -165,12 +173,17 @@
       \ and use it to inflate the firmware into RAM
       mov     r11,r0		\ Save address of firmware dropin
 
+      mov     r0,#0x12
+      bl      `puthex`
 
       \ Locate the "inflate" module.
       " inflate" $find-dropin,  \ Assemble call to find-dropin with literal arg
 
       add     r4,r0,#32		\ r1: Base address of inflater code
       
+      mov     r0,#0x13
+      bl      `puthex`
+
       \ Execute the inflater, giving it the address of the compressed firmware
       \ module, the address where the inflated firmware should be placed, and
       \ the address of some RAM the inflater can use for scratch variables.
@@ -199,7 +212,12 @@
    else
       \ The firmware dropin isn't compressed, so we just copy it to RAM
 
-      ldr     r2,[r0,#4]		\ Length of image
+      mov     r11,r0
+
+      mov     r0,#0x14
+      bl      `puthex`
+
+      ldr     r2,[r11,#4]		\ Length of image
 
       eor     r1,r2,r2, ror #16 	\ Byte reverse r2 using the
       bic     r1,r1,#0xff0000   	\ tricky sequence shown in the
@@ -212,10 +230,16 @@
       bl      `memcpy`			\ Copy the firmware
    then
 
+   mov     r0,#0x15
+   bl      `puthex`
+
    \ Synchronize the instruction and data caches so the firmware code can
    \ be executed.
    bl      `sync-caches`			\ Push Forth dictionary to memory
 
+   mov     r0,#0x16
+   bl      `puthex`
+
 [ifdef] notdef
    " nanoforth" $find-dropin,   \ Assemble call to find-dropin with literal arg
 



More information about the openfirmware mailing list