From: Vishnu Reddy <busanna.reddy@oss.qualcomm.com>
To: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Cc: Vikash Garodia <vikash.garodia@oss.qualcomm.com>,
Dikshita Agarwal <dikshita.agarwal@oss.qualcomm.com>,
Abhinav Kumar <abhinav.kumar@linux.dev>,
Bryan O'Donoghue <bod@kernel.org>,
Mauro Carvalho Chehab <mchehab@kernel.org>,
Joerg Roedel <joro@8bytes.org>, Will Deacon <will@kernel.org>,
Robin Murphy <robin.murphy@arm.com>,
Hans Verkuil <hverkuil@kernel.org>,
Stefan Schmidt <stefan.schmidt@linaro.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Stanimir Varbanov <stanimir.varbanov@linaro.org>,
Jorge Ramirez-Ortiz <jorge.ramirez@oss.qualcomm.com>,
Del Regno <angelogioacchino.delregno@collabora.com>,
Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konradybcio@kernel.org>,
linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
linux-arm-msm@vger.kernel.org, iommu@lists.linux.dev,
Krzysztof Kozlowski <krzk@kernel.org>,
devicetree@vger.kernel.org
Subject: Re: [PATCH v5 09/14] media: iris: Use power domain type to look up pd_devs index
Date: Sat, 9 May 2026 22:32:24 +0530 [thread overview]
Message-ID: <201bfaca-b462-ec34-da00-9bac5804a808@oss.qualcomm.com> (raw)
In-Reply-To: <pkd26h6alzddoky4bfnc3ljwlgxoodcyjo6blreuourlkg7mdl@qkg2jtdcjh7m>
On 5/9/2026 2:14 AM, Dmitry Baryshkov wrote:
> On Sat, May 09, 2026 at 12:29:58AM +0530, Vishnu Reddy wrote:
>> The pmdomain_tbl was a array of strings holding only the power domain
>> names. Callers had to pass a pd_devs[] pointer indexed directly by the
>> platform_pm_domain_type enum value to iris_enable_power_domains() and
>> iris_disable_power_domains().
>>
>> A future platform may need to introduce a new enum value that aliases
>> an existing one (e.g. IRIS_VCODEC1_POWER_DOMAIN aliasing the
>> IRIS_VPP0_HW_POWER_DOMAIN on Glymur), which would break the assumption
> Why do they alias so? Or what do you mean by aliasing? Why VCODEC1 is
> the same as VPP0? Do you mean that the index in DT would match?
VPP0 index in kaanapali and the VCODEC1 index in glymur are same.
>> that enum values map 1:1 to pd_devs[] indices.
>>
>> To fix this, replace the string array with a new struct platform_pd_data
>> that pairs each power domain name with its platform_pm_domain_type. Add
>> a helper iris_get_pd_index_by_type() that walks this table and returns
>> the correct pd_devs[] index for a given type.
> This looks like leaking too many platform details into the
> not-so-generic code.
>
>> Update iris_enable_power_domains() and iris_disable_power_domains()
>> to accept a platform_pm_domain_type instead of a struct device pointer.
>> They now call the helper internally to resolve the index, removing the
>> need for callers to do the index lookup themselves.
>>
>> This prepares the driver for adding new platforms where power domain enum
>> values cannot be used directly as pd_devs[] indices.
>>
>> Reviewed-by: Vikash Garodia <vikash.garodia@oss.qualcomm.com>
>> Signed-off-by: Vishnu Reddy <busanna.reddy@oss.qualcomm.com>
>> ---
>> .../platform/qcom/iris/iris_platform_common.h | 9 +++-
>> .../media/platform/qcom/iris/iris_platform_gen1.c | 18 +++++---
>> .../media/platform/qcom/iris/iris_platform_gen2.c | 24 ++++++----
>> drivers/media/platform/qcom/iris/iris_probe.c | 4 +-
>> drivers/media/platform/qcom/iris/iris_resources.c | 43 +++++++++++++++++-
>> drivers/media/platform/qcom/iris/iris_resources.h | 6 ++-
>> drivers/media/platform/qcom/iris/iris_vpu3x.c | 7 ++-
>> drivers/media/platform/qcom/iris/iris_vpu4x.c | 52 ++++++++--------------
>> drivers/media/platform/qcom/iris/iris_vpu_common.c | 23 +++++-----
>> 9 files changed, 115 insertions(+), 71 deletions(-)
>>
>> diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/drivers/media/platform/qcom/iris/iris_platform_common.h
>> index 30e9d4d288c6..7d59e6364e9d 100644
>> --- a/drivers/media/platform/qcom/iris/iris_platform_common.h
>> +++ b/drivers/media/platform/qcom/iris/iris_platform_common.h
>> @@ -212,6 +212,12 @@ enum platform_pm_domain_type {
>> IRIS_APV_HW_POWER_DOMAIN,
>> };
>>
>> +struct platform_pd_data {
>> + enum platform_pm_domain_type *pd_types;
>> + const char **pd_names;
>> + u32 pd_count;
>> +};
>> +
>> struct iris_platform_data {
>> void (*init_hfi_command_ops)(struct iris_core *core);
>> void (*init_hfi_response_ops)(struct iris_core *core);
>> @@ -225,8 +231,7 @@ struct iris_platform_data {
>> unsigned int icc_tbl_size;
>> const struct bw_info *bw_tbl_dec;
>> unsigned int bw_tbl_dec_size;
>> - const char * const *pmdomain_tbl;
>> - unsigned int pmdomain_tbl_size;
>> + const struct platform_pd_data *pmdomain_tbl;
>> const char * const *opp_pd_tbl;
>> unsigned int opp_pd_tbl_size;
>> const struct platform_clk_data *clk_tbl;
>> diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen1.c b/drivers/media/platform/qcom/iris/iris_platform_gen1.c
>> index be6a631f8ede..0ec73783bc10 100644
>> --- a/drivers/media/platform/qcom/iris/iris_platform_gen1.c
>> +++ b/drivers/media/platform/qcom/iris/iris_platform_gen1.c
>> @@ -279,7 +279,17 @@ static const struct bw_info sm8250_bw_table_dec[] = {
>> { ((1920 * 1080) / 256) * 30, 416000 },
>> };
>>
>> -static const char * const sm8250_pmdomain_table[] = { "venus", "vcodec0" };
>> +static const struct platform_pd_data sm8250_pmdomain_table = {
>> + .pd_types = (enum platform_pm_domain_type []) {
>> + IRIS_CTRL_POWER_DOMAIN,
>> + IRIS_VCODEC_POWER_DOMAIN,
>> + },
>> + .pd_names = (const char *[]) {
>> + "venus",
>> + "vcodec0",
>> + },
>> + .pd_count = 2,
>> +};
>>
>> static const char * const sm8250_opp_pd_table[] = { "mx" };
>>
>> @@ -350,8 +360,7 @@ const struct iris_platform_data sm8250_data = {
>> .clk_rst_tbl_size = ARRAY_SIZE(sm8250_clk_reset_table),
>> .bw_tbl_dec = sm8250_bw_table_dec,
>> .bw_tbl_dec_size = ARRAY_SIZE(sm8250_bw_table_dec),
>> - .pmdomain_tbl = sm8250_pmdomain_table,
>> - .pmdomain_tbl_size = ARRAY_SIZE(sm8250_pmdomain_table),
>> + .pmdomain_tbl = &sm8250_pmdomain_table,
>> .opp_pd_tbl = sm8250_opp_pd_table,
>> .opp_pd_tbl_size = ARRAY_SIZE(sm8250_opp_pd_table),
>> .clk_tbl = sm8250_clk_table,
>> @@ -403,8 +412,7 @@ const struct iris_platform_data sc7280_data = {
>> .icc_tbl_size = ARRAY_SIZE(sm8250_icc_table),
>> .bw_tbl_dec = sc7280_bw_table_dec,
>> .bw_tbl_dec_size = ARRAY_SIZE(sc7280_bw_table_dec),
>> - .pmdomain_tbl = sm8250_pmdomain_table,
>> - .pmdomain_tbl_size = ARRAY_SIZE(sm8250_pmdomain_table),
>> + .pmdomain_tbl = &sm8250_pmdomain_table,
>> .opp_pd_tbl = sc7280_opp_pd_table,
>> .opp_pd_tbl_size = ARRAY_SIZE(sc7280_opp_pd_table),
>> .clk_tbl = sc7280_clk_table,
>> diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
>> index 47c6b650f0b4..5862c89a4971 100644
>> --- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c
>> +++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c
>> @@ -775,7 +775,17 @@ static const struct bw_info sm8550_bw_table_dec[] = {
>> { ((1920 * 1080) / 256) * 30, 294000 },
>> };
>>
>> -static const char * const sm8550_pmdomain_table[] = { "venus", "vcodec0" };
>> +static const struct platform_pd_data sm8550_pmdomain_table = {
>> + .pd_types = (enum platform_pm_domain_type []) {
>> + IRIS_CTRL_POWER_DOMAIN,
>> + IRIS_VCODEC_POWER_DOMAIN,
>> + },
>> + .pd_names = (const char *[]) {
>> + "venus",
>> + "vcodec0",
>> + },
>> + .pd_count = 2,
>> +};
>>
>> static const char * const sm8550_opp_pd_table[] = { "mxc", "mmcx" };
>>
>> @@ -934,8 +944,7 @@ const struct iris_platform_data sm8550_data = {
>> .clk_rst_tbl_size = ARRAY_SIZE(sm8550_clk_reset_table),
>> .bw_tbl_dec = sm8550_bw_table_dec,
>> .bw_tbl_dec_size = ARRAY_SIZE(sm8550_bw_table_dec),
>> - .pmdomain_tbl = sm8550_pmdomain_table,
>> - .pmdomain_tbl_size = ARRAY_SIZE(sm8550_pmdomain_table),
>> + .pmdomain_tbl = &sm8550_pmdomain_table,
>> .opp_pd_tbl = sm8550_opp_pd_table,
>> .opp_pd_tbl_size = ARRAY_SIZE(sm8550_opp_pd_table),
>> .clk_tbl = sm8550_clk_table,
>> @@ -1039,8 +1048,7 @@ const struct iris_platform_data sm8650_data = {
>> .controller_rst_tbl_size = ARRAY_SIZE(sm8650_controller_reset_table),
>> .bw_tbl_dec = sm8550_bw_table_dec,
>> .bw_tbl_dec_size = ARRAY_SIZE(sm8550_bw_table_dec),
>> - .pmdomain_tbl = sm8550_pmdomain_table,
>> - .pmdomain_tbl_size = ARRAY_SIZE(sm8550_pmdomain_table),
>> + .pmdomain_tbl = &sm8550_pmdomain_table,
>> .opp_pd_tbl = sm8550_opp_pd_table,
>> .opp_pd_tbl_size = ARRAY_SIZE(sm8550_opp_pd_table),
>> .clk_tbl = sm8550_clk_table,
>> @@ -1135,8 +1143,7 @@ const struct iris_platform_data sm8750_data = {
>> .clk_rst_tbl_size = ARRAY_SIZE(sm8750_clk_reset_table),
>> .bw_tbl_dec = sm8550_bw_table_dec,
>> .bw_tbl_dec_size = ARRAY_SIZE(sm8550_bw_table_dec),
>> - .pmdomain_tbl = sm8550_pmdomain_table,
>> - .pmdomain_tbl_size = ARRAY_SIZE(sm8550_pmdomain_table),
>> + .pmdomain_tbl = &sm8550_pmdomain_table,
>> .opp_pd_tbl = sm8550_opp_pd_table,
>> .opp_pd_tbl_size = ARRAY_SIZE(sm8550_opp_pd_table),
>> .clk_tbl = sm8750_clk_table,
>> @@ -1235,8 +1242,7 @@ const struct iris_platform_data qcs8300_data = {
>> .clk_rst_tbl_size = ARRAY_SIZE(sm8550_clk_reset_table),
>> .bw_tbl_dec = sm8550_bw_table_dec,
>> .bw_tbl_dec_size = ARRAY_SIZE(sm8550_bw_table_dec),
>> - .pmdomain_tbl = sm8550_pmdomain_table,
>> - .pmdomain_tbl_size = ARRAY_SIZE(sm8550_pmdomain_table),
>> + .pmdomain_tbl = &sm8550_pmdomain_table,
>> .opp_pd_tbl = sm8550_opp_pd_table,
>> .opp_pd_tbl_size = ARRAY_SIZE(sm8550_opp_pd_table),
>> .clk_tbl = sm8550_clk_table,
>> diff --git a/drivers/media/platform/qcom/iris/iris_probe.c b/drivers/media/platform/qcom/iris/iris_probe.c
>> index 34751912f871..34c981be9bc1 100644
>> --- a/drivers/media/platform/qcom/iris/iris_probe.c
>> +++ b/drivers/media/platform/qcom/iris/iris_probe.c
>> @@ -43,8 +43,8 @@ static int iris_init_power_domains(struct iris_core *core)
>> int ret;
>>
>> struct dev_pm_domain_attach_data iris_pd_data = {
>> - .pd_names = core->iris_platform_data->pmdomain_tbl,
>> - .num_pd_names = core->iris_platform_data->pmdomain_tbl_size,
>> + .pd_names = core->iris_platform_data->pmdomain_tbl->pd_names,
>> + .num_pd_names = core->iris_platform_data->pmdomain_tbl->pd_count,
>> .pd_flags = PD_FLAG_NO_DEV_LINK,
>> };
>>
>> diff --git a/drivers/media/platform/qcom/iris/iris_resources.c b/drivers/media/platform/qcom/iris/iris_resources.c
>> index 773f6548370a..cc61dc038598 100644
>> --- a/drivers/media/platform/qcom/iris/iris_resources.c
>> +++ b/drivers/media/platform/qcom/iris/iris_resources.c
>> @@ -70,10 +70,42 @@ int iris_opp_set_rate(struct device *dev, unsigned long freq)
>> return dev_pm_opp_set_opp(dev, opp);
>> }
>>
>> -int iris_enable_power_domains(struct iris_core *core, struct device *pd_dev)
>> +static int iris_get_pd_index_by_type(struct iris_core *core, enum platform_pm_domain_type pd_type)
>> {
>> + const struct platform_pd_data *pd_tbl;
>> + u32 i;
>> +
>> + pd_tbl = core->iris_platform_data->pmdomain_tbl;
>> +
>> + for (i = 0; i < pd_tbl->pd_count; i++) {
>> + if (pd_tbl->pd_types[i] == pd_type)
>> + return i;
>> + }
>> +
>> + return -EINVAL;
>> +}
>> +
>> +int iris_genpd_set_hwmode(struct iris_core *core, enum platform_pm_domain_type pd_type, bool hwmode)
>> +{
>> + int pd_index = iris_get_pd_index_by_type(core, pd_type);
>> +
>> + if (pd_index < 0)
>> + return pd_index;
>> +
>> + return dev_pm_genpd_set_hwmode(core->pmdomain_tbl->pd_devs[pd_index], hwmode);
>> +}
>> +
>> +int iris_enable_power_domains(struct iris_core *core, enum platform_pm_domain_type pd_type)
>> +{
>> + int pd_index = iris_get_pd_index_by_type(core, pd_type);
>> + struct device *pd_dev;
>> int ret;
>>
>> + if (pd_index < 0)
>> + return pd_index;
>> +
>> + pd_dev = core->pmdomain_tbl->pd_devs[pd_index];
>> +
> As you are touching this code... It looks like the original intent of
> this function was to enable all power domains in a single run (thus it
> has the iris_opp_set_rate() call. Now we are are calling this function
> multiple times and still setting the clock rate to the max all the
> times. Please break it down, so that we bump the OPP performance point
> only once, before the first bump of the power domains. Another option
> would be to restore the behaviour and enable all domains at once.
The dev_pm_opp_set_opp() returns early if the requested rate matches the
previous set rate, so it does not call rpmhpd level set or trigger a clock update.
So, calling it multiple times with the same frequency is not expensive.
>> ret = iris_opp_set_rate(core->dev, ULONG_MAX);
>> if (ret)
>> return ret;
>> @@ -85,10 +117,17 @@ int iris_enable_power_domains(struct iris_core *core, struct device *pd_dev)
>> return ret;
>> }
>>
>> -int iris_disable_power_domains(struct iris_core *core, struct device *pd_dev)
>> +int iris_disable_power_domains(struct iris_core *core, enum platform_pm_domain_type pd_type)
> The same here.
>
>> {
>> + int pd_index = iris_get_pd_index_by_type(core, pd_type);
>> + struct device *pd_dev;
>> int ret;
>>
>> + if (pd_index < 0)
>> + return pd_index;
>> +
>> + pd_dev = core->pmdomain_tbl->pd_devs[pd_index];
>> +
>> ret = iris_opp_set_rate(core->dev, 0);
>> if (ret)
>> return ret;
>> diff --git a/drivers/media/platform/qcom/iris/iris_resources.h b/drivers/media/platform/qcom/iris/iris_resources.h
>> index 6bfbd2dc6db0..d5692e4694b1 100644
>> --- a/drivers/media/platform/qcom/iris/iris_resources.h
>> +++ b/drivers/media/platform/qcom/iris/iris_resources.h
>> @@ -9,11 +9,13 @@
>> struct iris_core;
>>
>> int iris_opp_set_rate(struct device *dev, unsigned long freq);
>> -int iris_enable_power_domains(struct iris_core *core, struct device *pd_dev);
>> -int iris_disable_power_domains(struct iris_core *core, struct device *pd_dev);
>> +int iris_enable_power_domains(struct iris_core *core, enum platform_pm_domain_type pd_type);
>> +int iris_disable_power_domains(struct iris_core *core, enum platform_pm_domain_type pd_type);
>> int iris_unset_icc_bw(struct iris_core *core);
>> int iris_set_icc_bw(struct iris_core *core, unsigned long icc_bw);
>> int iris_disable_unprepare_clock(struct iris_core *core, enum platform_clk_type clk_type);
>> int iris_prepare_enable_clock(struct iris_core *core, enum platform_clk_type clk_type);
>> +int iris_genpd_set_hwmode(struct iris_core *core, enum platform_pm_domain_type pd_type,
>> + bool hwmode);
>>
>> #endif
>> diff --git a/drivers/media/platform/qcom/iris/iris_vpu3x.c b/drivers/media/platform/qcom/iris/iris_vpu3x.c
>> index 834194cb5513..13fbb21c2182 100644
>> --- a/drivers/media/platform/qcom/iris/iris_vpu3x.c
>> +++ b/drivers/media/platform/qcom/iris/iris_vpu3x.c
>> @@ -208,7 +208,7 @@ static int iris_vpu33_power_off_controller(struct iris_core *core)
>> iris_disable_unprepare_clock(core, IRIS_CTRL_CLK);
>>
>> disable_power:
>> - iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_CTRL_POWER_DOMAIN]);
>> + iris_disable_power_domains(core, IRIS_CTRL_POWER_DOMAIN);
>> iris_disable_unprepare_clock(core, IRIS_AXI_VCODEC_CLK);
>>
>> return 0;
>> @@ -218,8 +218,7 @@ static int iris_vpu35_power_on_hw(struct iris_core *core)
>> {
>> int ret;
>>
>> - ret = iris_enable_power_domains(core,
>> - core->pmdomain_tbl->pd_devs[IRIS_VCODEC_POWER_DOMAIN]);
>> + ret = iris_enable_power_domains(core, IRIS_VCODEC_POWER_DOMAIN);
>> if (ret)
>> return ret;
>>
>> @@ -242,7 +241,7 @@ static int iris_vpu35_power_on_hw(struct iris_core *core)
>> err_disable_axi_clk:
>> iris_disable_unprepare_clock(core, IRIS_AXI_VCODEC_CLK);
>> err_disable_power:
>> - iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_VCODEC_POWER_DOMAIN]);
>> + iris_disable_power_domains(core, IRIS_VCODEC_POWER_DOMAIN);
>>
>> return ret;
>> }
>> diff --git a/drivers/media/platform/qcom/iris/iris_vpu4x.c b/drivers/media/platform/qcom/iris/iris_vpu4x.c
>> index 92c0b06bbbff..bf7ad4e7cb8a 100644
>> --- a/drivers/media/platform/qcom/iris/iris_vpu4x.c
>> +++ b/drivers/media/platform/qcom/iris/iris_vpu4x.c
>> @@ -27,28 +27,24 @@ static int iris_vpu4x_genpd_set_hwmode(struct iris_core *core, bool hw_mode, u32
>> {
>> int ret;
>>
>> - ret = dev_pm_genpd_set_hwmode(core->pmdomain_tbl->pd_devs[IRIS_VCODEC_POWER_DOMAIN],
>> - hw_mode);
>> + ret = iris_genpd_set_hwmode(core, IRIS_VCODEC_POWER_DOMAIN, hw_mode);
>> if (ret)
>> return ret;
>>
>> if (!(efuse_value & DISABLE_VIDEO_VPP0_BIT)) {
>> - ret = dev_pm_genpd_set_hwmode(core->pmdomain_tbl->pd_devs
>> - [IRIS_VPP0_HW_POWER_DOMAIN], hw_mode);
>> + ret = iris_genpd_set_hwmode(core, IRIS_VPP0_HW_POWER_DOMAIN, hw_mode);
>> if (ret)
>> goto restore_hw_domain_mode;
>> }
>>
>> if (!(efuse_value & DISABLE_VIDEO_VPP1_BIT)) {
>> - ret = dev_pm_genpd_set_hwmode(core->pmdomain_tbl->pd_devs
>> - [IRIS_VPP1_HW_POWER_DOMAIN], hw_mode);
>> + ret = iris_genpd_set_hwmode(core, IRIS_VPP1_HW_POWER_DOMAIN, hw_mode);
>> if (ret)
>> goto restore_vpp0_domain_mode;
>> }
>>
>> if (!(efuse_value & DISABLE_VIDEO_APV_BIT)) {
>> - ret = dev_pm_genpd_set_hwmode(core->pmdomain_tbl->pd_devs
>> - [IRIS_APV_HW_POWER_DOMAIN], hw_mode);
>> + ret = iris_genpd_set_hwmode(core, IRIS_APV_HW_POWER_DOMAIN, hw_mode);
>> if (ret)
>> goto restore_vpp1_domain_mode;
>> }
>> @@ -57,14 +53,12 @@ static int iris_vpu4x_genpd_set_hwmode(struct iris_core *core, bool hw_mode, u32
>>
>> restore_vpp1_domain_mode:
>> if (!(efuse_value & DISABLE_VIDEO_VPP1_BIT))
>> - dev_pm_genpd_set_hwmode(core->pmdomain_tbl->pd_devs[IRIS_VPP1_HW_POWER_DOMAIN],
>> - !hw_mode);
>> + iris_genpd_set_hwmode(core, IRIS_VPP1_HW_POWER_DOMAIN, !hw_mode);
>> restore_vpp0_domain_mode:
>> if (!(efuse_value & DISABLE_VIDEO_VPP0_BIT))
>> - dev_pm_genpd_set_hwmode(core->pmdomain_tbl->pd_devs[IRIS_VPP0_HW_POWER_DOMAIN],
>> - !hw_mode);
>> + iris_genpd_set_hwmode(core, IRIS_VPP0_HW_POWER_DOMAIN, !hw_mode);
>> restore_hw_domain_mode:
>> - dev_pm_genpd_set_hwmode(core->pmdomain_tbl->pd_devs[IRIS_VCODEC_POWER_DOMAIN], !hw_mode);
>> + iris_genpd_set_hwmode(core, IRIS_VCODEC_POWER_DOMAIN, !hw_mode);
>>
>> return ret;
>> }
>> @@ -73,8 +67,7 @@ static int iris_vpu4x_power_on_apv(struct iris_core *core)
>> {
>> int ret;
>>
>> - ret = iris_enable_power_domains(core,
>> - core->pmdomain_tbl->pd_devs[IRIS_APV_HW_POWER_DOMAIN]);
>> + ret = iris_enable_power_domains(core, IRIS_APV_HW_POWER_DOMAIN);
>> if (ret)
>> return ret;
>>
>> @@ -85,7 +78,7 @@ static int iris_vpu4x_power_on_apv(struct iris_core *core)
>> return 0;
>>
>> disable_apv_hw_power_domain:
>> - iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_APV_HW_POWER_DOMAIN]);
>> + iris_disable_power_domains(core, IRIS_APV_HW_POWER_DOMAIN);
>>
>> return ret;
>> }
>> @@ -140,7 +133,7 @@ static void iris_vpu4x_power_off_apv(struct iris_core *core)
>>
>> disable_clocks_and_power:
>> iris_disable_unprepare_clock(core, IRIS_APV_HW_CLK);
>> - iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_APV_HW_POWER_DOMAIN]);
>> + iris_disable_power_domains(core, IRIS_APV_HW_POWER_DOMAIN);
>> }
>>
>> static void iris_vpu4x_ahb_sync_reset_apv(struct iris_core *core)
>> @@ -227,21 +220,18 @@ static int iris_vpu4x_power_on_hardware(struct iris_core *core)
>> u32 efuse_value = readl(core->reg_base + WRAPPER_EFUSE_MONITOR);
>> int ret;
>>
>> - ret = iris_enable_power_domains(core,
>> - core->pmdomain_tbl->pd_devs[IRIS_VCODEC_POWER_DOMAIN]);
>> + ret = iris_enable_power_domains(core, IRIS_VCODEC_POWER_DOMAIN);
>> if (ret)
>> return ret;
>>
>> if (!(efuse_value & DISABLE_VIDEO_VPP0_BIT)) {
>> - ret = iris_enable_power_domains(core, core->pmdomain_tbl->pd_devs
>> - [IRIS_VPP0_HW_POWER_DOMAIN]);
>> + ret = iris_enable_power_domains(core, IRIS_VPP0_HW_POWER_DOMAIN);
>> if (ret)
>> goto disable_hw_power_domain;
>> }
>>
>> if (!(efuse_value & DISABLE_VIDEO_VPP1_BIT)) {
>> - ret = iris_enable_power_domains(core, core->pmdomain_tbl->pd_devs
>> - [IRIS_VPP1_HW_POWER_DOMAIN]);
>> + ret = iris_enable_power_domains(core, IRIS_VPP1_HW_POWER_DOMAIN);
>> if (ret)
>> goto disable_vpp0_power_domain;
>> }
>> @@ -262,14 +252,12 @@ static int iris_vpu4x_power_on_hardware(struct iris_core *core)
>> iris_vpu4x_disable_hardware_clocks(core, efuse_value);
>> disable_vpp1_power_domain:
>> if (!(efuse_value & DISABLE_VIDEO_VPP1_BIT))
>> - iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs
>> - [IRIS_VPP1_HW_POWER_DOMAIN]);
>> + iris_disable_power_domains(core, IRIS_VPP1_HW_POWER_DOMAIN);
>> disable_vpp0_power_domain:
>> if (!(efuse_value & DISABLE_VIDEO_VPP0_BIT))
>> - iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs
>> - [IRIS_VPP0_HW_POWER_DOMAIN]);
>> + iris_disable_power_domains(core, IRIS_VPP0_HW_POWER_DOMAIN);
>> disable_hw_power_domain:
>> - iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_VCODEC_POWER_DOMAIN]);
>> + iris_disable_power_domains(core, IRIS_VCODEC_POWER_DOMAIN);
>>
>> return ret;
>> }
>> @@ -340,14 +328,12 @@ static void iris_vpu4x_power_off_hardware(struct iris_core *core)
>> iris_vpu4x_disable_hardware_clocks(core, efuse_value);
>>
>> if (!(efuse_value & DISABLE_VIDEO_VPP1_BIT))
>> - iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs
>> - [IRIS_VPP1_HW_POWER_DOMAIN]);
>> + iris_disable_power_domains(core, IRIS_VPP1_HW_POWER_DOMAIN);
>>
>> if (!(efuse_value & DISABLE_VIDEO_VPP0_BIT))
>> - iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs
>> - [IRIS_VPP0_HW_POWER_DOMAIN]);
>> + iris_disable_power_domains(core, IRIS_VPP0_HW_POWER_DOMAIN);
>>
>> - iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_VCODEC_POWER_DOMAIN]);
>> + iris_disable_power_domains(core, IRIS_VCODEC_POWER_DOMAIN);
>> }
>>
>> static int iris_vpu4x_set_hwmode(struct iris_core *core)
>> diff --git a/drivers/media/platform/qcom/iris/iris_vpu_common.c b/drivers/media/platform/qcom/iris/iris_vpu_common.c
>> index 73c094bc4311..2593c04decb0 100644
>> --- a/drivers/media/platform/qcom/iris/iris_vpu_common.c
>> +++ b/drivers/media/platform/qcom/iris/iris_vpu_common.c
>> @@ -214,15 +214,15 @@ int iris_vpu_power_off_controller(struct iris_core *core)
>> iris_disable_unprepare_clock(core, IRIS_AHB_CLK);
>> iris_disable_unprepare_clock(core, IRIS_CTRL_CLK);
>> iris_disable_unprepare_clock(core, IRIS_AXI_VCODEC_CLK);
>> - iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_CTRL_POWER_DOMAIN]);
>> + iris_disable_power_domains(core, IRIS_CTRL_POWER_DOMAIN);
>>
>> return 0;
>> }
>>
>> void iris_vpu_power_off_hw(struct iris_core *core)
>> {
>> - dev_pm_genpd_set_hwmode(core->pmdomain_tbl->pd_devs[IRIS_VCODEC_POWER_DOMAIN], false);
>> - iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_VCODEC_POWER_DOMAIN]);
>> + iris_genpd_set_hwmode(core, IRIS_VCODEC_POWER_DOMAIN, false);
>> + iris_disable_power_domains(core, IRIS_VCODEC_POWER_DOMAIN);
>> iris_disable_unprepare_clock(core, IRIS_VCODEC_AHB_CLK);
>> iris_disable_unprepare_clock(core, IRIS_VCODEC_CLK);
>> }
>> @@ -243,7 +243,7 @@ int iris_vpu_power_on_controller(struct iris_core *core)
>> u32 rst_tbl_size = core->iris_platform_data->clk_rst_tbl_size;
>> int ret;
>>
>> - ret = iris_enable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_CTRL_POWER_DOMAIN]);
>> + ret = iris_enable_power_domains(core, IRIS_CTRL_POWER_DOMAIN);
>> if (ret)
>> return ret;
>>
>> @@ -270,7 +270,7 @@ int iris_vpu_power_on_controller(struct iris_core *core)
>> err_disable_axi_clock:
>> iris_disable_unprepare_clock(core, IRIS_AXI_VCODEC_CLK);
>> err_disable_power:
>> - iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_CTRL_POWER_DOMAIN]);
>> + iris_disable_power_domains(core, IRIS_CTRL_POWER_DOMAIN);
>>
>> return ret;
>> }
>> @@ -279,8 +279,7 @@ int iris_vpu_power_on_hw(struct iris_core *core)
>> {
>> int ret;
>>
>> - ret = iris_enable_power_domains(core,
>> - core->pmdomain_tbl->pd_devs[IRIS_VCODEC_POWER_DOMAIN]);
>> + ret = iris_enable_power_domains(core, IRIS_VCODEC_POWER_DOMAIN);
>> if (ret)
>> return ret;
>>
>> @@ -297,14 +296,14 @@ int iris_vpu_power_on_hw(struct iris_core *core)
>> err_disable_hw_clock:
>> iris_disable_unprepare_clock(core, IRIS_VCODEC_CLK);
>> err_disable_power:
>> - iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_VCODEC_POWER_DOMAIN]);
>> + iris_disable_power_domains(core, IRIS_VCODEC_POWER_DOMAIN);
>>
>> return ret;
>> }
>>
>> int iris_vpu_set_hwmode(struct iris_core *core)
>> {
>> - return dev_pm_genpd_set_hwmode(core->pmdomain_tbl->pd_devs[IRIS_VCODEC_POWER_DOMAIN], true);
>> + return iris_genpd_set_hwmode(core, IRIS_VCODEC_POWER_DOMAIN, true);
>> }
>>
>> int iris_vpu_switch_to_hwmode(struct iris_core *core)
>> @@ -369,7 +368,7 @@ int iris_vpu35_vpu4x_power_off_controller(struct iris_core *core)
>> iris_disable_unprepare_clock(core, IRIS_CTRL_FREERUN_CLK);
>> iris_disable_unprepare_clock(core, IRIS_AXI_CTRL_CLK);
>>
>> - iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_CTRL_POWER_DOMAIN]);
>> + iris_disable_power_domains(core, IRIS_CTRL_POWER_DOMAIN);
>>
>> reset_control_bulk_reset(clk_rst_tbl_size, core->resets);
>>
>> @@ -380,7 +379,7 @@ int iris_vpu35_vpu4x_power_on_controller(struct iris_core *core)
>> {
>> int ret;
>>
>> - ret = iris_enable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_CTRL_POWER_DOMAIN]);
>> + ret = iris_enable_power_domains(core, IRIS_CTRL_POWER_DOMAIN);
>> if (ret)
>> return ret;
>>
>> @@ -403,7 +402,7 @@ int iris_vpu35_vpu4x_power_on_controller(struct iris_core *core)
>> err_disable_axi1_clk:
>> iris_disable_unprepare_clock(core, IRIS_AXI_CTRL_CLK);
>> err_disable_power:
>> - iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_CTRL_POWER_DOMAIN]);
>> + iris_disable_power_domains(core, IRIS_CTRL_POWER_DOMAIN);
>>
>> return ret;
>> }
>>
>> --
>> 2.34.1
>>
next prev parent reply other threads:[~2026-05-09 17:02 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-08 18:59 [PATCH v5 00/14] media: iris: Add support for glymur platform Vishnu Reddy
2026-05-08 18:59 ` [PATCH v5 01/14] media: iris: Add iris vpu bus support Vishnu Reddy
2026-05-08 19:16 ` Dmitry Baryshkov
2026-05-09 17:05 ` Vishnu Reddy
2026-05-08 23:20 ` sashiko-bot
2026-05-08 18:59 ` [PATCH v5 02/14] iommu: Add iris-vpu-bus to iommu_buses Vishnu Reddy
2026-05-08 19:16 ` Dmitry Baryshkov
2026-05-08 23:42 ` sashiko-bot
2026-05-08 18:59 ` [PATCH v5 03/14] media: iris: Fix VM count passed to firmware Vishnu Reddy
2026-05-08 19:20 ` Dmitry Baryshkov
2026-05-08 18:59 ` [PATCH v5 04/14] dt-bindings: media: qcom,venus: Remove clock, power-domain, and iommus from common schema Vishnu Reddy
2026-05-08 19:22 ` Dmitry Baryshkov
2026-05-09 17:04 ` Vishnu Reddy
2026-05-08 18:59 ` [PATCH v5 05/14] dt-bindings: media: qcom,glymur-iris: Add glymur video codec Vishnu Reddy
2026-05-08 18:59 ` [PATCH v5 06/14] media: iris: Add context bank hooks for platform specific initialization Vishnu Reddy
2026-05-09 0:41 ` sashiko-bot
2026-05-08 18:59 ` [PATCH v5 07/14] media: iris: Enable Secure PAS support with IOMMU managed by Linux Vishnu Reddy
2026-05-08 19:05 ` Trilok Soni
2026-05-08 20:20 ` Dmitry Baryshkov
2026-05-09 2:05 ` sashiko-bot
2026-05-08 18:59 ` [PATCH v5 08/14] media: iris: Rename clock and power domain macros to use vcodec prefix Vishnu Reddy
2026-05-08 20:22 ` Dmitry Baryshkov
2026-05-09 17:07 ` Vishnu Reddy
2026-05-09 2:18 ` sashiko-bot
2026-05-08 18:59 ` [PATCH v5 09/14] media: iris: Use power domain type to look up pd_devs index Vishnu Reddy
2026-05-08 20:44 ` Dmitry Baryshkov
2026-05-09 17:02 ` Vishnu Reddy [this message]
2026-05-08 18:59 ` [PATCH v5 10/14] media: iris: Add power sequence for Glymur Vishnu Reddy
2026-05-08 20:54 ` Dmitry Baryshkov
2026-05-09 2:56 ` sashiko-bot
2026-05-08 19:00 ` [PATCH v5 11/14] media: iris: Add support to select core for dual core platforms Vishnu Reddy
2026-05-08 21:00 ` Dmitry Baryshkov
2026-05-09 3:55 ` sashiko-bot
2026-05-08 19:00 ` [PATCH v5 12/14] media: iris: Add platform data for glymur Vishnu Reddy
2026-05-08 21:05 ` Dmitry Baryshkov
2026-05-09 4:23 ` sashiko-bot
2026-05-08 19:00 ` [PATCH v5 13/14] arm64: dts: qcom: glymur: Add iris video node Vishnu Reddy
2026-05-08 19:27 ` Dmitry Baryshkov
2026-05-09 16:56 ` Vishnu Reddy
2026-05-08 19:00 ` [PATCH v5 14/14] arm64: dts: qcom: glymur-crd: Enable iris video codec node Vishnu Reddy
2026-05-08 23:54 ` Dmitry Baryshkov
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=201bfaca-b462-ec34-da00-9bac5804a808@oss.qualcomm.com \
--to=busanna.reddy@oss.qualcomm.com \
--cc=abhinav.kumar@linux.dev \
--cc=andersson@kernel.org \
--cc=angelogioacchino.delregno@collabora.com \
--cc=bod@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dikshita.agarwal@oss.qualcomm.com \
--cc=dmitry.baryshkov@oss.qualcomm.com \
--cc=hverkuil@kernel.org \
--cc=iommu@lists.linux.dev \
--cc=jorge.ramirez@oss.qualcomm.com \
--cc=joro@8bytes.org \
--cc=konradybcio@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=krzk@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=robh@kernel.org \
--cc=robin.murphy@arm.com \
--cc=stanimir.varbanov@linaro.org \
--cc=stefan.schmidt@linaro.org \
--cc=vikash.garodia@oss.qualcomm.com \
--cc=will@kernel.org \
/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