public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Bjorn Helgaas <helgaas@kernel.org>
To: Vidya Sagar <vidyas@nvidia.com>
Cc: "Kenneth R. Crudup" <kenny@panix.com>,
	bhelgaas@google.com, lorenzo.pieralisi@arm.com,
	hkallweit1@gmail.com, wangxiongfeng2@huawei.com,
	mika.westerberg@linux.intel.com, kai.heng.feng@canonical.com,
	chris.packham@alliedtelesis.co.nz, yangyicong@hisilicon.com,
	treding@nvidia.com, jonathanh@nvidia.com, abhsahu@nvidia.com,
	sagupta@nvidia.com, linux-pci@vger.kernel.org,
	linux-kernel@vger.kernel.org, kthota@nvidia.com,
	mmaddireddy@nvidia.com, sagar.tv@gmail.com,
	Ricky Wu <ricky_wu@realtek.com>, Rajat Jain <rajatja@google.com>,
	Prasad Malisetty <quic_pmaliset@quicinc.com>,
	Victor Ding <victording@google.com>
Subject: Re: [PATCH V1] PCI/ASPM: Save/restore L1SS Capability for suspend/resume
Date: Tue, 12 Apr 2022 17:50:47 -0500	[thread overview]
Message-ID: <20220412225047.GA627910@bhelgaas> (raw)
In-Reply-To: <0d8cc8c0-31a1-0290-5aa5-0c7b16db1edb@nvidia.com>

[+cc Ricky for rtsx_pci ASPM behavior, Rajat, Prasad for L1 SS stuff,
Victor for interest in disabling ASPM during save/restore]

On Wed, Feb 16, 2022 at 06:41:39PM +0530, Vidya Sagar wrote:
> On 2/16/2022 11:30 AM, Kenneth R. Crudup wrote:
> > On Wed, 16 Feb 2022, Vidya Sagar wrote:
> > 
> > > I see that the ASPM-L1 state of Realtek NIC which was in
> > > disabled state before hibernate got enabled after hibernate.
> > 
> > That's actually my SD-Card reader; there's a good chance the BIOS
> > does "something" to it at boot time, as it's possible to boot from
> > SD-Card on my laptop.
> > 
> > > This patch doesn't do anything to LnkCtl register which has
> > > control for ASPM L1 state.
> > 
> > > Could you please check why ASPM L1 got enabled post hibernation?
> > 
> > I wouldn't know how to do that; if you're still interested in that
> > let me know what to do to determine that.

> I would like Bjorn to take a call on it.
> At this point, there are contradictions in observations.

