From: Honghui Zhang <honghui.zhang@mediatek.com>
To: Ulf Hansson <ulf.hansson@linaro.org>
Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>,
<linux-mediatek@lists.infradead.org>,
Linux PCI <linux-pci@vger.kernel.org>,
Ryder Lee <ryder.lee@mediatek.com>
Subject: Re: [PATCH v3 3/4] PCI: mediatek: Add system pm support for MT2712 and MT7622
Date: Tue, 11 Sep 2018 18:23:56 +0800 [thread overview]
Message-ID: <1536661436.31406.75.camel@mhfsdcap03> (raw)
In-Reply-To: <CAPDyKFqvs6St1oTvx=_0dYSOXweW03PUZ=EAkgpL3XP-Sgg-sw@mail.gmail.com>
On Mon, 2018-09-10 at 13:25 +0200, Ulf Hansson wrote:
> On 10 September 2018 at 11:42, Honghui Zhang <honghui.zhang@mediatek.com> wrote:
[...]
> >> > + clk_disable_unprepare(port->sys_ck);
> >> > + phy_power_off(port->phy);
> >> > + phy_exit(port->phy);
> >> > + }
> >> > +
> >> > + mtk_pcie_subsys_powerdown(pcie);
> >>
> >> Why not gate clocks, unconditionally not depending on if pm_support is
> >> set or not, during system suspend?
> >>
> >> I understand that you for some SoCs needs also to restore registers
> >> during system resume, but that's a different thing, isn't it?
> >>
> >
> > Well, current host driver support different SoCs like mt7623, mt7622 and
> > mt2712. mt7623 need quite special take care of when system suspend. This
> > patch just add the suspend/resume support for mt7622&mt2712, while
> > mt7623 was excluded. This "pm_support" maybe removed after we have a
> > solution for mt7623 SoC of the system suspend.
>
> Okay. So you simply want to take small steps, that works!
>
> >
> >> > +
> >> > + return 0;
> >> > +}
> >> > +
> >> > +static int __maybe_unused mtk_pcie_resume_noirq(struct device *dev)
> >> > +{
> >> > + struct mtk_pcie *pcie = dev_get_drvdata(dev);
> >> > + const struct mtk_pcie_soc *soc = pcie->soc;
> >> > + struct mtk_pcie_port *port, *tmp;
> >> > +
> >> > + if (!soc->pm_support)
> >> > + return 0;
> >> > +
> >> > + if (list_empty(&pcie->ports))
> >> > + return 0;
> >> > +
> >> > + if (dev->pm_domain) {
> >> > + pm_runtime_enable(dev);
> >> > + pm_runtime_get_sync(dev);
> >>
> >> I noticed, Lorenzo wanted me to comment on this, so here it goes.
> >>
> >> I guess the reason to why you make these pm_runtime_*() calls, is
> >> because you want to restore the actions taken during
> >> mtk_pcie_suspend_noirq() (which calls mtk_pcie_subsys_powerdown ->
> >> pm_runtime_disable|put*())?
> >
> > Yes, that's what am I want to do.
> >
> >>
> >> If that's the case, I would rather avoid calling pm_runtime_disable()
> >> and pm_runtime_put() via mtk_pcie_suspend_noirq(), simply because it
> >> isn't needed.
> >
> >> Of course, another option is to follow the pattern in
> >> drivers/mmc/host/sdhci-xenon.c.
> >>
> >
> > Thanks.
> > I take a look at the drivers/mmc/sdhci-xenon.c's implement, it has add
> > system suspend callbacks and set the device status to "PRM_SUSPENDED"
> > through the pm_runtime_force_suspend() interface.
> > I noticed that pm_runtime_put_sync will put the device status to
> > "PRM_SUSPENDED" status in some certain condition.
> > And I did not found the pci framework setting the status to
> > "PRM_SUSPENDED". So I add the pm_runtime_put_sync/disable in
> > suspend_noirq phase.
> >
> > According to my understanding of PM, the system suspend flow does not
> > care about the runtime PM status. The runtime pm is responsible for the
> > CMOS gate, if the device want to gated it's CMOS, it need to call the
> > runtime pm interface obviously.
>
> Well, during system suspend, the PM core disables runtime PM for all
> devices. See __device_suspend_late().
>
> Additionally, the PM core prevents devices from being runtime
> suspended. See device_prepare(), as it calls
> pm_runtime_get_noresume().
>
> In other words, drivers can not rely on calling pm_runtime_put_sync()
> from a ->suspend_noirq() callback to put its device into low power
> state.
>
Thanks for your explain, that's a great help for me with the
understanding the PM logical.
> >
> > But I found that the PCIe framework will still operate with the device
> > after device driver suspend_noirq executed like save the configuration
> > space values through pci_save_state, So I guess the cmos could not be
> > gated at the suspend_noirq phase. I will update the patchset to remove
> > the pm runtime operations in the suspend_noirq phase.
>
> That's doesn't sound correct to me. Although, I am not a PCI expert.
>
Never mind, per my understanding, after the driver's suspend_noirq
callback executed, the CMOS should not be gated, since the PCI framework
still got work to do with the device.
> >
> >> Overall, I am also wondering why only runtime PM is used when there is
> >> a PM domain attached to the device? That seems to make the logic in
> >> the driver, unnecessary complicated. Why not use runtime
> >> unconditionally and thus enable it during ->probe()?
> >
> > I'm not sure, I thought that if there's no "power-domains = " property
> > in device node, that means the device has no PM domain. Some of the SoCs
> > does not have independent CMOS domain. So does that means it will leave
> > the dev->pm_domain as NULL or assign it as the genpd->pm_domain?
>
> My point is, that no matter if there is a PM domain assigned or not,
> the PCIe driver can still enable/use runtime PM. It shouldn't hurt.
>
Thanks, I will try and propose another patch for this.
> >
> > I need to do some homework to figure this out and will send a new patch
> > to fix this if needed.
>
> I did some more re-search and maybe the easiest thing for you to do is
> to follow the pattern in the tegra PCIe controller driver.
> drivers/pci/controller/pci-tegra.c.
>
> That should definitely work for your case as well.
Thanks, most of the PCIe host driver does not set the RUNTIME_PM_OPS for
suspend except pci-tegra.c. So my V4 version patch has followed majority
driver.
>
> [...]
>
> Kind regards
> Uffe
next prev parent reply other threads:[~2018-09-11 15:22 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-02 7:57 [PATCH v3 0/4] PCI: mediatek: fixup find_port, enable_msi and add pm, module support honghui.zhang
2018-07-02 7:57 ` [PATCH v3 1/4] PCI: mediatek: fixup mtk_pcie_find_port logical honghui.zhang
2018-07-02 7:57 ` [PATCH v3 2/4] PCI: mediatek: enable msi after clock enabled honghui.zhang
2018-07-02 7:57 ` [PATCH v3 3/4] PCI: mediatek: Add system pm support for MT2712 and MT7622 honghui.zhang
2018-07-17 17:15 ` Lorenzo Pieralisi
2018-07-18 6:02 ` Honghui Zhang
2018-07-18 9:49 ` Lorenzo Pieralisi
2018-09-07 9:43 ` Honghui Zhang
2018-09-07 12:33 ` Ulf Hansson
2018-09-10 9:42 ` Honghui Zhang
2018-09-10 11:25 ` Ulf Hansson
2018-09-11 10:23 ` Honghui Zhang [this message]
2018-09-21 17:10 ` Lorenzo Pieralisi
2018-09-26 9:14 ` Honghui Zhang
2018-07-02 7:57 ` [PATCH v3 4/4] PCI: mediatek: Add loadable kernel module support honghui.zhang
2018-07-16 3:35 ` [PATCH v3 0/4] PCI: mediatek: fixup find_port, enable_msi and add pm, " Honghui Zhang
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=1536661436.31406.75.camel@mhfsdcap03 \
--to=honghui.zhang@mediatek.com \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-pci@vger.kernel.org \
--cc=lorenzo.pieralisi@arm.com \
--cc=ryder.lee@mediatek.com \
--cc=ulf.hansson@linaro.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).