It isn't really useful to start sampling counters before hw_init(). And the next commit will require IFPC OOB request to come after hw_init().
Signed-off-by: Rob Clark <[email protected]> --- drivers/gpu/drm/msm/adreno/adreno_device.c | 5 +---- drivers/gpu/drm/msm/adreno/adreno_gpu.c | 1 - drivers/gpu/drm/msm/msm_gpu.c | 4 +++- drivers/gpu/drm/msm/msm_perfcntr.c | 9 ++++++++- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/adreno_device.c b/drivers/gpu/drm/msm/adreno/adreno_device.c index 7108d4aa59b5..749269843e42 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_device.c +++ b/drivers/gpu/drm/msm/adreno/adreno_device.c @@ -309,10 +309,7 @@ MODULE_DEVICE_TABLE(of, dt_match); static int adreno_runtime_resume(struct device *dev) { struct msm_gpu *gpu = dev_to_gpu(dev); - int ret = gpu->funcs->pm_resume(gpu); - if (!ret) - ret = msm_perfcntr_resume(gpu); - return ret; + return gpu->funcs->pm_resume(gpu); } static int adreno_runtime_suspend(struct device *dev) diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.c b/drivers/gpu/drm/msm/adreno/adreno_gpu.c index 6db6cb7eb287..d074f4df78f6 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.c +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.c @@ -720,7 +720,6 @@ void adreno_recover(struct msm_gpu *gpu) msm_perfcntr_suspend(gpu); gpu->funcs->pm_suspend(gpu); gpu->funcs->pm_resume(gpu); - msm_perfcntr_resume(gpu); ret = msm_gpu_hw_init(gpu); if (ret) { diff --git a/drivers/gpu/drm/msm/msm_gpu.c b/drivers/gpu/drm/msm/msm_gpu.c index fb07803f5aba..ca21b3bf20df 100644 --- a/drivers/gpu/drm/msm/msm_gpu.c +++ b/drivers/gpu/drm/msm/msm_gpu.c @@ -168,8 +168,10 @@ int msm_gpu_hw_init(struct msm_gpu *gpu) disable_irq(gpu->irq); ret = gpu->funcs->hw_init(gpu); - if (!ret) + if (!ret) { + msm_perfcntr_resume(gpu); gpu->needs_hw_init = false; + } enable_irq(gpu->irq); return ret; diff --git a/drivers/gpu/drm/msm/msm_perfcntr.c b/drivers/gpu/drm/msm/msm_perfcntr.c index ce65b1160955..36ce9a102c5e 100644 --- a/drivers/gpu/drm/msm/msm_perfcntr.c +++ b/drivers/gpu/drm/msm/msm_perfcntr.c @@ -199,10 +199,17 @@ sel_worker(struct work_struct *w) return; scoped_guard (mutex, &gpu->lock) { + /* + * If gpu still needs hw_init, bail. We'll be rescheduled + * after hw_init, and there is no point to collect counters + * beforehand + */ + if (gpu->needs_hw_init) + return; + guard(mutex)(&gpu->perfcntr_lock); if (stream == gpu->perfcntrs->stream) { - msm_gpu_hw_init(gpu); gpu->funcs->perfcntr_configure(gpu, ring, stream); } } -- 2.56.0
