| From: Bjorn Helgaas <bhelgaas@google.com> |
| Date: Wed, 30 May 2018 14:06:42 -0500 |
| Subject: PCI: shpchp: Fix AMD POGO identification |
| |
| commit bed4e9cfab93a0f3d0144cb919820e6d5c40b8b1 upstream. |
| |
| The fix for an AMD POGO erratum related to SHPC incorrectly identified the |
| device. The workaround should be applied only for AMD POGO devices, but it |
| was instead applied to: |
| |
| - all AMD bridges, and |
| - all devices from any vendor with device ID 0x7458 |
| |
| Fixes: 53044f357448 ("[PATCH] PCI Hotplug: shpchp: AMD POGO errata fix") |
| Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> |
| Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com> |
| Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| [bwh: Backported to 3.16: adjust context] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/pci/hotplug/shpchp_ctrl.c | 8 ++++---- |
| 1 file changed, 4 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/pci/hotplug/shpchp_ctrl.c |
| +++ b/drivers/pci/hotplug/shpchp_ctrl.c |
| @@ -595,13 +595,13 @@ static int shpchp_enable_slot (struct sl |
| ctrl_dbg(ctrl, "%s: p_slot->pwr_save %x\n", __func__, p_slot->pwr_save); |
| p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); |
| |
| - if(((p_slot->ctrl->pci_dev->vendor == PCI_VENDOR_ID_AMD) || |
| - (p_slot->ctrl->pci_dev->device == PCI_DEVICE_ID_AMD_POGO_7458)) |
| + if ((p_slot->ctrl->pci_dev->vendor == PCI_VENDOR_ID_AMD && |
| + p_slot->ctrl->pci_dev->device == PCI_DEVICE_ID_AMD_POGO_7458) |
| && p_slot->ctrl->num_slots == 1) { |
| - /* handle amd pogo errata; this must be done before enable */ |
| + /* handle AMD POGO errata; this must be done before enable */ |
| amd_pogo_errata_save_misc_reg(p_slot); |
| retval = board_added(p_slot); |
| - /* handle amd pogo errata; this must be done after enable */ |
| + /* handle AMD POGO errata; this must be done after enable */ |
| amd_pogo_errata_restore_misc_reg(p_slot); |
| } else |
| retval = board_added(p_slot); |