PCI/DPC: Disable ERR_NONFATAL handling by DPC
authorOza Pawandeep <poza@codeaurora.org>
Thu, 17 May 2018 21:44:18 +0000 (16:44 -0500)
committerBjorn Helgaas <bhelgaas@google.com>
Sun, 3 Jun 2018 00:29:25 +0000 (19:29 -0500)
commit6927868e7ae929f037eea973c582b870808880b6
tree721399b304db004b3fcd94c6f0aabfe46674d941
parente76d596aef0caa7296e42e29a0a81bc4155807df
PCI/DPC: Disable ERR_NONFATAL handling by DPC

PCIe ERR_NONFATAL errors mean a particular transaction is unreliable but
the Link is otherwise fully functional (PCIe r4.0, sec 6.2.2).

The AER driver handles these by logging the error details and calling
driver-supplied pci_error_handlers callbacks.  It does not reset downstream
devices, does not remove them from the PCI subsystem, does not re-enumerate
them, and does not call their driver .remove() or .probe() methods.

But DPC driver previously enabled DPC on ERR_NONFATAL, so if the hardware
supports DPC, these errors caused a Link reset (performed automatically by
the hardware), followed by the DPC driver removing affected devices (which
calls their .remove() methods), bringing the Link back up, and
re-enumerating (which calls driver .probe() methods).

Disable ERR_NONFATAL DPC triggering so these errors will only be handled by
AER.  This means drivers won't have to deal with different usage of their
pci_error_handlers callbacks and .probe() and .remove() methods based on
whether the platform has DPC support.

Signed-off-by: Oza Pawandeep <poza@codeaurora.org>
[bhelgaas: changelog]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/pcie/dpc.c
include/uapi/linux/pci_regs.h