From: Vikash Garodia <quic_vgarodia@quicinc.com>
To: Renjiang Han <quic_renjiang@quicinc.com>,
Stanimir Varbanov <stanimir.k.varbanov@gmail.com>,
Bryan O'Donoghue <bryan.odonoghue@linaro.org>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
"Rob Herring" <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
Bjorn Andersson <andersson@kernel.org>,
"Konrad Dybcio" <konradybcio@kernel.org>
Cc: <linux-arm-msm@vger.kernel.org>, <linux-media@vger.kernel.org>,
<devicetree@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH v6 2/4] media: venus: pm_helpers: use opp-table for the frequency
Date: Tue, 8 Apr 2025 14:44:17 +0530 [thread overview]
Message-ID: <a153ba0f-5f73-db6a-b821-5145e3ffc33a@quicinc.com> (raw)
In-Reply-To: <20241219-add-venus-for-qcs615-v6-2-e9a74d3b003d@quicinc.com>
On 12/19/2024 11:11 AM, Renjiang Han wrote:
> The frequency value in the opp-table in the device tree and the freq_tbl
> in the driver are the same.
>
> Therefore, update pm_helpers.c to use the opp-table for frequency values
> for the v4 core.
> If getting data from the opp table fails, fall back to using the frequency
> table.
>
> Signed-off-by: Renjiang Han <quic_renjiang@quicinc.com>
> ---
> drivers/media/platform/qcom/venus/pm_helpers.c | 53 +++++++++++++++++++-------
> 1 file changed, 39 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/venus/pm_helpers.c b/drivers/media/platform/qcom/venus/pm_helpers.c
> index 33a5a659c0ada0ca97eebb5522c5f349f95c49c7..b61c0ad152878870b7223efa274e137d3636433b 100644
> --- a/drivers/media/platform/qcom/venus/pm_helpers.c
> +++ b/drivers/media/platform/qcom/venus/pm_helpers.c
> @@ -43,14 +43,20 @@ static int core_clks_enable(struct venus_core *core)
> const struct venus_resources *res = core->res;
> const struct freq_tbl *freq_tbl = core->res->freq_tbl;
> unsigned int freq_tbl_size = core->res->freq_tbl_size;
> + struct device *dev = core->dev;
> + struct dev_pm_opp *opp;
> unsigned long freq;
> unsigned int i;
> int ret;
>
> - if (!freq_tbl)
> - return -EINVAL;
> -
> - freq = freq_tbl[freq_tbl_size - 1].freq;
> + opp = dev_pm_opp_find_freq_ceil(dev, &freq);
> + if (IS_ERR(opp)) {
> + if (!freq_tbl)
> + return -EINVAL;
> + freq = freq_tbl[freq_tbl_size - 1].freq;
> + } else {
> + dev_pm_opp_put(opp);
> + }
>
> for (i = 0; i < res->clks_num; i++) {
> if (IS_V6(core)) {
> @@ -627,12 +633,15 @@ min_loaded_core(struct venus_inst *inst, u32 *min_coreid, u32 *min_load, bool lo
>
> static int decide_core(struct venus_inst *inst)
> {
> + const struct freq_tbl *freq_tbl = inst->core->res->freq_tbl;
> const u32 ptype = HFI_PROPERTY_CONFIG_VIDEOCORES_USAGE;
> struct venus_core *core = inst->core;
> u32 min_coreid, min_load, cur_inst_load;
> u32 min_lp_coreid, min_lp_load, cur_inst_lp_load;
> struct hfi_videocores_usage_type cu;
> - unsigned long max_freq;
> + unsigned long max_freq = ULONG_MAX;
> + struct device *dev = core->dev;
> + struct dev_pm_opp *opp;
> int ret = 0;
>
> if (legacy_binding) {
> @@ -655,7 +664,11 @@ static int decide_core(struct venus_inst *inst)
> cur_inst_lp_load *= inst->clk_data.low_power_freq;
> /*TODO : divide this inst->load by work_route */
>
> - max_freq = core->res->freq_tbl[0].freq;
> + opp = dev_pm_opp_find_freq_floor(dev, &max_freq);
> + if (IS_ERR(opp))
> + max_freq = freq_tbl[0].freq;
> + else
> + dev_pm_opp_put(opp);
>
> min_loaded_core(inst, &min_coreid, &min_load, false);
> min_loaded_core(inst, &min_lp_coreid, &min_lp_load, true);
> @@ -1078,7 +1091,9 @@ static int load_scale_v4(struct venus_inst *inst)
> unsigned int num_rows = core->res->freq_tbl_size;
> struct device *dev = core->dev;
> unsigned long freq = 0, freq_core1 = 0, freq_core2 = 0;
> + unsigned long max_freq = ULONG_MAX;
> unsigned long filled_len = 0;
> + struct dev_pm_opp *opp;
> int i, ret = 0;
>
> for (i = 0; i < inst->num_input_bufs; i++)
> @@ -1104,19 +1119,29 @@ static int load_scale_v4(struct venus_inst *inst)
>
> freq = max(freq_core1, freq_core2);
>
> - if (freq > table[0].freq) {
> - dev_dbg(dev, VDBGL "requested clock rate: %lu scaling clock rate : %lu\n",
> - freq, table[0].freq);
> + opp = dev_pm_opp_find_freq_floor(dev, &max_freq);
> + if (IS_ERR(opp))
> + max_freq = table[0].freq;
> + else
> + dev_pm_opp_put(opp);
>
> - freq = table[0].freq;
> + if (freq > max_freq) {
> + dev_dbg(dev, VDBGL "requested clock rate: %lu scaling clock rate : %lu\n",
> + freq, max_freq);
> + freq = max_freq;
> goto set_freq;
> }
>
> - for (i = num_rows - 1 ; i >= 0; i--) {
> - if (freq <= table[i].freq) {
> - freq = table[i].freq;
> - break;
> + opp = dev_pm_opp_find_freq_ceil(dev, &freq);
> + if (IS_ERR(opp)) {
> + for (i = num_rows - 1 ; i >= 0; i--) {
> + if (freq <= table[i].freq) {
> + freq = table[i].freq;
> + break;
> + }
> }
> + } else {
> + dev_pm_opp_put(opp);
> }
>
> set_freq:
>
Reviewed-by: Vikash Garodia <quic_vgarodia@quicinc.com>
next prev parent reply other threads:[~2025-04-08 9:14 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-19 5:41 [PATCH v6 0/4] media: venus: enable venus on qcs615 Renjiang Han
2024-12-19 5:41 ` [PATCH v6 1/4] dt-bindings: media: add support for video hardware on QCS615 platform Renjiang Han
2024-12-19 8:19 ` Krzysztof Kozlowski
2024-12-19 8:34 ` Renjiang Han
2024-12-19 5:41 ` [PATCH v6 2/4] media: venus: pm_helpers: use opp-table for the frequency Renjiang Han
2024-12-23 14:17 ` Konrad Dybcio
2025-01-02 5:38 ` Renjiang Han
2025-01-09 13:05 ` Konrad Dybcio
2025-04-07 15:39 ` Bryan O'Donoghue
2025-04-08 9:13 ` Vikash Garodia
2025-04-09 19:17 ` Konrad Dybcio
2025-04-08 9:14 ` Vikash Garodia [this message]
2024-12-19 5:41 ` [PATCH v6 3/4] arm64: dts: qcom: qcs615: add venus node to devicetree Renjiang Han
2024-12-19 5:41 ` [PATCH v6 4/4] arm64: dts: qcom: qcs615-ride: enable venus node to initialize video codec Renjiang Han
2025-05-22 18:53 ` Nicolas Dufresne
2024-12-26 22:19 ` [PATCH v6 0/4] media: venus: enable venus on qcs615 Bjorn Andersson
2024-12-31 2:12 ` Renjiang Han
2025-09-09 16:56 ` (subset) " Bjorn Andersson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a153ba0f-5f73-db6a-b821-5145e3ffc33a@quicinc.com \
--to=quic_vgarodia@quicinc.com \
--cc=andersson@kernel.org \
--cc=bryan.odonoghue@linaro.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=konradybcio@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=quic_renjiang@quicinc.com \
--cc=robh@kernel.org \
--cc=stanimir.k.varbanov@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®