Hi Lucas > > Nothing in this callpath actually touches the GPU, so there is no reason > to get it out of suspend state here. Only if runtime PM isn't enabled at > all we must make sure to enable the clocks, so the GPU init routine can > access the GPU later on. > > This also removes the need to guard against the state where the driver > isn't fully initialized yet in the runtime PM resume handler. > > Signed-off-by: Lucas Stach <l.stach@xxxxxxxxxxxxxx> Reviewed-by: Christian Gmeiner <cgmeiner@xxxxxxxxxx> > --- > drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 15 +++++---------- > 1 file changed, 5 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c > index 57cf77ed2fcf..fb07d0e73802 100644 > --- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c > +++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c > @@ -1735,13 +1735,11 @@ static int etnaviv_gpu_bind(struct device *dev, struct device *master, > if (ret) > goto out_workqueue; > > - if (IS_ENABLED(CONFIG_PM)) > - ret = pm_runtime_get_sync(gpu->dev); > - else > + if (!IS_ENABLED(CONFIG_PM)) { > ret = etnaviv_gpu_clk_enable(gpu); > - if (ret < 0) > - goto out_sched; > - > + if (ret < 0) > + goto out_sched; > + } > > gpu->drm = drm; > gpu->fence_context = dma_fence_context_alloc(1); > @@ -1753,9 +1751,6 @@ static int etnaviv_gpu_bind(struct device *dev, struct device *master, > > priv->gpu[priv->num_gpus++] = gpu; > > - pm_runtime_mark_last_busy(gpu->dev); > - pm_runtime_put_autosuspend(gpu->dev); > - > return 0; > > out_sched: > @@ -1936,7 +1931,7 @@ static int etnaviv_gpu_rpm_resume(struct device *dev) > return ret; > > /* Re-initialise the basic hardware state */ > - if (gpu->drm && gpu->initialized) { > + if (gpu->initialized) { > ret = etnaviv_gpu_hw_resume(gpu); > if (ret) { > etnaviv_gpu_clk_disable(gpu); > -- > 2.39.2 > -- greets -- Christian Gmeiner, MSc https://christian-gmeiner.info/privacypolicy