linux-arm-msm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/4] Venus - change clk enable, disable order and change bw values
@ 2020-09-24  6:51 Mansur Alisha Shaik
  2020-09-24  6:51 ` [PATCH v3 1/4] venus: core: change clk enable and disable order in resume and suspend Mansur Alisha Shaik
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Mansur Alisha Shaik @ 2020-09-24  6:51 UTC (permalink / raw)
  To: linux-media, stanimir.varbanov
  Cc: linux-kernel, linux-arm-msm, vgarodia, Mansur Alisha Shaik

The intention of this patchset is to correct clock enable and disable
order and vote for venus-ebi and cpucfg paths with average bandwidth
instad of peak bandwidth since with current implementation we are seeing
clock related warning during XO-SD and suspend device while video playback

Mansur Alisha Shaik (4):
  venus: core: change clk enable and disable order in resume and suspend
  venus: core: vote for video-mem path
  venus: core: vote with average bandwidth and peak bandwidth as zero
  venus: put dummy vote on video-mem path after last session release

 drivers/media/platform/qcom/venus/core.c       | 32 ++++++++++++++++++++------
 drivers/media/platform/qcom/venus/pm_helpers.c | 10 ++++++++
 2 files changed, 35 insertions(+), 7 deletions(-)

-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member 
of Code Aurora Forum, hosted by The Linux Foundation


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v3 1/4] venus: core: change clk enable and disable order in resume and suspend
  2020-09-24  6:51 [PATCH v3 0/4] Venus - change clk enable, disable order and change bw values Mansur Alisha Shaik
@ 2020-09-24  6:51 ` Mansur Alisha Shaik
  2020-09-24 23:11   ` Stanimir Varbanov
  2020-09-24  6:51 ` [PATCH v3 2/4] venus: core: vote for video-mem path Mansur Alisha Shaik
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 9+ messages in thread
From: Mansur Alisha Shaik @ 2020-09-24  6:51 UTC (permalink / raw)
  To: linux-media, stanimir.varbanov
  Cc: linux-kernel, linux-arm-msm, vgarodia, Mansur Alisha Shaik

Currently video driver is voting after clk enable and un voting
before clk disable. This is incorrect, video driver should vote
before clk enable and unvote after clk disable.

Corrected this by changing the order of clk enable and clk disable.

Fixes: 7482a983d ("media: venus: redesign clocks and pm domains control")
Signed-off-by: Mansur Alisha Shaik <mansur@codeaurora.org>
Reviewed-by: Stephen Boyd <swboyd@chromium.org>
---
 drivers/media/platform/qcom/venus/core.c | 17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
index 6103aaf..52a3886 100644
--- a/drivers/media/platform/qcom/venus/core.c
+++ b/drivers/media/platform/qcom/venus/core.c
@@ -355,13 +355,16 @@ static __maybe_unused int venus_runtime_suspend(struct device *dev)
 	if (ret)
 		return ret;
 
+	if (pm_ops->core_power) {
+		ret = pm_ops->core_power(dev, POWER_OFF);
+		if (ret)
+			return ret;
+	}
+
 	ret = icc_set_bw(core->cpucfg_path, 0, 0);
 	if (ret)
 		return ret;
 
-	if (pm_ops->core_power)
-		ret = pm_ops->core_power(dev, POWER_OFF);
-
 	return ret;
 }
 
@@ -371,16 +374,16 @@ static __maybe_unused int venus_runtime_resume(struct device *dev)
 	const struct venus_pm_ops *pm_ops = core->pm_ops;
 	int ret;
 
+	ret = icc_set_bw(core->cpucfg_path, 0, kbps_to_icc(1000));
+	if (ret)
+		return ret;
+
 	if (pm_ops->core_power) {
 		ret = pm_ops->core_power(dev, POWER_ON);
 		if (ret)
 			return ret;
 	}
 
-	ret = icc_set_bw(core->cpucfg_path, 0, kbps_to_icc(1000));
-	if (ret)
-		return ret;
-
 	return hfi_core_resume(core, false);
 }
 
