From: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
To: Frank Li <Frank.li@oss.nxp.com>
Cc: Bryan O'Donoghue <bod@kernel.org>, Vinod Koul <vkoul@kernel.org>,
Neil Armstrong <neil.armstrong@linaro.org>,
Manivannan Sadhasivam <mani@kernel.org>,
gjorgji.rosikopulos@oss.qualcomm.com,
hariram.purushothaman@oss.qualcomm.com, akapatra@quicinc.com,
jigarkumar.zala@oss.qualcomm.com, linux-phy@lists.infradead.org,
linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2] phy: qcom-mipi-csi2: Add support for single power-domain SoCs
Date: Wed, 28 Oct 2026 13:53:19 -0700 [thread overview]
Message-ID: <ad0793bf-b9be-4697-8ee0-0e787ab47ae8@oss.qualcomm.com> (raw)
In-Reply-To: <auIWsA4gTWzwFGVo@lizhi-Precision-Tower-5810>
Hi Frank,
dev_pm_domain_attach() checks for that case itself:
int dev_pm_domain_attach(struct device *dev, u32 flags)
{
if (dev->pm_domain)
return 0;
...
So the call is a safe no-op when the bus core already attached it
(the common case here), and does the real attach work if it somehow
hasn't. It's not redundant, it's what makes this call safe to use
unconditionally, unlike the devm_pm_domain_attach_list() call it
replaces, which has no such early-return and fails with -EEXIST
instead when already attached. That -EEXIST is the bug this patch
fixes.
Regards,
Anusha
On 10/28/2026 8:37 AM, Frank Li wrote:
> On Tue, Oct 27, 2026 at 10:20:47PM -0700, Anusha Arun Nandi wrote:
>> sa8775p, qcs8300 and sc7280 each list exactly one power-domain ("top")
>> on the CSI2 PHY node. For a device with a single power-domain phandle,
>> the generic platform-bus code (platform_probe() ->
>> dev_pm_domain_attach()) auto-attaches it via genpd_dev_pm_attach()
>> before the driver's own probe() runs. phy_qcom_mipi_csi2_probe() then
>> unconditionally calls devm_pm_domain_attach_list(), which fails with
>> -EEXIST because dev->pm_domain is already set, and the driver treats
>> that as fatal:
>>
>> 1. qcom-mipi-csi2-phy ace6000.phy: error -EEXIST: Failed to attach
>> power-domain list
>> 2. qcom-mipi-csi2-phy ace6000.phy: probe with driver qcom-mipi-csi2-phy
>> failed with error -17
>>
>> x1e80100 is unaffected: it lists three power-domains, so the generic
>> code does not auto-attach any of them (auto-attach only applies to
>> single-power-domain devices); the driver's explicit attach is the
>> only one that runs.
>>
>> For the single power-domain case, call dev_pm_domain_attach() instead
>> of devm_pm_domain_attach_list(): it returns early when dev->pm_domain
>> is already set, so csi2phy->pd_list is left NULL rather than built up
>> by hand. The three call sites that walk pd_list for genpd
>> performance-state scaling now guard against a NULL pd_list, which is
>> harmless since scaling is unused (scaled = false) on every SoC that has
>> a single "top" domain.
>>
>> Signed-off-by: Anusha Arun Nandi <anusha.nandi@oss.qualcomm.com>
>> ---
>> drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c | 15 ++++++++-------
>> 1 file changed, 8 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
>> index c0a4fa20eaf0..ac25e1e5f1c3 100644
>> --- a/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
>> +++ b/drivers/phy/qualcomm/phy-qcom-mipi-csi2-core.c
>> @@ -43,7 +43,7 @@ phy_qcom_mipi_csi2_set_clock_rates(struct mipi_csi2phy_device *csi2phy,
>> }
>>
>> pstate = 0;
>> - for (i = 0; i < csi2phy->pd_list->num_pds; i++) {
>> + for (i = 0; csi2phy->pd_list && i < csi2phy->pd_list->num_pds; i++) {
>> unsigned int perf;
>>
>> if (!csi2phy->soc_cfg->genpds[i].scaled)
>> @@ -174,7 +174,7 @@ static int phy_qcom_mipi_csi2_power_on(struct phy *phy)
>> unset_rate:
>> dev_pm_opp_set_rate(csi2phy->dev, 0);
>>
>> - for (i = 0; i < csi2phy->pd_list->num_pds; i++) {
>> + for (i = 0; csi2phy->pd_list && i < csi2phy->pd_list->num_pds; i++) {
>> if (!csi2phy->soc_cfg->genpds[i].scaled)
>> continue;
>>
>> @@ -204,7 +204,7 @@ static int phy_qcom_mipi_csi2_power_off(struct phy *phy)
>>
>> dev_pm_opp_set_rate(csi2phy->dev, 0);
>>
>> - for (i = 0; i < csi2phy->pd_list->num_pds; i++) {
>> + for (i = 0; csi2phy->pd_list && i < csi2phy->pd_list->num_pds; i++) {
>> if (!csi2phy->soc_cfg->genpds[i].scaled)
>> continue;
>>
>> @@ -233,6 +233,10 @@ static int phy_qcom_mipi_csi2_attach_pm_domains(struct mipi_csi2phy_device *csi2
>> const char **pd_names;
>> int i;
>>
>> + /* Single power-domain devices are already attached by the bus core. */
>> + if (csi2phy->soc_cfg->num_genpds == 1)
>> + return dev_pm_domain_attach(csi2phy->dev, 0);
>> +
>
> why call dev_pm_domain_attach() if Single power-domain devices are already
> attached by the bus core?
>
> Frank
next prev parent reply other threads:[~2026-10-28 20:53 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <ZW6-XDf5dgEFD66QI7ZA8WIK_alWTQD2RWolsXjlSql7pO5IUj9PM1T95LMfBd2Y3zKxRhDXXde1R4asZWzgKw==@protonmail.internalid>
2026-10-28 5:20 ` Anusha Arun Nandi
2026-10-28 9:58 ` Bryan O'Donoghue
2026-10-28 20:45 ` Anusha Arun Nandi
2026-10-28 15:37 ` Frank Li
2026-10-28 20:53 ` Anusha Arun Nandi [this message]
2026-10-28 5:10 Anusha Arun Nandi
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=ad0793bf-b9be-4697-8ee0-0e787ab47ae8@oss.qualcomm.com \
--to=anusha.nandi@oss.qualcomm.com \
--cc=Frank.li@oss.nxp.com \
--cc=akapatra@quicinc.com \
--cc=bod@kernel.org \
--cc=gjorgji.rosikopulos@oss.qualcomm.com \
--cc=hariram.purushothaman@oss.qualcomm.com \
--cc=jigarkumar.zala@oss.qualcomm.com \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-phy@lists.infradead.org \
--cc=mani@kernel.org \
--cc=neil.armstrong@linaro.org \
--cc=vkoul@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
all inboxes | Powered by JetHome®