* [PATCH] drm/msm/a6xx: don't try to set GPU frequency when GMU is suspended @ 2020-05-19 3:07 Jonathan Marek 2020-05-22 22:11 ` Jordan Crouse 0 siblings, 1 reply; 4+ messages in thread From: Jonathan Marek @ 2020-05-19 3:07 UTC (permalink / raw) To: freedreno Cc: Rob Clark, Sean Paul, David Airlie, Daniel Vetter, Jordan Crouse, Michael J. Ruhl, Sharat Masetty, open list:DRM DRIVER FOR MSM ADRENO GPU, open list:DRM DRIVER FOR MSM ADRENO GPU, open list This fixes changing the frequency in sysfs while suspended, for example when doing something like this: cat devfreq/3d00000.gpu/max_freq > devfreq/3d00000.gpu/min_freq Signed-off-by: Jonathan Marek <jonathan@marek.ca> --- drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c index aec54cde8534..9498803dcad9 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c @@ -151,13 +151,20 @@ void a6xx_gmu_set_freq(struct msm_gpu *gpu, unsigned long freq) break; gmu->current_perf_index = perf_index; + gmu->freq = gmu->gpu_freqs[perf_index]; + + /* + * devfreq may try to change frequency target even when suspended + * this can happen when changing frequency through sysfs + * don't try to set freq when suspended, it will be set on resume + */ + if (!pm_runtime_active(gmu->dev)) + return; if (gmu->legacy) __a6xx_gmu_set_freq(gmu, perf_index); else a6xx_hfi_set_freq(gmu, perf_index); - - gmu->freq = gmu->gpu_freqs[perf_index]; } unsigned long a6xx_gmu_get_freq(struct msm_gpu *gpu) -- 2.26.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] drm/msm/a6xx: don't try to set GPU frequency when GMU is suspended 2020-05-19 3:07 [PATCH] drm/msm/a6xx: don't try to set GPU frequency when GMU is suspended Jonathan Marek @ 2020-05-22 22:11 ` Jordan Crouse 2020-05-22 22:29 ` [PATCH v2] drm/msm/a6xx: skip HFI set freq if GMU is powered down Jonathan Marek 0 siblings, 1 reply; 4+ messages in thread From: Jordan Crouse @ 2020-05-22 22:11 UTC (permalink / raw) To: Jonathan Marek Cc: freedreno, Rob Clark, Sean Paul, David Airlie, Daniel Vetter, Michael J. Ruhl, Sharat Masetty, open list:DRM DRIVER FOR MSM ADRENO GPU, open list:DRM DRIVER FOR MSM ADRENO GPU, open list On Mon, May 18, 2020 at 11:07:33PM -0400, Jonathan Marek wrote: > This fixes changing the frequency in sysfs while suspended, for example > when doing something like this: > > cat devfreq/3d00000.gpu/max_freq > devfreq/3d00000.gpu/min_freq A patch landed to fix this [1] but it crossed paths in the night with the a640/a650 support. Can you respin this to move the pm_runtime_get_if_in_use() check in _a6xx_gmu_set_freq() to the higher level function and then we should be covered. Thanks, Jordan [1] https://patchwork.freedesktop.org/patch/364089/?series=76829&rev=3 > Signed-off-by: Jonathan Marek <jonathan@marek.ca> > --- > drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c > index aec54cde8534..9498803dcad9 100644 > --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c > +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c > @@ -151,13 +151,20 @@ void a6xx_gmu_set_freq(struct msm_gpu *gpu, unsigned long freq) > break; > > gmu->current_perf_index = perf_index; > + gmu->freq = gmu->gpu_freqs[perf_index]; > + > + /* > + * devfreq may try to change frequency target even when suspended > + * this can happen when changing frequency through sysfs > + * don't try to set freq when suspended, it will be set on resume > + */ > + if (!pm_runtime_active(gmu->dev)) > + return; > > if (gmu->legacy) > __a6xx_gmu_set_freq(gmu, perf_index); > else > a6xx_hfi_set_freq(gmu, perf_index); > - > - gmu->freq = gmu->gpu_freqs[perf_index]; > } > > unsigned long a6xx_gmu_get_freq(struct msm_gpu *gpu) > -- > 2.26.1 > -- The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2] drm/msm/a6xx: skip HFI set freq if GMU is powered down 2020-05-22 22:11 ` Jordan Crouse @ 2020-05-22 22:29 ` Jonathan Marek 2020-05-26 15:49 ` Jordan Crouse 0 siblings, 1 reply; 4+ messages in thread From: Jonathan Marek @ 2020-05-22 22:29 UTC (permalink / raw) To: freedreno Cc: Rob Clark, Sean Paul, David Airlie, Daniel Vetter, Jordan Crouse, Stephen Boyd, Sharat Masetty, open list:DRM DRIVER FOR MSM ADRENO GPU, open list:DRM DRIVER FOR MSM ADRENO GPU, open list:DRM DRIVER FOR MSM ADRENO GPU, open list Also skip the newly added HFI set freq path if the GMU is powered down, which was missing because of patches crossing paths. Signed-off-by: Jonathan Marek <jonathan@marek.ca> --- drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c index 67c58345b26a..9851367a88cd 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c @@ -110,13 +110,6 @@ static void __a6xx_gmu_set_freq(struct a6xx_gmu *gmu, int index) struct msm_gpu *gpu = &adreno_gpu->base; int ret; - /* - * This can get called from devfreq while the hardware is idle. Don't - * bring up the power if it isn't already active - */ - if (pm_runtime_get_if_in_use(gmu->dev) == 0) - return; - gmu_write(gmu, REG_A6XX_GMU_DCVS_ACK_OPTION, 0); gmu_write(gmu, REG_A6XX_GMU_DCVS_PERF_SETTING, @@ -141,7 +134,6 @@ static void __a6xx_gmu_set_freq(struct a6xx_gmu *gmu, int index) * for now leave it at max so that the performance is nominal. */ icc_set_bw(gpu->icc_path, 0, MBps_to_icc(7216)); - pm_runtime_put(gmu->dev); } void a6xx_gmu_set_freq(struct msm_gpu *gpu, unsigned long freq) @@ -159,13 +151,21 @@ void a6xx_gmu_set_freq(struct msm_gpu *gpu, unsigned long freq) break; gmu->current_perf_index = perf_index; + gmu->freq = gmu->gpu_freqs[perf_index]; + + /* + * This can get called from devfreq while the hardware is idle. Don't + * bring up the power if it isn't already active + */ + if (pm_runtime_get_if_in_use(gmu->dev) == 0) + return; if (gmu->legacy) __a6xx_gmu_set_freq(gmu, perf_index); else a6xx_hfi_set_freq(gmu, perf_index); - gmu->freq = gmu->gpu_freqs[perf_index]; + pm_runtime_put(gmu->dev); } unsigned long a6xx_gmu_get_freq(struct msm_gpu *gpu) -- 2.26.1 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2] drm/msm/a6xx: skip HFI set freq if GMU is powered down 2020-05-22 22:29 ` [PATCH v2] drm/msm/a6xx: skip HFI set freq if GMU is powered down Jonathan Marek @ 2020-05-26 15:49 ` Jordan Crouse 0 siblings, 0 replies; 4+ messages in thread From: Jordan Crouse @ 2020-05-26 15:49 UTC (permalink / raw) To: Jonathan Marek Cc: freedreno, Rob Clark, Sean Paul, David Airlie, Daniel Vetter, Stephen Boyd, Sharat Masetty, open list:DRM DRIVER FOR MSM ADRENO GPU, open list:DRM DRIVER FOR MSM ADRENO GPU, open list:DRM DRIVER FOR MSM ADRENO GPU, open list On Fri, May 22, 2020 at 06:29:08PM -0400, Jonathan Marek wrote: > Also skip the newly added HFI set freq path if the GMU is powered down, > which was missing because of patches crossing paths. I saw the 5.8 pull later in my inbox so I'm not sure if this made it or not but it qualifies as a -fix if it didn't. Reviewed-by: Jordan Crouse <jcrouse@codeaurora.org> > Signed-off-by: Jonathan Marek <jonathan@marek.ca> > --- > drivers/gpu/drm/msm/adreno/a6xx_gmu.c | 18 +++++++++--------- > 1 file changed, 9 insertions(+), 9 deletions(-) > > diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c > index 67c58345b26a..9851367a88cd 100644 > --- a/drivers/gpu/drm/msm/adreno/a6xx_gmu.c > +++ b/drivers/gpu/drm/msm/adreno/a6xx_gmu.c > @@ -110,13 +110,6 @@ static void __a6xx_gmu_set_freq(struct a6xx_gmu *gmu, int index) > struct msm_gpu *gpu = &adreno_gpu->base; > int ret; > > - /* > - * This can get called from devfreq while the hardware is idle. Don't > - * bring up the power if it isn't already active > - */ > - if (pm_runtime_get_if_in_use(gmu->dev) == 0) > - return; > - > gmu_write(gmu, REG_A6XX_GMU_DCVS_ACK_OPTION, 0); > > gmu_write(gmu, REG_A6XX_GMU_DCVS_PERF_SETTING, > @@ -141,7 +134,6 @@ static void __a6xx_gmu_set_freq(struct a6xx_gmu *gmu, int index) > * for now leave it at max so that the performance is nominal. > */ > icc_set_bw(gpu->icc_path, 0, MBps_to_icc(7216)); > - pm_runtime_put(gmu->dev); > } > > void a6xx_gmu_set_freq(struct msm_gpu *gpu, unsigned long freq) > @@ -159,13 +151,21 @@ void a6xx_gmu_set_freq(struct msm_gpu *gpu, unsigned long freq) > break; > > gmu->current_perf_index = perf_index; > + gmu->freq = gmu->gpu_freqs[perf_index]; > + > + /* > + * This can get called from devfreq while the hardware is idle. Don't > + * bring up the power if it isn't already active > + */ > + if (pm_runtime_get_if_in_use(gmu->dev) == 0) > + return; > > if (gmu->legacy) > __a6xx_gmu_set_freq(gmu, perf_index); > else > a6xx_hfi_set_freq(gmu, perf_index); > > - gmu->freq = gmu->gpu_freqs[perf_index]; > + pm_runtime_put(gmu->dev); > } > > unsigned long a6xx_gmu_get_freq(struct msm_gpu *gpu) > -- > 2.26.1 > -- The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-05-26 15:50 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2020-05-19 3:07 [PATCH] drm/msm/a6xx: don't try to set GPU frequency when GMU is suspended Jonathan Marek 2020-05-22 22:11 ` Jordan Crouse 2020-05-22 22:29 ` [PATCH v2] drm/msm/a6xx: skip HFI set freq if GMU is powered down Jonathan Marek 2020-05-26 15:49 ` Jordan Crouse
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).