-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member 
of Code Aurora Forum, hosted by The Linux Foundation


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v3 2/4] venus: core: vote for video-mem path
  2020-09-24  6:51 [PATCH v3 0/4] Venus - change clk enable, disable order and change bw values Mansur Alisha Shaik
  2020-09-24  6:51 ` [PATCH v3 1/4] venus: core: change clk enable and disable order in resume and suspend Mansur Alisha Shaik
@ 2020-09-24  6:51 ` Mansur Alisha Shaik
  2020-09-24  7:54   ` Stephen Boyd
  2020-09-24  6:51 ` [PATCH v3 3/4] venus: core: vote with average bandwidth and peak bandwidth as zero Mansur Alisha Shaik
  2020-09-24  6:51 ` [PATCH v3 4/4] venus: put dummy vote on video-mem path after last session release Mansur Alisha Shaik
  3 siblings, 1 reply; 9+ messages in thread
From: Mansur Alisha Shaik @ 2020-09-24  6:51 UTC (permalink / raw)
  To: linux-media, stanimir.varbanov
  Cc: linux-kernel, linux-arm-msm, vgarodia, Mansur Alisha Shaik

Currently video driver is voting for venus0-ebi path during buffer
processing with an average bandwidth of all the instances and
unvoting during session release.

While video streaming when we try to do XO-SD using the command
"echo mem > /sys/power/state command" , device is not entering
to suspend state and from interconnect summary seeing votes for venus0-ebi

Corrected this by voting for venus0-ebi path in venus_runtime_resume()
and unvote during venus_runtime_suspend().

Fixes: 7482a983d ("media: venus: redesign clocks and pm domains control")
Signed-off-by: Mansur Alisha Shaik <mansur@codeaurora.org>
---
Changes in v3:
- Addressed review comments by Stephen Boyd

 drivers/media/platform/qcom/venus/core.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
index 52a3886..fa363b8 100644
--- a/drivers/media/platform/qcom/venus/core.c
+++ b/drivers/media/platform/qcom/venus/core.c
@@ -363,7 +363,18 @@ static __maybe_unused int venus_runtime_suspend(struct device *dev)
 
 	ret = icc_set_bw(core->cpucfg_path, 0, 0);
 	if (ret)
-		return ret;
+		goto err_cpucfg_path;
+
+	ret = icc_set_bw(core->video_path, 0, 0);
+	if (ret)
+		goto err_video_path;
+
+	return ret;
+
+err_video_path:
+	icc_set_bw(core->cpucfg_path, kbps_to_icc(1000), 0);
+err_cpucfg_path:
+	pm_ops->core_power(dev, POWER_ON);
 
 	return ret;
 }
@@ -374,6 +385,10 @@ static __maybe_unused int venus_runtime_resume(struct device *dev)
 	const struct venus_pm_ops *pm_ops = core->pm_ops;
 	int ret;
 
+	ret = icc_set_bw(core->video_path, 0, kbps_to_icc(1000));
+	if (ret)
+		return ret;
+
 	ret = icc_set_bw(core->cpucfg_path, 0, kbps_to_icc(1000));
 	if (ret)
 		return ret;
-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member 
of Code Aurora Forum, hosted by The Linux Foundation


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v3 3/4] venus: core: vote with average bandwidth and peak bandwidth as zero
  2020-09-24  6:51 [PATCH v3 0/4] Venus - change clk enable, disable order and change bw values Mansur Alisha Shaik
  2020-09-24  6:51 ` [PATCH v3 1/4] venus: core: change clk enable and disable order in resume and suspend Mansur Alisha Shaik
  2020-09-24  6:51 ` [PATCH v3 2/4] venus: core: vote for video-mem path Mansur Alisha Shaik
@ 2020-09-24  6:51 ` Mansur Alisha Shaik
  2020-09-24  7:53   ` Stephen Boyd
  2020-09-24  6:51 ` [PATCH v3 4/4] venus: put dummy vote on video-mem path after last session release Mansur Alisha Shaik
  3 siblings, 1 reply; 9+ messages in thread
From: Mansur Alisha Shaik @ 2020-09-24  6:51 UTC (permalink / raw)
  To: linux-media, stanimir.varbanov
  Cc: linux-kernel, linux-arm-msm, vgarodia, Mansur Alisha Shaik

As per bandwidth table video driver is voting with average bandwidth
for "video-mem" and "cpu-cfg" paths as peak bandwidth is zero
in bandwidth table.

Fixes: 7482a983d ("media: venus: redesign clocks and pm domains control")
Signed-off-by: Mansur Alisha Shaik <mansur@codeaurora.org>
---
Changes in v3:
- Added fixes tag

 drivers/media/platform/qcom/venus/core.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
