* [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).