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

repository service svn at openfirmware.info
Thu Nov 25 03:31:28 CET 2010


Author: wmb
Date: Thu Nov 25 03:31:28 2010
New Revision: 2038
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/2038

Log:
OLPC XO-1.75 -
(1) Startup sound now plays in the background for faster startup
(2) Use 3.3V signals GPIO 97,98 for RTC (bitbanging instead of using the TWSI hardware)
(3) Made the startup sequence more like the 1.5 version

Modified:
   cpu/arm/forthint.fth
   cpu/arm/olpc/1.75/boardgpio.fth
   cpu/arm/olpc/1.75/fw.bth
   cpu/arm/olpc/1.75/rtc.fth
   cpu/arm/olpc/1.75/sound.fth
   cpu/x86/pc/olpc/security.fth

Modified: cpu/arm/forthint.fth
==============================================================================
--- cpu/arm/forthint.fth	Thu Nov 25 00:38:16 2010	(r2037)
+++ cpu/arm/forthint.fth	Thu Nov 25 03:31:28 2010	(r2038)
@@ -145,7 +145,7 @@
       interrupt-preamble  6  install-handler
       init-dispatcher
       [ previous ]
-      d# 10 set-tick-limit
+      d# 1 set-tick-limit
    enable-interrupts        \ Turn interrupts on
 ;
 

Modified: cpu/arm/olpc/1.75/boardgpio.fth
==============================================================================
--- cpu/arm/olpc/1.75/boardgpio.fth	Thu Nov 25 00:38:16 2010	(r2037)
+++ cpu/arm/olpc/1.75/boardgpio.fth	Thu Nov 25 03:31:28 2010	(r2038)
@@ -23,6 +23,8 @@
    d# 58 gpio-set      \ WLAN_RESET#
    d# 58 gpio-dir-out  \ WLAN_RESET#
    d# 73 gpio-dir-out  \ CAM_RST
+   d# 97 gpio-dir-out  \ RTC_SCK
+   d# 98 gpio-dir-out  \ RTC_SDA
 
    d# 125 gpio-set
    d# 125 gpio-dir-out  \ EC_SPI_ACK
@@ -90,10 +92,10 @@
    no-update, \ GPIO_50 - Not connected (TP114)
    no-update, \ GPIO_51 - Not connected (TP59)
    no-update, \ GPIO_52 - Not connected (TP113)
-   2 af,      \ GPIO_53 - RTC_SCK (TWSI2) if R124 populated
-   2 af,      \ GPIO_54 - RTC_SDA (TWSI2) if R125 populated
-\  no-update, \ GPIO_53 - Not connected if nopop R124 to use TWSI6 for RTC
-\  no-update, \ GPIO_54 - Not connected if nopop R125 to use TWSI6 for RTC
+\  2 af,      \ GPIO_53 - RTC_SCK (TWSI2) if R124 populated
+\  2 af,      \ GPIO_54 - RTC_SDA (TWSI2) if R125 populated
+   no-update, \ GPIO_53 - Not connected if nopop R124 to use TWSI6 for RTC
+   no-update, \ GPIO_54 - Not connected if nopop R125 to use TWSI6 for RTC
    no-update, \ GPIO_55 - Not connected (TP51)
    no-update, \ GPIO_56 - Not connected (TP60)
    0 af,      \ GPIO_57 - WLAN_PD#
@@ -141,10 +143,12 @@
 
    no-update, \ GPIO_96  - Not connected (TP112)
 
-   no-update, \ GPIO_97  - Not connected (R100 nopop) if we use TWSI2 for RTC
-   no-update, \ GPIO_98  - Not connected (R106 nopop) if we use TWSI2 for RTC
+\  no-update, \ GPIO_97  - Not connected (R100 nopop) if we use TWSI2 for RTC
+\  no-update, \ GPIO_98  - Not connected (R106 nopop) if we use TWSI2 for RTC
 \  2 af,      \ GPIO_97  - RTC_SCK (TWSI6) if R100 populated
 \  2 af,      \ GPIO_98  - RTC_SDA (TWSI6) if R106 populated
+   0 af,      \ GPIO_97  - RTC_SCK (bitbang) if R100 populated
+   0 af,      \ GPIO_98  - RTC_SDA (bitbang) if R106 populated
 
    0 af,      \ GPIO_99  - TOUCH_SCR_INT
    0 af,      \ GPIO_100 - DCONSTAT0

