diff options
| author | Bjorn Helgaas <bhelgaas@google.com> | 2014-09-15 15:18:36 -0400 |
|---|---|---|
| committer | Bjorn Helgaas <bhelgaas@google.com> | 2014-09-15 15:18:36 -0400 |
| commit | 6de8eee17a324a4fd8d1a4588a18e976b68f330c (patch) | |
| tree | 153ab542d89e5905badb062d106b7739de5852d2 /drivers/gpu | |
| parent | fd7155fc9fca6464a5aa668965a3741b963f805f (diff) | |
| parent | f91ce35e471ae17552ce7bfe355cfd997e3ad781 (diff) | |
Merge branch 'pci/hotplug-vga' into for-linus
* pci/hotplug-vga:
ACPIPHP / radeon / nouveau: Remove acpi_bus_no_hotplug()
PCI: Add pci_ignore_hotplug() to ignore hotplug events for a device
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_acpi.c | 16 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_drm.c | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_atpx_handler.c | 16 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_drv.c | 1 |
4 files changed, 6 insertions, 28 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_acpi.c b/drivers/gpu/drm/nouveau/nouveau_acpi.c index 279206997e5c..622424692b3b 100644 --- a/drivers/gpu/drm/nouveau/nouveau_acpi.c +++ b/drivers/gpu/drm/nouveau/nouveau_acpi.c | |||
| @@ -46,7 +46,6 @@ static struct nouveau_dsm_priv { | |||
| 46 | bool dsm_detected; | 46 | bool dsm_detected; |
| 47 | bool optimus_detected; | 47 | bool optimus_detected; |
| 48 | acpi_handle dhandle; | 48 | acpi_handle dhandle; |
| 49 | acpi_handle other_handle; | ||
| 50 | acpi_handle rom_handle; | 49 | acpi_handle rom_handle; |
| 51 | } nouveau_dsm_priv; | 50 | } nouveau_dsm_priv; |
| 52 | 51 | ||
| @@ -222,10 +221,9 @@ static int nouveau_dsm_pci_probe(struct pci_dev *pdev) | |||
| 222 | if (!dhandle) | 221 | if (!dhandle) |
| 223 | return false; | 222 | return false; |
| 224 | 223 | ||
| 225 | if (!acpi_has_method(dhandle, "_DSM")) { | 224 | if (!acpi_has_method(dhandle, "_DSM")) |
| 226 | nouveau_dsm_priv.other_handle = dhandle; | ||
| 227 | return false; | 225 | return false; |
| 228 | } | 226 | |
| 229 | if (acpi_check_dsm(dhandle, nouveau_dsm_muid, 0x00000102, | 227 | if (acpi_check_dsm(dhandle, nouveau_dsm_muid, 0x00000102, |
| 230 | 1 << NOUVEAU_DSM_POWER)) | 228 | 1 << NOUVEAU_DSM_POWER)) |
| 231 | retval |= NOUVEAU_DSM_HAS_MUX; | 229 | retval |= NOUVEAU_DSM_HAS_MUX; |
| @@ -301,16 +299,6 @@ static bool nouveau_dsm_detect(void) | |||
| 301 | printk(KERN_INFO "VGA switcheroo: detected DSM switching method %s handle\n", | 299 | printk(KERN_INFO "VGA switcheroo: detected DSM switching method %s handle\n", |
| 302 | acpi_method_name); | 300 | acpi_method_name); |
| 303 | nouveau_dsm_priv.dsm_detected = true; | 301 | nouveau_dsm_priv.dsm_detected = true; |
| 304 | /* | ||
| 305 | * On some systems hotplug events are generated for the device | ||
| 306 | * being switched off when _DSM is executed. They cause ACPI | ||
| 307 | * hotplug to trigger and attempt to remove the device from | ||
| 308 | * the system, which causes it to break down. Prevent that from | ||
| 309 | * happening by setting the no_hotplug flag for the involved | ||
| 310 | * ACPI device objects. | ||
| 311 | */ | ||
| 312 | acpi_bus_no_hotplug(nouveau_dsm_priv.dhandle); | ||
| 313 | acpi_bus_no_hotplug(nouveau_dsm_priv.other_handle); | ||
| 314 | ret = true; | 302 | ret = true; |
| 315 | } | 303 | } |
| 316 | 304 | ||
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c index 250a5e88c751..9c3af96a7153 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c | |||
| @@ -627,6 +627,7 @@ int nouveau_pmops_suspend(struct device *dev) | |||
| 627 | 627 | ||
| 628 | pci_save_state(pdev); | 628 | pci_save_state(pdev); |
| 629 | pci_disable_device(pdev); | 629 | pci_disable_device(pdev); |
| 630 | pci_ignore_hotplug(pdev); | ||
| 630 | pci_set_power_state(pdev, PCI_D3hot); | 631 | pci_set_power_state(pdev, PCI_D3hot); |
| 631 | return 0; | 632 | return 0; |
| 632 | } | 633 | } |
diff --git a/drivers/gpu/drm/radeon/radeon_atpx_handler.c b/drivers/gpu/drm/radeon/radeon_atpx_handler.c index a9fb0d016d38..8bc7d0bbd3c8 100644 --- a/drivers/gpu/drm/radeon/radeon_atpx_handler.c +++ b/drivers/gpu/drm/radeon/radeon_atpx_handler.c | |||
| @@ -33,7 +33,6 @@ static struct radeon_atpx_priv { | |||
| 33 | bool atpx_detected; | 33 | bool atpx_detected; |
| 34 | /* handle for device - and atpx */ | 34 | /* handle for device - and atpx */ |
| 35 | acpi_handle dhandle; | 35 | acpi_handle dhandle; |
| 36 | acpi_handle other_handle; | ||
| 37 | struct radeon_atpx atpx; | 36 | struct radeon_atpx atpx; |
| 38 | } radeon_atpx_priv; | 37 | } radeon_atpx_priv; |
| 39 | 38 | ||
| @@ -453,10 +452,9 @@ static bool radeon_atpx_pci_probe_handle(struct pci_dev *pdev) | |||
| 453 | return false; | 452 | return false; |
| 454 | 453 | ||
| 455 | status = acpi_get_handle(dhandle, "ATPX", &atpx_handle); | 454 | status = acpi_get_handle(dhandle, "ATPX", &atpx_handle); |
| 456 | if (ACPI_FAILURE(status)) { | 455 | if (ACPI_FAILURE(status)) |
| 457 | radeon_atpx_priv.other_handle = dhandle; | ||
| 458 | return false; | 456 | return false; |
| 459 | } | 457 | |
| 460 | radeon_atpx_priv.dhandle = dhandle; | 458 | radeon_atpx_priv.dhandle = dhandle; |
| 461 | radeon_atpx_priv.atpx.handle = atpx_handle; | 459 | radeon_atpx_priv.atpx.handle = atpx_handle; |
| 462 | return true; | 460 | return true; |
| @@ -540,16 +538,6 @@ static bool radeon_atpx_detect(void) | |||
| 540 | printk(KERN_INFO "VGA switcheroo: detected switching method %s handle\n", | 538 | printk(KERN_INFO "VGA switcheroo: detected switching method %s handle\n", |
| 541 | acpi_method_name); | 539 | acpi_method_name); |
| 542 | radeon_atpx_priv.atpx_detected = true; | 540 | radeon_atpx_priv.atpx_detected = true; |
| 543 | /* | ||
| 544 | * On some systems hotplug events are generated for the device | ||
| 545 | * being switched off when ATPX is executed. They cause ACPI | ||
| 546 | * hotplug to trigger and attempt to remove the device from | ||
| 547 | * the system, which causes it to break down. Prevent that from | ||
| 548 | * happening by setting the no_hotplug flag for the involved | ||
| 549 | * ACPI device objects. | ||
| 550 | */ | ||
| 551 | acpi_bus_no_hotplug(radeon_atpx_priv.dhandle); | ||
| 552 | acpi_bus_no_hotplug(radeon_atpx_priv.other_handle); | ||
| 553 | return true; | 541 | return true; |
| 554 | } | 542 | } |
| 555 | return false; | 543 | return false; |
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c index 8df888908833..abbd87adfd75 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.c +++ b/drivers/gpu/drm/radeon/radeon_drv.c | |||
| @@ -440,6 +440,7 @@ static int radeon_pmops_runtime_suspend(struct device *dev) | |||
| 440 | ret = radeon_suspend_kms(drm_dev, false, false); | 440 | ret = radeon_suspend_kms(drm_dev, false, false); |
| 441 | pci_save_state(pdev); | 441 | pci_save_state(pdev); |
| 442 | pci_disable_device(pdev); | 442 | pci_disable_device(pdev); |
| 443 | pci_ignore_hotplug(pdev); | ||
| 443 | pci_set_power_state(pdev, PCI_D3cold); | 444 | pci_set_power_state(pdev, PCI_D3cold); |
| 444 | drm_dev->switch_power_state = DRM_SWITCH_POWER_DYNAMIC_OFF; | 445 | drm_dev->switch_power_state = DRM_SWITCH_POWER_DYNAMIC_OFF; |
| 445 | 446 | ||