index fa363b8..d5bfd6f 100644
--- a/drivers/media/platform/qcom/venus/core.c
+++ b/drivers/media/platform/qcom/venus/core.c
@@ -385,11 +385,11 @@ static __maybe_unused int venus_runtime_resume(struct device *dev)
 	const struct venus_pm_ops *pm_ops = core->pm_ops;
 	int ret;
 
-	ret = icc_set_bw(core->video_path, 0, kbps_to_icc(1000));
+	ret = icc_set_bw(core->video_path, kbps_to_icc(20000), 0);
 	if (ret)
 		return ret;
 
-	ret = icc_set_bw(core->cpucfg_path, 0, kbps_to_icc(1000));
+	ret = icc_set_bw(core->cpucfg_path, kbps_to_icc(1000), 0);
 	if (ret)
 		return ret;
 
-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member 
of Code Aurora Forum, hosted by The Linux Foundation


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v3 4/4] venus: put dummy vote on video-mem path after last session release
  2020-09-24  6:51 [PATCH v3 0/4] Venus - change clk enable, disable order and change bw values Mansur Alisha Shaik
                   ` (2 preceding siblings ...)
  2020-09-24  6:51 ` [PATCH v3 3/4] venus: core: vote with average bandwidth and peak bandwidth as zero Mansur Alisha Shaik
@ 2020-09-24  6:51 ` Mansur Alisha Shaik
  2020-09-24  7:54   ` Stephen Boyd
  3 siblings, 1 reply; 9+ messages in thread
From: Mansur Alisha Shaik @ 2020-09-24  6:51 UTC (permalink / raw)
  To: linux-media, stanimir.varbanov
  Cc: linux-kernel, linux-arm-msm, vgarodia, Mansur Alisha Shaik

As per current implementation, video driver is unvoting "videom-mem" path
for last video session during vdec_session_release().
While video playback when we try to suspend device, we see video clock
warnings since votes are already removed during vdec_session_release().

corrected this by putting dummy vote on "video-mem" after last video
session release and unvoting it during suspend.

Fixes: 7482a983d ("media: venus: redesign clocks and pm domains control")
Signed-off-by: Mansur Alisha Shaik <mansur@codeaurora.org>
---
Changes in v3:
- Added fixes tag

 drivers/media/platform/qcom/venus/pm_helpers.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/media/platform/qcom/venus/pm_helpers.c b/drivers/media/platform/qcom/venus/pm_helpers.c
index 57877ea..ca09ea8 100644
--- a/drivers/media/platform/qcom/venus/pm_helpers.c
+++ b/drivers/media/platform/qcom/venus/pm_helpers.c
@@ -212,6 +212,16 @@ static int load_scale_bw(struct venus_core *core)
 	}
 	mutex_unlock(&core->lock);
 
+	/*
+	 * keep minimum bandwidth vote for "video-mem" path,
+	 * so that clks can be disabled during vdec_session_release().
+	 * Actual bandwidth drop will be done during device supend
+	 * so that device can power down without any warnings.
+	 */
+
+	if (!total_avg && !total_peak)
+		total_avg = kbps_to_icc(1000);
+
 	dev_dbg(core->dev, VDBGL "total: avg_bw: %u, peak_bw: %u\n",
 		total_avg, total_peak);
 
-- 
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member 
of Code Aurora Forum, hosted by The Linux Foundation


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 3/4] venus: core: vote with average bandwidth and peak bandwidth as zero
  2020-09-24  6:51 ` [PATCH v3 3/4] venus: core: vote with average bandwidth and peak bandwidth as zero Mansur Alisha Shaik
@ 2020-09-24  7:53   ` Stephen Boyd
  0 siblings, 0 replies; 9+ messages in thread
From: Stephen Boyd @ 2020-09-24  7:53 UTC (permalink / raw)
  To: Mansur Alisha Shaik, linux-media, stanimir.varbanov
  Cc: linux-kernel, linux-arm-msm, vgarodia, Mansur Alisha Shaik

