[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <f90553fe-9f10-489c-9f8c-f9d538b1bfe7@linaro.org>
Date: Tue, 3 Feb 2026 23:26:33 +0000
From: Bryan O'Donoghue <bryan.odonoghue@...aro.org>
To: Dmitry Baryshkov <dmitry.baryshkov@....qualcomm.com>,
Bjorn Andersson <andersson@...nel.org>,
Michael Turquette <mturquette@...libre.com>, Stephen Boyd
<sboyd@...nel.org>, Rob Herring <robh@...nel.org>,
Krzysztof Kozlowski <krzk+dt@...nel.org>, Conor Dooley
<conor+dt@...nel.org>, Taniya Das <quic_tdas@...cinc.com>,
Jonathan Marek <jonathan@...ek.ca>, Ulf Hansson <ulf.hansson@...aro.org>,
"Rafael J. Wysocki" <rafael@...nel.org>,
Vikash Garodia <vikash.garodia@....qualcomm.com>,
Dikshita Agarwal <dikshita.agarwal@....qualcomm.com>,
Mauro Carvalho Chehab <mchehab@...nel.org>,
Stanimir Varbanov <stanimir.varbanov@...aro.org>,
Abhinav Kumar <abhinav.kumar@...ux.dev>, Hans Verkuil <hverkuil@...nel.org>,
Stefan Schmidt <stefan.schmidt@...aro.org>,
Konrad Dybcio <konradybcio@...nel.org>,
Bryan O'Donoghue <bryan.odonoghue@...aro.org>,
Dikshita Agarwal <dikshita@....qualcomm.com>
Cc: linux-arm-msm@...r.kernel.org, linux-clk@...r.kernel.org,
devicetree@...r.kernel.org, linux-kernel@...r.kernel.org,
linux-pm@...r.kernel.org, linux-media@...r.kernel.org,
Mauro Carvalho Chehab <mchehab+huawei@...nel.org>
Subject: Re: [PATCH v2 5/8] media: venus: scale MMCX power domain on SM8250
On 01/02/2026 10:49, Dmitry Baryshkov wrote:
> On SM8250 most of the video clocks are powered by the MMCX domain, while
> the PLL it powered on by the MX domain. Extend the driver to support
> scaling both power domains, while keeping compatibitility with the
> existing DTs, which define only the MX domain.
>
> Fixes: 0aeabfa29a9c ("media: venus: core: add sm8250 DT compatible and resource data")
> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@....qualcomm.com>
> ---
> drivers/media/platform/qcom/venus/core.c | 7 ++++++-
> drivers/media/platform/qcom/venus/core.h | 1 +
> drivers/media/platform/qcom/venus/pm_helpers.c | 8 +++++++-
> 3 files changed, 14 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c
> index 646dae3407b4..cad2df84ce60 100644
> --- a/drivers/media/platform/qcom/venus/core.c
> +++ b/drivers/media/platform/qcom/venus/core.c
> @@ -882,6 +882,7 @@ static const struct venus_resources sdm845_res_v2 = {
> .vcodec_pmdomains = (const char *[]) { "venus", "vcodec0", "vcodec1" },
> .vcodec_pmdomains_num = 3,
> .opp_pmdomain = (const char *[]) { "cx" },
> + .opp_pmdomain_num = 1,
> .vcodec_num = 2,
> .max_load = 3110400, /* 4096x2160@90 */
> .hfi_version = HFI_VERSION_4XX,
> @@ -933,6 +934,7 @@ static const struct venus_resources sc7180_res = {
> .vcodec_pmdomains = (const char *[]) { "venus", "vcodec0" },
> .vcodec_pmdomains_num = 2,
> .opp_pmdomain = (const char *[]) { "cx" },
> + .opp_pmdomain_num = 1,
> .vcodec_num = 1,
> .hfi_version = HFI_VERSION_4XX,
> .vpu_version = VPU_VERSION_AR50,
> @@ -992,7 +994,8 @@ static const struct venus_resources sm8250_res = {
> .vcodec_clks_num = 1,
> .vcodec_pmdomains = (const char *[]) { "venus", "vcodec0" },
> .vcodec_pmdomains_num = 2,
> - .opp_pmdomain = (const char *[]) { "mx" },
> + .opp_pmdomain = (const char *[]) { "mx", "mmcx" },
> + .opp_pmdomain_num = 2,
> .vcodec_num = 1,
> .max_load = 7833600,
> .hfi_version = HFI_VERSION_6XX,
> @@ -1054,6 +1057,7 @@ static const struct venus_resources sc7280_res = {
> .vcodec_pmdomains = (const char *[]) { "venus", "vcodec0" },
> .vcodec_pmdomains_num = 2,
> .opp_pmdomain = (const char *[]) { "cx" },
> + .opp_pmdomain_num = 1,
> .vcodec_num = 1,
> .hfi_version = HFI_VERSION_6XX,
> .vpu_version = VPU_VERSION_IRIS2_1,
> @@ -1102,6 +1106,7 @@ static const struct venus_resources qcm2290_res = {
> .vcodec_pmdomains = (const char *[]) { "venus", "vcodec0" },
> .vcodec_pmdomains_num = 2,
> .opp_pmdomain = (const char *[]) { "cx" },
> + .opp_pmdomain_num = 1,
> .vcodec_num = 1,
> .hfi_version = HFI_VERSION_4XX,
> .vpu_version = VPU_VERSION_AR50_LITE,
> diff --git a/drivers/media/platform/qcom/venus/core.h b/drivers/media/platform/qcom/venus/core.h
> index c7acacaa53b8..62ab747291b8 100644
> --- a/drivers/media/platform/qcom/venus/core.h
> +++ b/drivers/media/platform/qcom/venus/core.h
> @@ -85,6 +85,7 @@ struct venus_resources {
> const char **vcodec_pmdomains;
> unsigned int vcodec_pmdomains_num;
> const char **opp_pmdomain;
> + unsigned int opp_pmdomain_num;
> unsigned int vcodec_num;
> const char * const resets[VIDC_RESETS_NUM_MAX];
> unsigned int resets_num;
> diff --git a/drivers/media/platform/qcom/venus/pm_helpers.c b/drivers/media/platform/qcom/venus/pm_helpers.c
> index f0269524ac70..14a4e8311a64 100644
> --- a/drivers/media/platform/qcom/venus/pm_helpers.c
> +++ b/drivers/media/platform/qcom/venus/pm_helpers.c
> @@ -887,7 +887,7 @@ static int vcodec_domains_get(struct venus_core *core)
> };
> struct dev_pm_domain_attach_data opp_pd_data = {
> .pd_names = res->opp_pmdomain,
> - .num_pd_names = 1,
> + .num_pd_names = res->opp_pmdomain_num,
> .pd_flags = PD_FLAG_DEV_LINK_ON | PD_FLAG_REQUIRED_OPP,
> };
>
> @@ -904,6 +904,12 @@ static int vcodec_domains_get(struct venus_core *core)
>
> /* Attach the power domain for setting performance state */
> ret = devm_pm_domain_attach_list(dev, &opp_pd_data, &core->opp_pmdomain);
> + /* backwards compatibility for incomplete ABI SM8250 */
> + if (ret == -ENODEV &&
> + of_device_is_compatible(dev->of_node, "qcom,sm8250-venus")) {
> + opp_pd_data.num_pd_names--;
Setting this to "1" would be a bit clearer IMO - there's no use-case for
num_pd_names = 3; num_pd_names--; for example.
Its stylistic rather than functional so entirely up to you to keep or
change.
> + ret = devm_pm_domain_attach_list(dev, &opp_pd_data, &core->opp_pmdomain);
> + }
> if (ret < 0)
> return ret;
>
>
> --
> 2.47.3
>
>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@...aro.org>
Powered by blists - more mailing lists