PCI/DPC: Process RP PIO details only if RP PIO extensions supported
authorBjorn Helgaas <bhelgaas@google.com>
Fri, 26 Jan 2018 13:45:18 +0000 (07:45 -0600)
committerBjorn Helgaas <helgaas@kernel.org>
Tue, 30 Jan 2018 21:25:39 +0000 (15:25 -0600)
commite68d281ceeba26c0fb4c8fe2becf24af5b634a7a
tree073ea044b846dc9c3cb1dec6931b5ddd7fd3dd68
parente3c44b8ddc2349b48950b3b15c3b9d74655356c7
PCI/DPC: Process RP PIO details only if RP PIO extensions supported

The RP PIO registers (status, mask, severity, etc) are only implemented if
the "RP Extensions for DPC" bit is set in the DPC Capabilities register.

Previously we called dpc_process_rp_pio_error(), which reads and decodes
those RP PIO registers, whenever the DPC Status register indicated an "RP
PIO error" (Trigger Reason == 3 and Trigger Reason Extension == 0).

It does seem reasonable to assume that DPC Status would only indicate an RP
PIO error if the RP extensions are supported, but PCIe r4.0, sec 7.9.15.4,
is actually not explicit about that: it does not say "Trigger Reason
Extension == 0 is valid only for Root Ports that support RP Extensions for
DPC."

Check whether the RP Extensions for DPC are supported before trying to read
the RP PIO registers.

Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Keith Busch <keith.busch@intel.com>
Reviewed-by: Sinan Kaya <okaya@codeaurora.org>
drivers/pci/pcie/pcie-dpc.c