Quoting Mansur Alisha Shaik (2020-09-23 23:51:05)
> As per bandwidth table video driver is voting with average bandwidth
> for "video-mem" and "cpu-cfg" paths as peak bandwidth is zero
> in bandwidth table.
> 
> Fixes: 7482a983d ("media: venus: redesign clocks and pm domains control")
> Signed-off-by: Mansur Alisha Shaik <mansur@codeaurora.org>
> ---
> Changes in v3:
> - Added fixes tag
> 
>  drivers/media/platform/qcom/venus/core.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
> index fa363b8..d5bfd6f 100644
> --- a/drivers/media/platform/qcom/venus/core.c
> +++ b/drivers/media/platform/qcom/venus/core.c
> @@ -385,11 +385,11 @@ static __maybe_unused int venus_runtime_resume(struct device *dev)
>         const struct venus_pm_ops *pm_ops = core->pm_ops;
>         int ret;
>  
> -       ret = icc_set_bw(core->video_path, 0, kbps_to_icc(1000));
> +       ret = icc_set_bw(core->video_path, kbps_to_icc(20000), 0);

This gets added in the previous patch. Why not put this patch before
that one?

Anyway..

Reviewed-by: Stephen Boyd <swboyd@chromium.org>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 2/4] venus: core: vote for video-mem path
  2020-09-24  6:51 ` [PATCH v3 2/4] venus: core: vote for video-mem path Mansur Alisha Shaik
@ 2020-09-24  7:54   ` Stephen Boyd
  0 siblings, 0 replies; 9+ messages in thread
From: Stephen Boyd @ 2020-09-24  7:54 UTC (permalink / raw)
  To: Mansur Alisha Shaik, linux-media, stanimir.varbanov
  Cc: linux-kernel, linux-arm-msm, vgarodia, Mansur Alisha Shaik

Quoting Mansur Alisha Shaik (2020-09-23 23:51:04)
> Currently video driver is voting for venus0-ebi path during buffer
> processing with an average bandwidth of all the instances and
> unvoting during session release.
> 
> While video streaming when we try to do XO-SD using the command
> "echo mem > /sys/power/state command" , device is not entering
> to suspend state and from interconnect summary seeing votes for venus0-ebi
> 
> Corrected this by voting for venus0-ebi path in venus_runtime_resume()
> and unvote during venus_runtime_suspend().
> 
> Fixes: 7482a983d ("media: venus: redesign clocks and pm domains control")
> Signed-off-by: Mansur Alisha Shaik <mansur@codeaurora.org>
> ---
> Changes in v3:
> - Addressed review comments by Stephen Boyd

Please Cc me on patches I review.

> 
>  drivers/media/platform/qcom/venus/core.c | 17 ++++++++++++++++-
>  1 file changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
> index 52a3886..fa363b8 100644
> --- a/drivers/media/platform/qcom/venus/core.c
> +++ b/drivers/media/platform/qcom/venus/core.c
> @@ -363,7 +363,18 @@ static __maybe_unused int venus_runtime_suspend(struct device *dev)
>  
>         ret = icc_set_bw(core->cpucfg_path, 0, 0);
>         if (ret)
> -               return ret;
> +               goto err_cpucfg_path;
> +
> +       ret = icc_set_bw(core->video_path, 0, 0);
> +       if (ret)
> +               goto err_video_path;
> +
> +       return ret;
> +
> +err_video_path:
> +       icc_set_bw(core->cpucfg_path, kbps_to_icc(1000), 0);
> +err_cpucfg_path:
> +       pm_ops->core_power(dev, POWER_ON);
>  
>         return ret;
>  }
> @@ -374,6 +385,10 @@ static __maybe_unused int venus_runtime_resume(struct device *dev)
>         const struct venus_pm_ops *pm_ops = core->pm_ops;
>         int ret;
>  
> +       ret = icc_set_bw(core->video_path, 0, kbps_to_icc(1000));
> +       if (ret)
> +               return ret;
> +

Feels like this patch should come after the next one but OK.

Reviewed-by: Stephen Boyd <swboyd@chromium.org>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 4/4] venus: put dummy vote on video-mem path after last session release
  2020-09-24  6:51 ` [PATCH v3 4/4] venus: put dummy vote on video-mem path after last session release Mansur Alisha Shaik
@ 2020-09-24  7:54   ` Stephen Boyd
  0 siblings, 0 replies; 9+ messages in thread
From: Stephen Boyd @ 2020-09-24  7:54 UTC (permalink / raw)
  To: Mansur Alisha Shaik, linux-media, stanimir.varbanov
  Cc: linux-kernel, linux-arm-msm, vgarodia, Mansur Alisha Shaik

