Message ID | 20230517-topic-a7xx_prep-v1-5-7a964f2e99c2@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Adreno QoL changes | expand |
AFAIK GMU_ALWAYS_ON_COUNTER does not have the same value as CP_ALWAYS_ON_COUNTER (only the same frequency), so changing this would break userspace expecting to be able to compare the value returned by MSM_PARAM_TIMESTAMP with CP timestamp values. On 5/17/23 12:50 PM, Konrad Dybcio wrote: > Use the always-on counter provided by the GMU to skip having to > keep the GPU online. > > Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> > --- > drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 9 +++------ > 1 file changed, 3 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c > index 8707e8b6ac7e..d2a999b90589 100644 > --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c > +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c > @@ -1664,12 +1664,9 @@ static int a6xx_get_timestamp(struct msm_gpu *gpu, uint64_t *value) > > mutex_lock(&a6xx_gpu->gmu.lock); > > - /* Force the GPU power on so we can read this register */ > - a6xx_gmu_set_oob(&a6xx_gpu->gmu, GMU_OOB_PERFCOUNTER_SET); > - > - *value = gpu_read64(gpu, REG_A6XX_CP_ALWAYS_ON_COUNTER); > - > - a6xx_gmu_clear_oob(&a6xx_gpu->gmu, GMU_OOB_PERFCOUNTER_SET); > + *value = gmu_read64(&a6xx_gpu->gmu, > + REG_A6XX_GMU_ALWAYS_ON_COUNTER_L, > + REG_A6XX_GMU_ALWAYS_ON_COUNTER_H); > > mutex_unlock(&a6xx_gpu->gmu.lock); > >
On 17.05.2023 20:09, Jonathan Marek wrote: > AFAIK GMU_ALWAYS_ON_COUNTER does not have the same value as CP_ALWAYS_ON_COUNTER (only the same frequency), so changing this would break userspace expecting to be able to compare the value returned by MSM_PARAM_TIMESTAMP with CP timestamp values. FWIW A630 and A730 seem to work fine with this patch. Anything in particular I should look out for? Konrad > > On 5/17/23 12:50 PM, Konrad Dybcio wrote: >> Use the always-on counter provided by the GMU to skip having to >> keep the GPU online. >> >> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> >> --- >> drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 9 +++------ >> 1 file changed, 3 insertions(+), 6 deletions(-) >> >> diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c >> index 8707e8b6ac7e..d2a999b90589 100644 >> --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c >> +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c >> @@ -1664,12 +1664,9 @@ static int a6xx_get_timestamp(struct msm_gpu *gpu, uint64_t *value) >> mutex_lock(&a6xx_gpu->gmu.lock); >> - /* Force the GPU power on so we can read this register */ >> - a6xx_gmu_set_oob(&a6xx_gpu->gmu, GMU_OOB_PERFCOUNTER_SET); >> - >> - *value = gpu_read64(gpu, REG_A6XX_CP_ALWAYS_ON_COUNTER); >> - >> - a6xx_gmu_clear_oob(&a6xx_gpu->gmu, GMU_OOB_PERFCOUNTER_SET); >> + *value = gmu_read64(&a6xx_gpu->gmu, >> + REG_A6XX_GMU_ALWAYS_ON_COUNTER_L, >> + REG_A6XX_GMU_ALWAYS_ON_COUNTER_H); >> mutex_unlock(&a6xx_gpu->gmu.lock); >>
On 5/17/23 3:08 PM, Konrad Dybcio wrote: > > > On 17.05.2023 20:09, Jonathan Marek wrote: >> AFAIK GMU_ALWAYS_ON_COUNTER does not have the same value as CP_ALWAYS_ON_COUNTER (only the same frequency), so changing this would break userspace expecting to be able to compare the value returned by MSM_PARAM_TIMESTAMP with CP timestamp values. > FWIW A630 and A730 seem to work fine with this patch. Anything > in particular I should look out for? mesa uses it for perfetto tracing to synchronize the GPU/CPU timelines. > > Konrad >> >> On 5/17/23 12:50 PM, Konrad Dybcio wrote: >>> Use the always-on counter provided by the GMU to skip having to >>> keep the GPU online. >>> >>> Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> >>> --- >>> drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 9 +++------ >>> 1 file changed, 3 insertions(+), 6 deletions(-) >>> >>> diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c >>> index 8707e8b6ac7e..d2a999b90589 100644 >>> --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c >>> +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c >>> @@ -1664,12 +1664,9 @@ static int a6xx_get_timestamp(struct msm_gpu *gpu, uint64_t *value) >>> mutex_lock(&a6xx_gpu->gmu.lock); >>> - /* Force the GPU power on so we can read this register */ >>> - a6xx_gmu_set_oob(&a6xx_gpu->gmu, GMU_OOB_PERFCOUNTER_SET); >>> - >>> - *value = gpu_read64(gpu, REG_A6XX_CP_ALWAYS_ON_COUNTER); >>> - >>> - a6xx_gmu_clear_oob(&a6xx_gpu->gmu, GMU_OOB_PERFCOUNTER_SET); >>> + *value = gmu_read64(&a6xx_gpu->gmu, >>> + REG_A6XX_GMU_ALWAYS_ON_COUNTER_L, >>> + REG_A6XX_GMU_ALWAYS_ON_COUNTER_H); >>> mutex_unlock(&a6xx_gpu->gmu.lock); >>>
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c index 8707e8b6ac7e..d2a999b90589 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -1664,12 +1664,9 @@ static int a6xx_get_timestamp(struct msm_gpu *gpu, uint64_t *value) mutex_lock(&a6xx_gpu->gmu.lock); - /* Force the GPU power on so we can read this register */ - a6xx_gmu_set_oob(&a6xx_gpu->gmu, GMU_OOB_PERFCOUNTER_SET); - - *value = gpu_read64(gpu, REG_A6XX_CP_ALWAYS_ON_COUNTER); - - a6xx_gmu_clear_oob(&a6xx_gpu->gmu, GMU_OOB_PERFCOUNTER_SET); + *value = gmu_read64(&a6xx_gpu->gmu, + REG_A6XX_GMU_ALWAYS_ON_COUNTER_L, + REG_A6XX_GMU_ALWAYS_ON_COUNTER_H); mutex_unlock(&a6xx_gpu->gmu.lock);
Use the always-on counter provided by the GMU to skip having to keep the GPU online. Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> --- drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-)