From: Manivannan Sadhasivam <mani@kernel.org>
To: Shawn Lin <shawn.lin@rock-chips.com>
Cc: Frank Li <Frank.li@nxp.com>,
Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>,
helgaas@kernel.org, imx@lists.linux.dev, bhelgaas@google.com,
devicetree@vger.kernel.org, gustavo.pimentel@synopsys.com,
kw@linux.com, leoyang.li@nxp.com,
linux-arm-kernel@lists.infradead.org, linux-imx@nxp.com,
linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org,
lorenzo.pieralisi@arm.com, minghuan.lian@nxp.com,
mingkai.hu@nxp.com, robh+dt@kernel.org, roy.zang@nxp.com,
shawnguo@kernel.org, zhiqiang.hou@nxp.com
Subject: Re: [PATCH v3 1/2] PCI: dwc: Implement general suspend/resume functionality for L2/L3 transitions
Date: Fri, 21 Jul 2023 20:24:22 +0530 [thread overview]
Message-ID: <20230721145422.GC2536@thinkpad> (raw)
In-Reply-To: <6f1eb449-5609-0b17-1323-0d114c38d969@rock-chips.com>
On Fri, Jul 21, 2023 at 10:09:18AM +0800, Shawn Lin wrote:
>
> On 2023/7/21 0:07, Manivannan Sadhasivam wrote:
> > On Thu, Jul 20, 2023 at 10:37:36AM -0400, Frank Li wrote:
> > > On Thu, Jul 20, 2023 at 07:55:09PM +0530, Manivannan Sadhasivam wrote:
> > > > On Tue, Jul 18, 2023 at 03:34:26PM +0530, Manivannan Sadhasivam wrote:
> > > > > On Mon, Jul 17, 2023 at 02:36:19PM -0400, Frank Li wrote:
> > > > > > On Mon, Jul 17, 2023 at 10:15:26PM +0530, Manivannan Sadhasivam wrote:
> > > > > > > On Wed, Apr 19, 2023 at 12:41:17PM -0400, Frank Li wrote:
> > > > > > > > Introduced helper function dw_pcie_get_ltssm to retrieve SMLH_LTSS_STATE.
> > > > > > > > Added API pme_turn_off and exit_from_l2 for managing L2/L3 state transitions.
> > > > > > > >
> > > > > > > > Typical L2 entry workflow:
> > > > > > > >
> > > > > > > > 1. Transmit PME turn off signal to PCI devices.
> > > > > > > > 2. Await link entering L2_IDLE state.
> > > > > > >
> > > > > > > AFAIK, typical workflow is to wait for PME_To_Ack.
> > > > > >
> > > > > > 1 Already wait for PME_to_ACK, 2, just wait for link actual enter L2.
> > > > > > I think PCI RC needs some time to set link enter L2 after get ACK from
> > > > > > PME.
> > > > > >
> > > >
> > > > One more comment. If you transition the device to L2/L3, then it can loose power
> > > > if Vaux was not provided. In that case, can all the devices work after resume?
> > > > Most notably NVMe?
> > >
> > > I have not hardware to do such test, NVMe driver will reinit everything after
> > > resume if no L1.1\L1.2 support. If there are L1.1\L1.2, NVME expect it leave
> > > at L1.2 at suspend to get better resume latency.
> > >
> >
> > To be precise, NVMe driver will shutdown the device if there is no ASPM support
> > and keep it in low power mode otherwise (there are other cases as well but we do
> > not need to worry).
> >
> > But here you are not checking for ASPM state in the suspend path, and just
> > forcing the link to be in L2/L3 (thereby D3Cold) even though NVMe driver may
> > expect it to be in low power state like ASPM/APST.
> >
> > So you should only put the link to L2/L3 if there is no ASPM support. Otherwise,
> > you'll ending up with bug reports when users connect NVMe to it.
> >
>
>
> At this topic, it's very interesting to look at
>
> drivers/pci/controller/dwc/pcie-tegra194.c
>
>
> static int tegra_pcie_dw_suspend_noirq(struct device *dev)
> {
> struct tegra_pcie_dw *pcie = dev_get_drvdata(dev);
>
> if (!pcie->link_state)
> return 0;
>
> tegra_pcie_downstream_dev_to_D0(pcie);
> tegra_pcie_dw_pme_turnoff(pcie);
> tegra_pcie_unconfig_controller(pcie);
>
> return 0;
> }
>
> It brings back all the downstream components to D0, as I assumed it was L0
> indeed, before sending PME aiming to enter L2.
>
The behavior is Tegra specific as mentioned in the comment in
tegra_pcie_downstream_dev_to_D0():
/*
* link doesn't go into L2 state with some of the endpoints with Tegra
* if they are not in D0 state. So, need to make sure that immediate
* downstream devices are in D0 state before sending PME_TurnOff to put
* link into L2 state.
* This is as per PCI Express Base r4.0 v1.0 September 27-2017,
* 5.2 Link State Power Management (Page #428).
*/
But I couldn't find the behavior documented in the spec as per the comment. Not
sure if I'm reading it wrong!
Also, I can confirm from previous interations with the linux-nvme list that
Tegra also faces the suspend issue with NVMe devices.
- Mani
- Mani
> > - Mani
> >
> > > This API help remove duplicate codes and it can be improved gradually.
> > >
> > >
> > > >
> > > > - Mani
> > > >
> > > >
> > > > --
> > > > மணிவண்ணன் சதாசிவம்
> >
--
மணிவண்ணன் சதாசிவம்
WARNING: multiple messages have this Message-ID (diff)
From: Manivannan Sadhasivam <mani@kernel.org>
To: Shawn Lin <shawn.lin@rock-chips.com>
Cc: Frank Li <Frank.li@nxp.com>,
Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>,
helgaas@kernel.org, imx@lists.linux.dev, bhelgaas@google.com,
devicetree@vger.kernel.org, gustavo.pimentel@synopsys.com,
kw@linux.com, leoyang.li@nxp.com,
linux-arm-kernel@lists.infradead.org, linux-imx@nxp.com,
linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org,
lorenzo.pieralisi@arm.com, minghuan.lian@nxp.com,
mingkai.hu@nxp.com, robh+dt@kernel.org, roy.zang@nxp.com,
shawnguo@kernel.org, zhiqiang.hou@nxp.com
Subject: Re: [PATCH v3 1/2] PCI: dwc: Implement general suspend/resume functionality for L2/L3 transitions
Date: Fri, 21 Jul 2023 20:24:22 +0530 [thread overview]
Message-ID: <20230721145422.GC2536@thinkpad> (raw)
In-Reply-To: <6f1eb449-5609-0b17-1323-0d114c38d969@rock-chips.com>
On Fri, Jul 21, 2023 at 10:09:18AM +0800, Shawn Lin wrote:
>
> On 2023/7/21 0:07, Manivannan Sadhasivam wrote:
> > On Thu, Jul 20, 2023 at 10:37:36AM -0400, Frank Li wrote:
> > > On Thu, Jul 20, 2023 at 07:55:09PM +0530, Manivannan Sadhasivam wrote:
> > > > On Tue, Jul 18, 2023 at 03:34:26PM +0530, Manivannan Sadhasivam wrote:
> > > > > On Mon, Jul 17, 2023 at 02:36:19PM -0400, Frank Li wrote:
> > > > > > On Mon, Jul 17, 2023 at 10:15:26PM +0530, Manivannan Sadhasivam wrote:
> > > > > > > On Wed, Apr 19, 2023 at 12:41:17PM -0400, Frank Li wrote:
> > > > > > > > Introduced helper function dw_pcie_get_ltssm to retrieve SMLH_LTSS_STATE.
> > > > > > > > Added API pme_turn_off and exit_from_l2 for managing L2/L3 state transitions.
> > > > > > > >
> > > > > > > > Typical L2 entry workflow:
> > > > > > > >
> > > > > > > > 1. Transmit PME turn off signal to PCI devices.
> > > > > > > > 2. Await link entering L2_IDLE state.
> > > > > > >
> > > > > > > AFAIK, typical workflow is to wait for PME_To_Ack.
> > > > > >
> > > > > > 1 Already wait for PME_to_ACK, 2, just wait for link actual enter L2.
> > > > > > I think PCI RC needs some time to set link enter L2 after get ACK from
> > > > > > PME.
> > > > > >
> > > >
> > > > One more comment. If you transition the device to L2/L3, then it can loose power
> > > > if Vaux was not provided. In that case, can all the devices work after resume?
> > > > Most notably NVMe?
> > >
> > > I have not hardware to do such test, NVMe driver will reinit everything after
> > > resume if no L1.1\L1.2 support. If there are L1.1\L1.2, NVME expect it leave
> > > at L1.2 at suspend to get better resume latency.
> > >
> >
> > To be precise, NVMe driver will shutdown the device if there is no ASPM support
> > and keep it in low power mode otherwise (there are other cases as well but we do
> > not need to worry).
> >
> > But here you are not checking for ASPM state in the suspend path, and just
> > forcing the link to be in L2/L3 (thereby D3Cold) even though NVMe driver may
> > expect it to be in low power state like ASPM/APST.
> >
> > So you should only put the link to L2/L3 if there is no ASPM support. Otherwise,
> > you'll ending up with bug reports when users connect NVMe to it.
> >
>
>
> At this topic, it's very interesting to look at
>
> drivers/pci/controller/dwc/pcie-tegra194.c
>
>
> static int tegra_pcie_dw_suspend_noirq(struct device *dev)
> {
> struct tegra_pcie_dw *pcie = dev_get_drvdata(dev);
>
> if (!pcie->link_state)
> return 0;
>
> tegra_pcie_downstream_dev_to_D0(pcie);
> tegra_pcie_dw_pme_turnoff(pcie);
> tegra_pcie_unconfig_controller(pcie);
>
> return 0;
> }
>
> It brings back all the downstream components to D0, as I assumed it was L0
> indeed, before sending PME aiming to enter L2.
>
The behavior is Tegra specific as mentioned in the comment in
tegra_pcie_downstream_dev_to_D0():
/*
* link doesn't go into L2 state with some of the endpoints with Tegra
* if they are not in D0 state. So, need to make sure that immediate
* downstream devices are in D0 state before sending PME_TurnOff to put
* link into L2 state.
* This is as per PCI Express Base r4.0 v1.0 September 27-2017,
* 5.2 Link State Power Management (Page #428).
*/
But I couldn't find the behavior documented in the spec as per the comment. Not
sure if I'm reading it wrong!
Also, I can confirm from previous interations with the linux-nvme list that
Tegra also faces the suspend issue with NVMe devices.
- Mani
- Mani
> > - Mani
> >
> > > This API help remove duplicate codes and it can be improved gradually.
> > >
> > >
> > > >
> > > > - Mani
> > > >
> > > >
> > > > --
> > > > மணிவண்ணன் சதாசிவம்
> >
--
மணிவண்ணன் சதாசிவம்
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-07-21 14:54 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-19 16:41 [PATCH v3 1/2] PCI: dwc: Implement general suspend/resume functionality for L2/L3 transitions Frank Li
2023-04-19 16:41 ` Frank Li
2023-04-19 16:41 ` [PATCH v3 2/2] PCI: layerscape: Add power management support for ls1028a Frank Li
2023-04-19 16:41 ` Frank Li
2023-05-12 14:47 ` [PATCH v3 1/2] PCI: dwc: Implement general suspend/resume functionality for L2/L3 transitions Frank Li
2023-06-12 16:16 ` Frank Li
2023-06-12 16:16 ` Frank Li
2023-07-17 14:05 ` Frank Li
2023-07-17 14:05 ` Frank Li
2023-07-17 16:45 ` Manivannan Sadhasivam
2023-07-17 16:45 ` Manivannan Sadhasivam
2023-07-17 18:36 ` Frank Li
2023-07-17 18:36 ` Frank Li
2023-07-18 10:04 ` Manivannan Sadhasivam
2023-07-18 10:04 ` Manivannan Sadhasivam
2023-07-19 19:16 ` Frank Li
2023-07-19 19:16 ` Frank Li
2023-07-20 14:20 ` Manivannan Sadhasivam
2023-07-20 14:20 ` Manivannan Sadhasivam
2023-07-20 14:25 ` Manivannan Sadhasivam
2023-07-20 14:25 ` Manivannan Sadhasivam
2023-07-20 14:37 ` Frank Li
2023-07-20 14:37 ` Frank Li
2023-07-20 16:07 ` Manivannan Sadhasivam
2023-07-20 16:07 ` Manivannan Sadhasivam
2023-07-20 16:20 ` Bjorn Helgaas
2023-07-20 16:20 ` Bjorn Helgaas
2023-07-20 16:27 ` Manivannan Sadhasivam
2023-07-20 16:27 ` Manivannan Sadhasivam
2023-07-20 18:35 ` Bjorn Helgaas
2023-07-20 18:35 ` Bjorn Helgaas
2023-07-20 16:26 ` Frank Li
2023-07-20 16:26 ` Frank Li
2023-07-20 16:43 ` Manivannan Sadhasivam
2023-07-20 16:43 ` Manivannan Sadhasivam
2023-07-20 16:59 ` Frank Li
2023-07-20 16:59 ` Frank Li
2023-07-21 2:09 ` Shawn Lin
2023-07-21 2:09 ` Shawn Lin
2023-07-21 14:10 ` Frank Li
2023-07-21 14:10 ` Frank Li
2023-07-21 16:07 ` Manivannan Sadhasivam
2023-07-21 16:07 ` Manivannan Sadhasivam
2023-07-21 16:21 ` Frank Li
2023-07-21 16:21 ` Frank Li
2023-07-21 14:54 ` Manivannan Sadhasivam [this message]
2023-07-21 14:54 ` Manivannan Sadhasivam
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=20230721145422.GC2536@thinkpad \
--to=mani@kernel.org \
--cc=Frank.li@nxp.com \
--cc=bhelgaas@google.com \
--cc=devicetree@vger.kernel.org \
--cc=gustavo.pimentel@synopsys.com \
--cc=helgaas@kernel.org \
--cc=imx@lists.linux.dev \
--cc=kw@linux.com \
--cc=leoyang.li@nxp.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-imx@nxp.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=lorenzo.pieralisi@arm.com \
--cc=manivannan.sadhasivam@linaro.org \
--cc=minghuan.lian@nxp.com \
--cc=mingkai.hu@nxp.com \
--cc=robh+dt@kernel.org \
--cc=roy.zang@nxp.com \
--cc=shawn.lin@rock-chips.com \
--cc=shawnguo@kernel.org \
--cc=zhiqiang.hou@nxp.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.