[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