aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLyude Paul <[email protected]>2019-08-01 18:01:17 -0400
committerBjorn Helgaas <[email protected]>2019-08-15 11:59:49 -0500
commitad54567ad5d8e938ee6cf02e4f3867f18835ae6e (patch)
tree563937840c9afd65fb27063f9146fe18b9feaf2b
parent5f9e832c137075045d15cd6899ab0505cfb2ca4b (diff)
PCI: Reset both NVIDIA GPU and HDA in ThinkPad P50 workaround
quirk_reset_lenovo_thinkpad_50_nvgpu() resets NVIDIA GPUs to work around an apparent BIOS defect. It previously used pci_reset_function(), and the available method was a bus reset, which was fine because there was only one function on the bus. After b516ea586d71 ("PCI: Enable NVIDIA HDA controllers"), there are now two functions (the HDA controller and the GPU itself) on the bus, so the reset fails. Use pci_reset_bus() explicitly instead of pci_reset_function() since it's OK to reset both devices. [bhelgaas: commit log, add e0547c81bfcf] Fixes: b516ea586d71 ("PCI: Enable NVIDIA HDA controllers") Fixes: e0547c81bfcf ("PCI: Reset Lenovo ThinkPad P50 nvgpu at boot if necessary") Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Lyude Paul <[email protected]> Signed-off-by: Bjorn Helgaas <[email protected]> Acked-by: Ben Skeggs <[email protected]> Cc: Lukas Wunner <[email protected]> Cc: Daniel Drake <[email protected]> Cc: Aaron Plattner <[email protected]> Cc: Peter Wu <[email protected]> Cc: Ilia Mirkin <[email protected]> Cc: Karol Herbst <[email protected]> Cc: Maik Freudenberg <[email protected]>
-rw-r--r--drivers/pci/quirks.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index 208aacf39329..44c4ae1abd00 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -5256,7 +5256,7 @@ static void quirk_reset_lenovo_thinkpad_p50_nvgpu(struct pci_dev *pdev)
*/
if (ioread32(map + 0x2240c) & 0x2) {
pci_info(pdev, FW_BUG "GPU left initialized by EFI, resetting\n");
- ret = pci_reset_function(pdev);
+ ret = pci_reset_bus(pdev);
if (ret < 0)
pci_err(pdev, "Failed to reset GPU: %d\n", ret);
}