• Caesar Wang's avatar
    rockchip: on rk3399 init the PMU counts at boot; set 24M/32k properly · 0786d688
    Caesar Wang authored
    In a previous change we mistakenly thought that PMU_24M_EN_CFG directly
    controlled whether the PMU counts ran off the 32k vs. 24M clock.
    Apparently that's not true.  Real logic is now documented in code.
    
    Also in the previous change we mistaknely though that PMU_24M_EN_CFG was
    normally supposed to be 1 and we should "restore" it at resume time.
    This is a terrible idea and made the system totally unreliable after
    resume.  Apparently PMU_24M_EN_CFG should always be 0 with all the
    current code and settings.
    
    Let's fix the above two problems.  While we're changing all of this,
    let's also:
    
    1. Init at boot time.  Many of these counts are used when the system is
       running normally.  We want the behavior at boot to match the behavior
       after suspend/resume.
    
    2. Init CPU counts to be 1 us.  Although old code was trying to set this
       to 1 ms (1000x slower) at suspend/resume time, we've been testing the
       kernel with 1 us for a long time now.  That's because the kernel (at
       boot time) set these values to 24.  Let's keep at 24 until we know
       that's wrong.
    
    3. Init GPU counts to be 1 us.  Old code wasn't touching the GPU, but as
       documented in comments it makes sense to init here.  Do it.
    
    4. Document the crap out of this code, since the SoC's behavior is
       confusing and poorly documented in the TRM.
    
    5. Increase some stabilization times to 30 ms (from 3 ms).  It's unclear
       that a full 30 ms is needed, but let's be safe for now.
    
    This also inits the counts for the GPU.
    
    (Thanks to Doug's patch that come from https://crosreview.com/372381)
    
    Change-Id: Id1bc159a5a99916aeab043895e5c4585c4adab22
    0786d688
pmu.c 31 KB