• Jie Yang's avatar
    ASoC: Intel: Work around to fix HW D3 potential crash issue · 0d2135ec
    Jie Yang authored
    When using clock gatings to save power, there are some known issues:
    1. core clock gating (DCLCGE) must be disabled during D0 and D3 entry
    and updating SRAM banks (VDRTCTL0).
    2. DSP trunk clock gating (DTCGE) can cause FW crashes, disable it in D0.
    
    To align with the new W/A flow from FW team, we must set VDRTCTL0.D3PGD
    to 1 (D3 power gating disabled) at first startup and keep it all the time.
    ADSP will be in D0 on first boot by BIOS part of WA. Required delays must
    be preserved (waiting for HW to stabilize, after enabling CCG, changing
    SRAM PG, D3PG).
    
    D3->D0:
    1. Disable core clock gating (VDRTCTL2.DCLCGE = 0)
    2. Enable other CG apart from DTCG and DCLCG (VDRTCTL2. DCLCGE and DTCGE = 0)
    3. Disable D3PG (VDRTCTL0.D3PGD = 1)
    4. Power up necessary SRAM and wait at least for 18 clock cycles for every
    bank you have powered up
    5. Set D0 state(PMCS.PS = 0), wait for HW
    6. Restore MCLK (clkctl.smos, disabled in D3 entry point 4)
    7. Stall and reset core, set CSR
    8. Enable core clock gating (VDRTCTL2.DCLCGE = 1), delay 50 us
    9. Unreset core
    10.Load FW, configure PLL and other necessary things
    11.Unstall core
    
    Changing SRAM PG during D0:
    1. Disable core clock gating (VDRTCTL2.DCLCGE = 0)
    2. Set PG mask
    3. Wait at least for 18 clock cycles for every bank you have powered up
    4. Enable core clock gating, delay 50 us
    
    D0->D3:
    1. Disable core clock gating (DCLCGE = 0)
    2. Stall and reset core
    3. Power down entire SRAM and wait at least for 18 clock cycles for every bank
    (Enable SRAM PG (ISRAMPGE = 0x3FF, DSRAMPGE = 0xFFFFF, D3SRAMPGD = 0), remember
    about preserving VDRTCTL0.D3PGD = 1)
    4. Shutdown PLL, disable MCLK(clkctl.smos = 0), Enable DTCG to save power
    5. Set D3 state(PMCS.PS = 3), delay 50 us
    6. Enable core clock gating, delay 50 us
    Signed-off-by: default avatarJie Yang <yang.jie@intel.com>
    Signed-off-by: default avatarMark Brown <broonie@kernel.org>
    0d2135ec
sst-haswell-dsp.c 18.6 KB