Remind me what contradictions you see?  I know Kenny saw NVMe errors
on a kernel that included 4257f7e008ea ("PCI/ASPM: Save/restore L1SS
Capability for suspend/resume") in December 2020 [1], and that he did
*not* see those errors on 4257f7e008ea in February 2022 [2].  Is that
what you mean?

> Just to summarize,
> - The root ports in your laptop don't have support for L1SS
> - With the same old code base with which the errors were observed plus my
> patch on top of it, I see that ASPM-L1 state getting enabled for one of the
> endpoints (Realtek SD-Card reader) after system comes out of hibernation
> even though ASPM-L1 was disabled before the system enter into hibernation.
> No errors are reported now.

I assume you refer to [2], where on 4257f7e008ea ("PCI/ASPM:
Save/restore L1SS Capability for suspend/resume"), Kenny saw ASPM L1
disabled before hibernate and enabled afterwards:

  --- pre-hibernate
  +++ post-hibernate
    00:1d.7 PCI bridge [0604]: Intel [8086:34b7]
      Bus: primary=00, secondary=58, subordinate=58
	LnkCtl: ASPM Disabled; RCB 64 bytes, Disabled- CommClk+
    58:00.0 RTS525A PCI Express Card Reader [10ec:525a]
  -     LnkCtl: ASPM Disabled; RCB 64 bytes, Disabled- CommClk-
  -             ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
  +     LnkCtl: ASPM L1 Enabled; RCB 64 bytes, Disabled- CommClk-
  +             ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-

Per PCIe r6.0, sec 7.5.3.7, "ASPM L1 must be enabled by software in
the Upstream component on a Link prior to enabling ASPM L1 in the
Downstream component on that Link," so this definitely seems broken,
but wouldn't explain the NVMe issue.

The PCI core (pcie_config_aspm_link()) always enables L1 in the
upstream component before the downstream one, but 58:00.0 uses the
rtsx_pci driver, which does a lot of its own ASPM fiddling, so my
guess is that it's doing something wrong here.

> - With the linux-next top of the tree plus my patch, no change in the ASPM
> states and no errors also reported.

I don't know which report this refers to.

> This points to BIOS being buggy (both old and new with new one being less
> problematic)

I agree that a BIOS change between [1] and [2] seems plausible, but I
don't think we can prove that yet.  I'm slightly queasy because while
Kenny may have updated his BIOS, most people will not have.

I think we should try this patch again with some changes and maybe
some debug logging:

  - I wonder if we should integrate the LTR, L1 SS, and Link Control
    ASPM restore instead of having them spread around through
    pci_restore_ltr_state(), pci_restore_aspm_l1ss_state(), and
    pci_restore_pcie_state().  Maybe a new pci_restore_aspm() that
    would be called from pci_restore_pcie_state()?

  - For L1 PM Substates configuration, sec 5.5.4 says that both ports
    must be configured while ASPM L1 is disabled, but I don't think we
    currently guarantee this: we restore all the upstream component
    state first, and we don't know the ASPM state of the downstream
    one.  Maybe we need to:

      * When restoring upstream component,
          + disable its ASPM

      * When restoring downstream component,
          + disable its ASPM
	  + restore upstream component's LTR, L1SS
	  + restore downstream component's LTR, L1SS
	  + restore upstream component's ASPM
	  + restore downstream component's ASPM

      This seems pretty messy, but seems like what the spec requires.

    - Add some pci_dbg() logging of all these save/restore values to
      help debug any issues.

Bjorn

[1] https://lore.kernel.org/r/20201228040513.GA611645@bjorn-Precision-5520
[2] https://lore.kernel.org/r/3ca14a7-b726-8430-fe61-a3ac183a1088@panix.com

  reply	other threads:[~2022-04-12 23:21 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-01 12:35 [PATCH V1] PCI/ASPM: Save/restore L1SS Capability for suspend/resume Vidya Sagar
2022-02-01 13:54 ` Kenneth R. Crudup
2022-02-01 18:53 ` Kenneth R. Crudup
2022-02-01 19:03   ` Kenneth R. Crudup
2022-02-01 19:05   ` Kenneth R. Crudup
2022-02-01 19:10   ` Kenneth R. Crudup
2022-02-01 19:24   ` Vidya Sagar
2022-02-01 22:25     ` Kenneth R. Crudup
2022-02-02  4:17       ` Vidya Sagar
2022-02-04  1:18         ` Kenneth R. Crudup
2022-02-04  5:37           ` Vidya Sagar
2022-02-04 23:02         ` Bjorn Helgaas
2022-02-04 23:17           ` Kenneth R. Crudup
2022-02-05 16:44             ` Vidya Sagar
2022-02-05 17:30               ` Kenneth R. Crudup
2022-02-05 17:32                 ` Kenneth R. Crudup
2022-02-05 17:33                 ` Kenneth R. Crudup
2022-02-07 16:33                 ` Bjorn Helgaas
2022-02-07 18:20                   ` Kenneth R. Crudup
2022-02-15 13:10                     ` Kenneth R. Crudup
2022-02-16  4:40                       ` Vidya Sagar
2022-02-16  6:00                         ` Kenneth R. Crudup
2022-02-16 13:11                           ` Vidya Sagar
2022-04-12 22:50                             ` Bjorn Helgaas [this message]
2022-04-13  0:19                               ` Kai-Heng Feng
2022-04-14 16:41                                 ` Bjorn Helgaas
2022-04-15 14:26                                   ` Kai-Heng Feng
2022-04-15 21:25                                     ` Bjorn Helgaas
2022-04-21  6:16                                       ` Kai-Heng Feng
2022-04-21 20:36                                         ` Bjorn Helgaas
2022-04-21 20:40                                         ` Kenneth R. Crudup
2022-04-21 21:11                                           ` Bjorn Helgaas
2022-04-21 21:21                                             ` Kenneth R. Crudup
2022-04-13 13:26                               ` Bjorn Helgaas
2022-11-23 21:44                               ` Matthias Kaehlcke
2022-11-23 22:01                                 ` Kenneth R. Crudup
2022-11-24  0:07                                   ` Matthias Kaehlcke
2022-02-15 13:12                     ` Kenneth R. Crudup
2022-02-04 11:23 ` Abhishek Sahu

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=20220412225047.GA627910@bhelgaas \
    --to=helgaas@kernel.org \
    --cc=abhsahu@nvidia.com \
    --cc=bhelgaas@google.com \
    --cc=chris.packham@alliedtelesis.co.nz \
    --cc=hkallweit1@gmail.com \
    --cc=jonathanh@nvidia.com \
    --cc=kai.heng.feng@canonical.com \
    --cc=kenny@panix.com \
    --cc=kthota@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=lorenzo.pieralisi@arm.com \
    --cc=mika.westerberg@linux.intel.com \
    --cc=mmaddireddy@nvidia.com \
    --cc=quic_pmaliset@quicinc.com \
    --cc=rajatja@google.com \
    --cc=ricky_wu@realtek.com \
    --cc=sagar.tv@gmail.com \
    --cc=sagupta@nvidia.com \
    --cc=treding@nvidia.com \
    --cc=victording@google.com \
    --cc=vidyas@nvidia.com \
    --cc=wangxiongfeng2@huawei.com \
    --cc=yangyicong@hisilicon.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox