[openfirmware] [commit] r3238 - in cpu/arm: mmp2 olpc
repository service
svn at openfirmware.info
Wed Aug 29 03:20:39 CEST 2012
Author: wmb
Date: Wed Aug 29 03:20:38 2012
New Revision: 3238
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/3238
Log:
OLPC ARM - Audio driver - use the new "my-clocks-on/off" facility to move the clock enabling code out of this file into the PMUA driver.
Modified:
cpu/arm/mmp2/pmua.fth
cpu/arm/olpc/sound.fth
Modified: cpu/arm/mmp2/pmua.fth
==============================================================================
--- cpu/arm/mmp2/pmua.fth Wed Aug 29 02:50:52 2012 (r3237)
+++ cpu/arm/mmp2/pmua.fth Wed Aug 29 03:20:38 2012 (r3238)
@@ -121,37 +121,6 @@
[then]
" clock-enable-registers" property
-[ifdef] notdef
- " clock-enable-registers" get-property if ( on? clock# )
- 2drop exit ( -- )
- then ( on? clock# propval$ )
-
- \ Offset into clock-enable-registers array
- rot h# 10 * ( on? propval$ offset )
- 2dup <= if ( on? propval$ offset )
- 4drop exit ( -- )
- then ( on? propval-adr$ offset )
- /string ( on? propval-adr$' )
-
- \ Get register offset
- decode-int >r ( on? propval-adr$' r: reg-offset )
-
- \ Apply the clear mask to the register value
- decode-int invert ( on? propval-adr$' clr-mask r: reg-offset )
- r@ pmua@ and ( on? propval-adr$' regval r: reg-offset )
- -rot ( on? regval propval-adr$ r: reg-offset )
-
- \ Apply the set mask if the clock is being turned on
- 3 roll if ( regval propval-adr$ r: reg-offset )
- get-encoded-int or ( regval' r: reg-offset )
- else ( regval propval-adr$ r: reg-offset )
- 2drop ( regval r: reg-offset )
- then ( regval r: reg-offset )
-
- \ Write back the modified register value
- r> pmua! ( )
-[then]
-
: generic-on/off ( on? clock# -- )
get-reg&masks if drop exit then ( on? set-mask clr-mask reg )
>r r@ pmua@ and ( on? set-mask regval r: reg )
@@ -159,6 +128,71 @@
r> pmua!
;
+h# 10c constant audio-clk
+
+[ifdef] mmp3
+h# 164 constant audio-dsa
+h# 1e4 constant isld-dspa-ctrl
+h# 240 constant audio-sram-pwr
+[then]
+
+\ Discrepancies - ms vs us, double-enabling of AXI
+: dly d# 10 us ;
+
+: audio-island-on ( -- )
+[ifdef] mmp3
+ h# 200 audio-clk pmua-set dly \ Power switch on
+ h# 400 audio-clk pmua-set dly \ Power switch more on
+ 1 audio-sram-pwr pmua-set dly \ Audio SRAM on
+ 2 audio-sram-pwr pmua-set dly \ Audio SRAM more on
+ 4 audio-sram-pwr pmua-set dly \ Audio core on
+ 8 audio-sram-pwr pmua-set dly \ Audio core more on
+ h# 100 audio-clk pmua-set dly \ Disable isolation
+
+ 4 audio-clk pmua-set \ Start audio SRAM redundancy repair
+ begin audio-clk pmua@ 4 and 0= until \ And wait until done
+
+ \ Bring audio island out of reset
+ 1 audio-dsa pmua-set
+ 4 audio-dsa pmua-set
+ 1 audio-dsa pmua-set
+
+ \ Enable dummy clocks to the SRAMs
+ h# 10 isld-dspa-ctrl pmua-set d# 250 us h# 10 isld-dspa-ctrl pmua-clr
+
+ \ Enable the AXI/APB clocks to the Audio island prior to programming island registers
+ 2 audio-dsa pmua-set
+ 8 audio-dsa pmua-set
+[else]
+ h# 600 audio-clk pmua! dly \ Turn on power
+ h# 610 audio-clk pmua! dly \ Enable clock
+ h# 710 audio-clk pmua! dly \ Disable isolation
+ h# 712 audio-clk pmua! dly \ Release reset
+[then]
+;
+
+: audio-island-off ( -- )
+[ifdef] true
+[ifdef] mmp3
+ h# a audio-dsa pmua-clr \ Disable AXI and APB clocks
+ h# 5 audio-dsa pmua-clr \ Put AXI and APB clocks in reset
+ h# 100 audio-clk pmua-clr \ Enable isolation
+ h# c audio-sram-pwr pmua-clr \ Audio core off
+ h# 3 audio-sram-pwr pmua-clr \ Audio SRAM off
+ h# 600 audio-clk pmua-clr \ Enable isolation
+[else]
+ h# 710 audio-clk pmua! \ Set peripheral reset
+ h# 610 audio-clk pmua! \ Enable isolation
+ h# 600 audio-clk pmua! \ Disable clock
+ h# 000 audio-clk pmua! \ Turn off power
+[then]
+[then]
+ 0 audio-clk pmua!
+;
+: audio-on/off ( on? -- )
+ if audio-island-on else audio-island-off then
+;
+
[ifdef] mmp3
: ccic-isp-island-off ( -- )
h# 600 h# 1fc pmua! \ Isolation enabled
@@ -231,6 +265,10 @@
drop ccic-on/off exit ( -- )
then ( on? clock# )
+ dup d# 20 = if \ AUDIO ( on? clock# )
+ drop audio-on/off exit ( -- )
+ then
+
generic-on/off
;
Modified: cpu/arm/olpc/sound.fth
==============================================================================
--- cpu/arm/olpc/sound.fth Wed Aug 29 02:50:52 2012 (r3237)
+++ cpu/arm/olpc/sound.fth Wed Aug 29 03:20:38 2012 (r3238)
@@ -82,17 +82,9 @@
: adma! ( n offset -- ) adma-base + rl! ;
: adma@ ( offset -- n ) adma-base + rl@ ;
-h# 10c +pmua constant audio-clk
-[ifdef] mmp3
-h# 164 +pmua constant audio-dsa
-h# 1e4 +pmua constant isld-dspa-ctrl
-h# 240 +pmua constant audio-sram-pwr
-[then]
-
-: audio-clock! ( -- ) audio-clk io! ;
: audio-clock-off ( -- )
0 h# 38 sspa!
- 0 audio-clock!
+ my-clock-off
;
: start-audio-pll ( -- error? )
\ For VCXO=26 MHz, OCLK=12.2880 MHz
@@ -110,42 +102,9 @@
: dly d# 10 us ;
-\ Discrepancies - ms vs us, double-enabling of AXI
-: audio-island-on ( -- )
-[ifdef] mmp3
- h# 200 audio-clk io-set dly \ Power switch on
- h# 400 audio-clk io-set dly \ Power switch more on
- 1 audio-sram-pwr io-set dly \ Audio SRAM on
- 2 audio-sram-pwr io-set dly \ Audio SRAM more on
- 4 audio-sram-pwr io-set dly \ Audio core on
- 8 audio-sram-pwr io-set dly \ Audio core more on
- h# 100 audio-clk io-set dly \ Disable isolation
-
- 4 audio-clk io-set \ Start audio SRAM redundancy repair
- begin audio-clk io@ 4 and 0= until \ And wait until done
-
- \ Bring audio island out of reset
- 1 audio-dsa io-set
- 4 audio-dsa io-set
- 1 audio-dsa io-set
-
- \ Enable dummy clocks to the SRAMs
- h# 10 isld-dspa-ctrl io-set d# 250 us h# 10 isld-dspa-ctrl io-clr
-
- \ Enable the AXI/APB clocks to the Audio island prior to programming island registers
- 2 audio-dsa io-set
- 8 audio-dsa io-set
-[else]
- h# 600 audio-clock! dly \ Enable
- h# 610 audio-clock! dly \ Release reset
- h# 710 audio-clock! dly \ Enable
- h# 712 audio-clock! dly \ Release reset
-[then]
-;
-
false value use-audio-pll?
: audio-clock-on ( -- error? )
- audio-island-on
+ my-clock-on
use-audio-pll? if
start-audio-pll if true exit then
More information about the openfirmware
mailing list