Modified: cpu/arm/olpc/1.75/fw.bth
==============================================================================
--- cpu/arm/olpc/1.75/fw.bth	Thu Nov 25 00:38:16 2010	(r2037)
+++ cpu/arm/olpc/1.75/fw.bth	Thu Nov 25 03:31:28 2010	(r2038)
@@ -167,8 +167,14 @@
 : ec-indexed-io-off  ( -- )  ;  \ !!!
 : ec-ixio-reboot  ( -- )  ;   \ !!!
 : flash-base  ( -- )  true abort" The stuff that relies on flash-base in security.fth needs to be reworked!"  ;
-: cmos@  ( index -- data )  h# 38 mod  8 +  " rtc@" clock-node @  $call-method  ;
-: cmos!  ( index data -- )  h# 38 mod  8 +  " rtc!" clock-node @  $call-method  ;
+: cmos@  ( index -- data )
+   h# 38 mod  8 +  " rtc@" clock-node @  ( index adr len ih )
+   ['] $call-method catch  if  4drop 0  then
+;
+: cmos!  ( data index -- )
+   h# 38 mod  8 +  " rtc!" clock-node @  ( data index adr len ih )
+   ['] $call-method  if  2drop 3drop  then
+;
 : halt  ( -- )  c7-wfi  ;
 fload ${BP}/cpu/x86/pc/olpc/sound.fth
 fload ${BP}/cpu/x86/pc/olpc/security.fth
@@ -201,7 +207,7 @@
 \needs ramdisk  " " d# 128 config-string ramdisk
 " "   ' boot-file      set-config-string-default   \ Let the boot script set the cmdline
 
-2 config-int auto-boot-countdown
+3 config-int auto-boot-countdown
 
 \ Eliminate 4 second delay in install console for the case where
 \ there is no keyboard.  The delay is unnecessary because the screen
@@ -227,7 +233,7 @@
 
 : console-start  ( -- )
    install-mux-io
-\  cursor-off
+   cursor-off
    true to text-on?
 
    " //null" open-dev to null-ih  \ For text-off state
@@ -244,9 +250,7 @@
    warning on
    only forth also definitions
 
-   show-child
    install-alarm
-   ['] sound catch drop
 
    page-mode
    #line off
@@ -254,6 +258,18 @@
 \   .built cr
 ;
 
+
+: factory-test?  ( -- flag )
+   \ TS is the "test station" tag, whose value is set to "SHIP" at the
+   \ end of manufacturing test.
+   " TS" find-tag  if         ( adr len )
+      ?-null  " SHIP" $=  0=  ( in-factory? )
+   else                       ( )
+      \ Missing TS tag is treated as not in factory test
+      false
+   then                       ( in-factory? )
+;
+
 [ifdef] notyet
 : ?games  ( -- )
    rocker-right game-key?  if
@@ -289,26 +305,32 @@
 : startup  ( -- )
    standalone?  0=  if  exit  then
 
-\  block-exceptions
+   block-exceptions
    no-page
 
+   ?factory-mode
+
+   disable-user-aborts
    console-start
 
 [ifdef] notyet
    read-game-keys
 [then]
 
-\  text-off
+   factory-test?  if  text-off  then
 
    " probe-" do-drop-in
 
+   show-child
+   install-alarm
+   ['] sound catch drop
 [ifdef] notyet
-   sound
    ?games
 [then]
 
    ['] false to interrupt-auto-boot?
 [ifdef] probe-usb
+   factory-test?  if  d# 1000 ms  then  \ Extra USB probe delay in the factory
    probe-usb
    report-disk
    report-keyboard
@@ -317,19 +339,31 @@
 
    interpreter-init
 [ifdef] notyet
-   ?scan-nand
    ?diags
+[ifdef] Later
+   ?scan-nand
+[then]
    ?fs-update
 [then]
-\  unblock-exceptions
+   factory-test? 0=  if  secure-startup  then
+   unblock-exceptions
    ['] (interrupt-auto-boot?) to interrupt-auto-boot?
-\  ?usb-keyboard
+[ifdef] notyet
+   ?usb-keyboard
+[then]
    auto-banner?  if  banner  then
 
    auto-boot
 
+   frozen? text-on? 0=  and  ( no-banner? )
+   unfreeze visible          ( no-banner? )
+   if  banner  then  \ Reissue banner if it was suppressed
+
+   blue-letters ." Type 'help' for more information." black-letters
    cr cr
 
+   enable-user-aborts
+   stop-sound   
    quit
 ;
 

Modified: cpu/arm/olpc/1.75/rtc.fth
==============================================================================
--- cpu/arm/olpc/1.75/rtc.fth	Thu Nov 25 00:38:16 2010	(r2037)
+++ cpu/arm/olpc/1.75/rtc.fth	Thu Nov 25 03:31:28 2010	(r2038)
@@ -1,9 +1,13 @@
 0 0  " "  " /" begin-package
 " rtc" name
 
-: set-address  ( -- )  h# d0 2 set-twsi-target  ;
-: rtc@  ( reg# -- byte )  set-address  twsi-b@  ;
-: rtc!  ( byte reg# -- )  set-address  twsi-b!  ;
+: set-address  ( -- )
+   d# 97 to smb-clock-gpio#
+   d# 98 to smb-data-gpio#
+   h# d0 to smb-slave
+;
+: rtc@  ( reg# -- byte )  set-address  smb-byte@  ;
+: rtc!  ( byte reg# -- )  set-address  smb-byte!  ;
 
 headerless
 
@@ -21,8 +25,8 @@
 : >bcd  ( binary -- bcd )  d# 10 /mod  4 << +  ;
 
 : bcd-time&date  ( -- s m h d m y century )
-   0 1 7 twsi-get   ( s m h dow d m y )
-   3 roll drop      ( s m h dow d m y )
+   7 0 smb-read-n  ( s m h dow d m y )
+   3 roll drop     ( s m h dow d m y )
    d# 20
 ;
 : bcd!  ( n offset -- )  swap >bcd  swap rtc!  ;

Modified: cpu/arm/olpc/1.75/sound.fth
==============================================================================
--- cpu/arm/olpc/1.75/sound.fth	Thu Nov 25 00:38:16 2010	(r2037)
+++ cpu/arm/olpc/1.75/sound.fth	Thu Nov 25 03:31:28 2010	(r2038)
@@ -123,7 +123,7 @@
 : set-descriptor   ( next dest source length adr -- )
    >r  r@ l!  r@ la1+ l!  r@ 2 la+ l!  r> 3 la+ l!
 ;
-: make-out-ring  ( adr len -- )
+: make-out-ring  ( -- )
    out-desc h# 10 +  sspa-base h# 80 +  out-bufs               /audio-buf   out-desc          set-descriptor
    out-desc          sspa-base h# 80 +  out-bufs /audio-buf +  /audio-buf   out-desc  h# 10 + set-descriptor
    out-desc  h# 30 adma!   \ Link to first descriptor
@@ -133,7 +133,9 @@
    1 h# 80 adma!           \ Enable DMA completion interrupts
    h# 0081.3020   h# 40 adma! \ 16 bits, pack, fetch next, enable, chain, hold dest, inc src
 ;
-: make-in-ring  ( adr len -- )
+: stop-out-ring  ( -- )  h# 100000 h# 40 adma!  ;
+
+: make-in-ring  ( -- )
    in-desc h# 10 +  in-bufs               sspa-base   /audio-buf   in-desc          set-descriptor
    in-desc          in-bufs /audio-buf +  sspa-base   /audio-buf   in-desc  h# 10 + set-descriptor
    in-desc  h# 34 adma!   \ Link to first descriptor
@@ -252,7 +254,6 @@
 : close-in  ( -- )  ;
 : open-out  ( -- )  setup-sspa-tx  ;
 : close-out ( -- )  ;
-: write-done  ( -- )  ;
 
 : wait-out  ( -- )
    buf-timeout  0  do   
@@ -260,20 +261,84 @@
    loop
    0 h# a0 adma!
 ;
-: audio-out  ( adr len -- actual )
-   tuck  to out-len  to out-adr   
+
+defer playback-alarm
+0 value alarmed?
+
+: install-playback-alarm     ( -- )
+   true to alarmed?  ['] playback-alarm d# 3 alarm
+;
+: uninstall-playback-alarm   ( -- )
+   alarmed?  if
+      ['] playback-alarm d#  0 alarm
+      false to alarmed?
+   then
+;
+
+false value playing?
+
+: stop-out  ( -- )
+   disable-sspa-tx
+   stop-out-ring
+   uninstall-playback-alarm
+   false to playing?
+;
+
+: ?end-playing  ( -- )
+   h# a0 adma@ 1 and  0=  if  exit  then
+   0 h# a0 adma!
+   out-len  if  copy-out  then
+   h# 40 adma@  h# 4000 and  0=  if
+      stop-out
+   then
+;
+: playback-continue-alarm  ( -- )
+   playing?  if
+      ?end-playing
+   else
+      \ If playback has already stopped as a result of
+      \ someone else having waited for completion, we
+      \ just uninstall ourself.
+      uninstall-playback-alarm
+   then
+;
+' playback-continue-alarm to playback-alarm
+
+: start-audio-out  ( adr len -- )
+   to out-len            ( adr )
+   to out-adr            ( )
    make-out-ring
    copy-out
    start-out-ring
    enable-sspa-tx
-   begin  out-len  while
-      copy-out
-      wait-out
-   repeat
-   wait-out
-   disable-sspa-tx
+   out-len  if  copy-out  then  \ Prefill the second buffer
+   install-playback-alarm
+   true to playing?
+;
+
+: audio-out  ( adr len -- actual )  tuck start-audio-out  ;
+
+: stop-sound  ( -- )
+   lock[
+   playing?  if  stop-out  then
+   ]unlock
+;
+
+0 value time-limit
+: set-time-limit  ( ms -- )   get-msecs  +  to time-limit  ;
+: 1sec-time-limit  ( -- )  d# 1000 set-time-limit  ;
+: ?timeout  ( -- )
+   get-msecs  time-limit -  0>  if
+      ." Audio device timeout!" cr
+      abort
+   then
+;
+: wait-out-done  ( -- )
+   d# 20,000 set-time-limit  begin  ?timeout  playing? 0=  until
 ;
-: write  ( adr len -- actual )  open-out audio-out   ;
+: write-done  ( -- )  wait-out-done  stop-out  ;
+
+: write  ( adr len -- actual )  open-out audio-out  ;
 
 : wait-in  ( -- )
    buf-timeout  0  do
@@ -294,8 +359,11 @@
 ;
 : read  ( adr len -- actual )  open-in audio-in  ;
 
-: wait-sound  ( -- )  ;
-: stop-sound  ( -- )  ;
+: wait-sound  ( -- )
+   lock[
+   begin  playing?  while   d# 10 ms  ?end-playing  repeat
+   ]unlock
+;
 
 0 [if]
 \ Notes:
@@ -441,8 +509,7 @@
 : stereo  ;
 : mono  ;
 
-: open  ( -- flag )
-   audio-clock-on
+: init-codec  ( -- )
    codec-on
    headphones-inserted?  if  select-headphones  else  select-speakers  then
    default-speaker-volume set-speaker-volume
@@ -451,9 +518,19 @@
    default-mic-gain set-mic-gain
    default-adc-gain set-adc-gain
    d# 48000 set-sample-rate
+;
+0 value open-count
+: open  ( -- flag )
+   open-count 0=  if  audio-clock-on  init-codec  then
+   open-count 1+ to open-count
    true
 ;
-: close  ( -- )  ;
+: close  ( -- )
+   open-count 1 =  if
+      uninstall-playback-alarm  codec-off  ( audio-clock-off )
+   then
+   open-count 1- 0 max to open-count
+;
 
 fload ${BP}/forth/lib/isin.fth
 fload ${BP}/forth/lib/tones.fth

Modified: cpu/x86/pc/olpc/security.fth
==============================================================================
--- cpu/x86/pc/olpc/security.fth	Thu Nov 25 00:38:16 2010	(r2037)
+++ cpu/x86/pc/olpc/security.fth	Thu Nov 25 03:31:28 2010	(r2038)
@@ -328,7 +328,8 @@
 
 : date-bad?  ( -- flag )
    current-seconds  0=  if
-      time&date >unix-seconds to current-seconds
+      ['] time&date catch  if  true exit  then
+      >unix-seconds to current-seconds
    then
 
    \ earliest is the earliest acceptable date value (in seconds).



More information about the openfirmware mailing list