From: Christian Bruel <christian.bruel@foss.st.com>
To: Bjorn Helgaas <helgaas@kernel.org>,
Linus Walleij <linus.walleij@linaro.org>
Cc: <lpieralisi@kernel.org>, <kwilczynski@kernel.org>,
<mani@kernel.org>, <robh@kernel.org>, <bhelgaas@google.com>,
<mcoquelin.stm32@gmail.com>, <alexandre.torgue@foss.st.com>,
<linux-pci@vger.kernel.org>,
<linux-stm32@st-md-mailman.stormreply.com>,
<linux-arm-kernel@lists.infradead.org>,
<linux-kernel@vger.kernel.org>, <linux-gpio@vger.kernel.org>
Subject: Re: [RESEND PATCH 0/2] Add pinctrl_pm_select_init_state helper function
Date: Thu, 24 Jul 2025 15:36:52 +0200 [thread overview]
Message-ID: <99737d4f-488d-4208-91aa-83ce52957147@foss.st.com> (raw)
In-Reply-To: <20250723210753.GA2911683@bhelgaas>
On 7/23/25 23:07, Bjorn Helgaas wrote:
> On Wed, Jul 23, 2025 at 01:32:52PM +0200, Linus Walleij wrote:
>> On Thu, Jul 17, 2025 at 8:33 AM Christian Bruel
>> <christian.bruel@foss.st.com> wrote:
>>
>>> We have the helper functions pinctrl_pm_select_default_state and
>>> pinctrl_pm_select_sleep_state.
>>> This patch adds the missing pinctrl_pm_select_init_state function.
>>>
>>> The STM32MP2 needs to set the pinctrl to an initial state during
>>> pm_resume, just like in probe. To achieve this, the function
>>> pinctrl_pm_select_init_state is added.
>>>
>>> This allows a driver to balance pinctrl_pm_select_sleep_state()
>>> with pinctrl_pm_select_default_state() and
>>> pinctrl_pm_select_init_state() in pm_runtime_suspend and pm_runtime_resume.
>>>
>>> Christian Bruel (2):
>>> pinctrl: Add pinctrl_pm_select_init_state helper function
>>> PCI: stm32: use pinctrl_pm_select_init_state() in
>>> stm32_pcie_resume_noirq()
>>
>> If Bjorn Helgaas is OK with it I can apply this to the pinctrl tree.
>>
>> Otherwise I can also just apply patch 1/2, but that doesn't solve
>> any problem.
>
> The stm32 driver has been posted and is on this branch of the PCI
> tree:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git/log/?h=controller/dwc-stm32&id=5a972a01e24b
>
> but it's not in mainline (or even in pci/next) yet, so you would only
> be able to apply patch 2/2 if you took the whole driver, which is
> probably more than you would want to do.
>
> I haven't put it in pci/next yet because it doesn't build when
> CONFIG_PINCTRL is not defined:
>
> https://lore.kernel.org/r/20250716192418.GA2550861@bhelgaas
>
> I don't know enough about pinctrl to know why stm32 needs this when
> nobody else seems to. I doubt it's really unique, so maybe it's just
> not doing the right thing here.
The STM32MP2 is unique because the core clock is gated on CLKREQ#.
Consequently, it is not possible to access the core registers from DBI
when no card is attached, causing the board to freeze. I don't know
another platform with this limitation
To fix this, we use a GPIO to de-assert CLKREQ# during probe and restore
the pin to its default AF mode afterward. This works perfectly for
probe, but we lack functionality for PM resume unless we explicitly
select the state with pinctrl_pm_select_XXX_state().
For reference, the init_state functionality was introduced in
https://lkml.org/lkml/2015/10/21/1
If we prefer not to extend the pinctrl API in patch 1/2, I can fix the
case in patch 2/2 only with something like:
in stm32_pcie_probe()
pinctrl = devm_pinctrl_get(dev);
if(pinctrl!= -ENODEV) // PINCTRL is defined
pinctrl_init = pinctrl_lookup_state(stm32_pcie>pinctrl,
PINCTRL_STATE_IN
in stm32_pcie_resume_noirq()
if (pinctrl) {
ret = pinctrl_select_state(stm32_pcie->pinctrl,
stm32_pcie->pinctrl_init);
What do you advise ?
thank you
Christian
>
> Bjorn
next prev parent reply other threads:[~2025-07-24 13:39 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-07-17 6:30 [RESEND PATCH 0/2] Add pinctrl_pm_select_init_state helper function Christian Bruel
2025-07-17 6:30 ` [RESEND PATCH 1/2] pinctrl: " Christian Bruel
2025-07-17 6:30 ` [RESEND PATCH 2/2] PCI: stm32: use pinctrl_pm_select_init_state() in stm32_pcie_resume_noirq() Christian Bruel
2025-08-07 18:05 ` Bjorn Helgaas
2025-07-23 11:32 ` [RESEND PATCH 0/2] Add pinctrl_pm_select_init_state helper function Linus Walleij
2025-07-23 21:07 ` Bjorn Helgaas
2025-07-24 13:36 ` Christian Bruel [this message]
2025-08-07 14:15 ` Christian Bruel
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=99737d4f-488d-4208-91aa-83ce52957147@foss.st.com \
--to=christian.bruel@foss.st.com \
--cc=alexandre.torgue@foss.st.com \
--cc=bhelgaas@google.com \
--cc=helgaas@kernel.org \
--cc=kwilczynski@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-stm32@st-md-mailman.stormreply.com \
--cc=lpieralisi@kernel.org \
--cc=mani@kernel.org \
--cc=mcoquelin.stm32@gmail.com \
--cc=robh@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;
as well as URLs for NNTP newsgroup(s).