[Nouveau] [PATCH] PCI: add prefetch quirk to work around Asus/Nvidia suspend issues
Daniel Drake
drake at endlessm.com
Thu Sep 6 09:02:39 UTC 2018
On Sat, Sep 1, 2018 at 3:12 AM, Bjorn Helgaas <helgaas at kernel.org> wrote:
> Can we tell whether Windows rewrites this register unconditionally at
> resume-time? If so, it may be more robust for Linux to do the same.
> The whole thing is black magic, which I hate, but if it's our only
> choice, it may be better to have this applied everywhere so we don't
> keep stubbing our toes on new systems that require the quirk.
Checked this with qemu adding a PCI-to-PCI bridge (ioh3420).
$ qemu-system-x86_64 -enable-kvm -M q35,accel=kvm -m 2G -vga qxl -cpu
host -hda testimg.img -device
ioh3420,id=rp1,bus=pcie.0,addr=1c.0,port=1 -trace events=events.txt
events.txt has:
pci_cfg_read
pci_cfg_write
Logged cfg space accesses during boot:
https://gist.github.com/dsd/135fb255cb2b237567d8ea2d6bfc6917#file-boot-txt
Suspend:
https://gist.github.com/dsd/135fb255cb2b237567d8ea2d6bfc6917#file-suspend-txt
Resume:
https://gist.github.com/dsd/135fb255cb2b237567d8ea2d6bfc6917#file-resume-txt
Notably during resume, the prefetch-related registers get rewritten:
pci_cfg_write ioh3420 28:0 @0x24 <- 0xfeb0fea0
pci_cfg_write ioh3420 28:0 @0x28 <- 0x0
pci_cfg_write ioh3420 28:0 @0x2c <- 0x0
This happened even though there was nothing behind the bridge.
Windows failed to resume in this test (black screen) but the traced
register writes seem indicative enough.
Peter Wu confirms the same results in a similar experiment:
https://marc.info/?l=linux-pci&m=153616336225386&w=2
I'll look into creating a new patch that unconditionally reprograms
the PCI bridge prefetch stuff on resume.
Thanks
Daniel
More information about the Nouveau
mailing list