• Jordan Crouse's avatar
    drm/msm: Check for powered down HW in the devfreq callbacks · eadf7928
    Jordan Crouse authored
    Writing to the devfreq sysfs nodes while the GPU is powered down can
    result in a system crash (on a5xx) or a nasty GMU error (on a6xx):
    
     $ /sys/class/devfreq/5000000.gpu# echo 500000000 > min_freq
      [  104.841625] platform 506a000.gmu: [drm:a6xx_gmu_set_oob]
    	*ERROR* Timeout waiting for GMU OOB set GPU_DCVS: 0x0
    
    Despite the fact that we carefully try to suspend the devfreq device when
    the hardware is powered down there are lots of holes in the governors that
    don't check for the suspend state and blindly call into the devfreq
    callbacks that end up triggering hardware reads in the GPU driver.
    
    Call pm_runtime_get_if_in_use() in the gpu_busy() and gpu_set_freq()
    callbacks to skip the hardware access if it isn't active.
    
    v3: Only check pm_runtime_get_if_in_use() for == 0 per Eric Anholt
    v2: Use pm_runtime_get_if_in_use() per Eric Anholt
    
    Cc: stable@vger.kernel.org
    Reviewed-by: default avatarEric Anholt <eric@anholt.net>
    Signed-off-by: default avatarJordan Crouse <jcrouse@codeaurora.org>
    Signed-off-by: default avatarRob Clark <robdclark@chromium.org>
    eadf7928
a6xx_gmu.c 33.7 KB