Quoting Mansur Alisha Shaik (2020-09-23 23:51:06)
> As per current implementation, video driver is unvoting "videom-mem" path
> for last video session during vdec_session_release().
> While video playback when we try to suspend device, we see video clock
> warnings since votes are already removed during vdec_session_release().
> 
> corrected this by putting dummy vote on "video-mem" after last video
> session release and unvoting it during suspend.
> 
> Fixes: 7482a983d ("media: venus: redesign clocks and pm domains control")
> Signed-off-by: Mansur Alisha Shaik <mansur@codeaurora.org>
> ---

Reviewed-by: Stephen Boyd <swboyd@chromium.org>

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 1/4] venus: core: change clk enable and disable order in resume and suspend
  2020-09-24  6:51 ` [PATCH v3 1/4] venus: core: change clk enable and disable order in resume and suspend Mansur Alisha Shaik
@ 2020-09-24 23:11   ` Stanimir Varbanov
  0 siblings, 0 replies; 9+ messages in thread
From: Stanimir Varbanov @ 2020-09-24 23:11 UTC (permalink / raw)
  To: Mansur Alisha Shaik, linux-media; +Cc: linux-kernel, linux-arm-msm, vgarodia

Hi Mansur,

On 9/24/20 9:51 AM, Mansur Alisha Shaik wrote:
> Currently video driver is voting after clk enable and un voting
> before clk disable. This is incorrect, video driver should vote
> before clk enable and unvote after clk disable.
> 
> Corrected this by changing the order of clk enable and clk disable.
> 
> Fixes: 7482a983d ("media: venus: redesign clocks and pm domains control")

The Fixes tag is incorrect. It should be

07f8f22a33a9e ("media: venus: core: remove CNOC voting while device
suspend")

> Signed-off-by: Mansur Alisha Shaik <mansur@codeaurora.org>
> Reviewed-by: Stephen Boyd <swboyd@chromium.org>
> ---
>  drivers/media/platform/qcom/venus/core.c | 17 ++++++++++-------
>  1 file changed, 10 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
> index 6103aaf..52a3886 100644
> --- a/drivers/media/platform/qcom/venus/core.c
> +++ b/drivers/media/platform/qcom/venus/core.c
> @@ -355,13 +355,16 @@ static __maybe_unused int venus_runtime_suspend(struct device *dev)
>  	if (ret)
>  		return ret;
>  
> +	if (pm_ops->core_power) {
> +		ret = pm_ops->core_power(dev, POWER_OFF);
> +		if (ret)
> +			return ret;
> +	}
> +
>  	ret = icc_set_bw(core->cpucfg_path, 0, 0);
>  	if (ret)
>  		return ret;
>  
> -	if (pm_ops->core_power)
> -		ret = pm_ops->core_power(dev, POWER_OFF);
> -
>  	return ret;
>  }
>  
> @@ -371,16 +374,16 @@ static __maybe_unused int venus_runtime_resume(struct device *dev)
>  	const struct venus_pm_ops *pm_ops = core->pm_ops;
>  	int ret;
>  
> +	ret = icc_set_bw(core->cpucfg_path, 0, kbps_to_icc(1000));
> +	if (ret)
> +		return ret;
> +
>  	if (pm_ops->core_power) {
>  		ret = pm_ops->core_power(dev, POWER_ON);
>  		if (ret)
>  			return ret;
>  	}
>  
> -	ret = icc_set_bw(core->cpucfg_path, 0, kbps_to_icc(1000));
> -	if (ret)
> -		return ret;
> -
>  	return hfi_core_resume(core, false);
>  }
>  
> 

-- 
regards,
Stan

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2020-09-24 23:11 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-24  6:51 [PATCH v3 0/4] Venus - change clk enable, disable order and change bw values Mansur Alisha Shaik
2020-09-24  6:51 ` [PATCH v3 1/4] venus: core: change clk enable and disable order in resume and suspend Mansur Alisha Shaik
2020-09-24 23:11   ` Stanimir Varbanov
2020-09-24  6:51 ` [PATCH v3 2/4] venus: core: vote for video-mem path Mansur Alisha Shaik
2020-09-24  7:54   ` Stephen Boyd
2020-09-24  6:51 ` [PATCH v3 3/4] venus: core: vote with average bandwidth and peak bandwidth as zero Mansur Alisha Shaik
2020-09-24  7:53   ` Stephen Boyd
2020-09-24  6:51 ` [PATCH v3 4/4] venus: put dummy vote on video-mem path after last session release Mansur Alisha Shaik
2020-09-24  7:54   ` Stephen Boyd

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