Changeset 3238


Ignore:
Timestamp:
Aug 29, 2012, 1:20:38 AM (3 years ago)
Author:
wmb
Message:

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.

Location:
cpu/arm
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • cpu/arm/mmp2/pmua.fth

    r3236 r3238  
    122122" clock-enable-registers" property
    123123
    124 [ifdef] notdef
    125    " clock-enable-registers" get-property  if  ( on? clock# )
    126       2drop exit          ( -- )
    127    then                   ( on? clock# propval$ )
    128 
    129    \ Offset into clock-enable-registers array
    130    rot  h# 10 *           ( on? propval$ offset )
    131    2dup  <=  if           ( on? propval$ offset )
    132       4drop exit          ( -- )
    133    then                   ( on? propval-adr$ offset )
    134    /string                ( on? propval-adr$' )
    135    
    136    \ Get register offset
    137    decode-int >r          ( on? propval-adr$'           r: reg-offset )
    138 
    139    \ Apply the clear mask to the register value
    140    decode-int invert      ( on? propval-adr$' clr-mask  r: reg-offset )
    141    r@ pmua@ and           ( on? propval-adr$' regval    r: reg-offset )
    142    -rot                   ( on? regval propval-adr$     r: reg-offset )
    143 
    144    \ Apply the set mask if the clock is being turned on
    145    3 roll  if             ( regval propval-adr$         r: reg-offset )
    146       get-encoded-int or  ( regval'                     r: reg-offset )
    147    else                   ( regval propval-adr$         r: reg-offset )
    148       2drop               ( regval                      r: reg-offset )
    149    then                   ( regval                      r: reg-offset )
    150 
    151    \ Write back the modified register value
    152    r> pmua!               ( )
    153 [then]
    154 
    155124: generic-on/off  ( on? clock# -- )
    156125   get-reg&masks  if  drop exit  then  ( on? set-mask clr-mask reg )
     
    158127   rot  if  or  else  nip  then        ( regval'  r: reg )
    159128   r> pmua!
     129;
     130
     131h# 10c constant audio-clk
     132
     133[ifdef] mmp3
     134h# 164 constant audio-dsa
     135h# 1e4 constant isld-dspa-ctrl
     136h# 240 constant audio-sram-pwr
     137[then]
     138
     139\ Discrepancies - ms vs us, double-enabling of AXI
     140: dly  d# 10 us  ;
     141
     142: audio-island-on  ( -- )
     143[ifdef] mmp3
     144   h# 200  audio-clk  pmua-set  dly  \ Power switch on
     145   h# 400  audio-clk  pmua-set  dly  \ Power switch more on
     146   1  audio-sram-pwr  pmua-set  dly  \ Audio SRAM on
     147   2  audio-sram-pwr  pmua-set  dly  \ Audio SRAM more on
     148   4  audio-sram-pwr  pmua-set  dly  \ Audio core on
     149   8  audio-sram-pwr  pmua-set  dly  \ Audio core more on
     150   h# 100  audio-clk  pmua-set  dly  \ Disable isolation
     151
     152   4  audio-clk pmua-set           \ Start audio SRAM redundancy repair
     153   begin  audio-clk pmua@  4 and 0=  until  \ And wait until done
     154
     155   \ Bring audio island out of reset
     156   1 audio-dsa pmua-set
     157   4 audio-dsa pmua-set
     158   1 audio-dsa pmua-set
     159
     160   \ Enable dummy clocks to the SRAMs
     161   h# 10 isld-dspa-ctrl pmua-set  d# 250 us  h# 10 isld-dspa-ctrl pmua-clr
     162
     163   \ Enable the AXI/APB clocks to the Audio island prior to programming island registers
     164   2 audio-dsa pmua-set
     165   8 audio-dsa pmua-set
     166[else]
     167   h# 600  audio-clk  pmua!  dly  \ Turn on power
     168   h# 610  audio-clk  pmua!  dly  \ Enable clock
     169   h# 710  audio-clk  pmua!  dly  \ Disable isolation
     170   h# 712  audio-clk  pmua!  dly  \ Release reset
     171[then]
     172;
     173
     174: audio-island-off  ( -- )
     175[ifdef] true
     176[ifdef] mmp3
     177   h#   a  audio-dsa       pmua-clr  \ Disable AXI and APB clocks
     178   h#   5  audio-dsa       pmua-clr  \ Put AXI and APB clocks in reset
     179   h# 100  audio-clk       pmua-clr  \ Enable isolation
     180   h#   c  audio-sram-pwr  pmua-clr  \ Audio core off
     181   h#   3  audio-sram-pwr  pmua-clr  \ Audio SRAM off
     182   h# 600  audio-clk       pmua-clr  \ Enable isolation
     183[else]
     184   h# 710  audio-clk  pmua!  \ Set peripheral reset
     185   h# 610  audio-clk  pmua!  \ Enable isolation
     186   h# 600  audio-clk  pmua!  \ Disable clock
     187   h# 000  audio-clk  pmua!  \ Turn off power
     188[then]
     189[then]
     190   0 audio-clk pmua!
     191;
     192: audio-on/off  ( on? -- )
     193   if  audio-island-on  else  audio-island-off  then
    160194;
    161195
     
    232266   then                            ( on? clock# )
    233267
     268   dup d# 20 =  if   \ AUDIO       ( on? clock# )
     269      drop  audio-on/off  exit     ( -- )
     270   then
     271
    234272   generic-on/off
    235273;
  • cpu/arm/olpc/sound.fth

    r3232 r3238  
    8383: adma@  ( offset -- n )  adma-base + rl@  ;
    8484
    85 h# 10c +pmua constant audio-clk
    86 [ifdef] mmp3
    87 h# 164 +pmua constant audio-dsa
    88 h# 1e4 +pmua constant isld-dspa-ctrl
    89 h# 240 +pmua constant audio-sram-pwr
    90 [then]
    91 
    92 : audio-clock!     ( -- )  audio-clk io!  ;
    9385: audio-clock-off  ( -- )
    9486   0 h# 38 sspa!
    95    0 audio-clock!
     87   my-clock-off
    9688;
    9789: start-audio-pll  ( -- error? )
     
    111103: dly  d# 10 us  ;
    112104
    113 \ Discrepancies - ms vs us, double-enabling of AXI
    114 : audio-island-on  ( -- )
    115 [ifdef] mmp3
    116    h# 200  audio-clk  io-set  dly  \ Power switch on
    117    h# 400  audio-clk  io-set  dly  \ Power switch more on
    118    1  audio-sram-pwr  io-set  dly  \ Audio SRAM on
    119    2  audio-sram-pwr  io-set  dly  \ Audio SRAM more on
    120    4  audio-sram-pwr  io-set  dly  \ Audio core on
    121    8  audio-sram-pwr  io-set  dly  \ Audio core more on
    122    h# 100  audio-clk  io-set  dly  \ Disable isolation
    123 
    124    4  audio-clk io-set           \ Start audio SRAM redundancy repair
    125    begin  audio-clk io@  4 and 0=  until  \ And wait until done
    126 
    127    \ Bring audio island out of reset
    128    1 audio-dsa io-set
    129    4 audio-dsa io-set
    130    1 audio-dsa io-set
    131 
    132    \ Enable dummy clocks to the SRAMs
    133    h# 10 isld-dspa-ctrl io-set  d# 250 us  h# 10 isld-dspa-ctrl io-clr
    134 
    135    \ Enable the AXI/APB clocks to the Audio island prior to programming island registers
    136    2 audio-dsa io-set
    137    8 audio-dsa io-set
    138 [else]
    139    h# 600 audio-clock!  dly  \ Enable
    140    h# 610 audio-clock!  dly  \ Release reset
    141    h# 710 audio-clock!  dly  \ Enable
    142    h# 712 audio-clock!  dly  \ Release reset
    143 [then]
    144 ;
    145 
    146105false value use-audio-pll?
    147106: audio-clock-on  ( -- error? )
    148    audio-island-on
     107   my-clock-on
    149108
    150109   use-audio-pll?  if
Note: See TracChangeset for help on using the changeset viewer.