• Doug Anderson's avatar
    clk: rockchip: rk3288: Make s2r reliable by switching PLLs to slow mode · a7d95000
    Doug Anderson authored
    We've been seeing some crashes at resume time on rk3288-based systems.
    On some machines they simply never wake up from suspend.  Symptoms
    include:
    
    - System clearly got to sleep OK.  Power consumption is low, the PWM
      for the PWM regulator has stopped, and the "global_pwroff" output
      shows that the system is down.
    
    - When system tries to wake up power consumption goes up.
    
    - No kernel resume code (which was left in PMU SRAM) ran.  We added
      some basic logging to this code (write to a location in SRAM right
      at resume time) and didn't see the logging run.
    
    It appears that we can fix the problem by slowing down APLL before we
    suspend.  On the system I tested things seemed reliable if I disabled
    1.8GHz and 1.7GHz.  The Mask ROM itself tries to slow things down
    (which is why PLLs are in slow mode by the time we get to the kernel),
    but apparently it is crashing before it even gets there.
    
    We'll be super paranoid and not just go down to 1.6GHz but we'll match
    what the Mask ROM seems to be doing and go into slow mode.  We'll also
    be safe and put all PLLs (not just APLL) into slow mode (well, except
    DPLL which is needed for SDRAM).  We'll even put NPLL into slow mode
    which the Mask ROM didn't do (not that it's used for much important
    stuff at early resume time).
    
    Note that the old Rockchip reference code did something just like
    this, though they jammed it into pm.c instead of putting it in the
    syscore ops of the clock driver.
    Signed-off-by: default avatarDoug Anderson <dianders@chromium.org>
    Signed-off-by: default avatarHeiko Stuebner <heiko@sntech.de>
    a7d95000
clk-rk3288.c 39.1 KB