Backmerge tag 'v4.9-rc8' into drm-next
Linux 4.9-rc8 Daniel requested this so we could apply some follow on fixes cleanly to -next.
This commit is contained in:
@@ -34,6 +34,7 @@ struct radeon_atpx {
|
||||
|
||||
static struct radeon_atpx_priv {
|
||||
bool atpx_detected;
|
||||
bool bridge_pm_usable;
|
||||
/* handle for device - and atpx */
|
||||
acpi_handle dhandle;
|
||||
struct radeon_atpx atpx;
|
||||
@@ -203,7 +204,11 @@ static int radeon_atpx_validate(struct radeon_atpx *atpx)
|
||||
atpx->is_hybrid = false;
|
||||
if (valid_bits & ATPX_MS_HYBRID_GFX_SUPPORTED) {
|
||||
printk("ATPX Hybrid Graphics\n");
|
||||
atpx->functions.power_cntl = false;
|
||||
/*
|
||||
* Disable legacy PM methods only when pcie port PM is usable,
|
||||
* otherwise the device might fail to power off or power on.
|
||||
*/
|
||||
atpx->functions.power_cntl = !radeon_atpx_priv.bridge_pm_usable;
|
||||
atpx->is_hybrid = true;
|
||||
}
|
||||
|
||||
@@ -548,11 +553,16 @@ static bool radeon_atpx_detect(void)
|
||||
struct pci_dev *pdev = NULL;
|
||||
bool has_atpx = false;
|
||||
int vga_count = 0;
|
||||
bool d3_supported = false;
|
||||
struct pci_dev *parent_pdev;
|
||||
|
||||
while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, pdev)) != NULL) {
|
||||
vga_count++;
|
||||
|
||||
has_atpx |= (radeon_atpx_pci_probe_handle(pdev) == true);
|
||||
|
||||
parent_pdev = pci_upstream_bridge(pdev);
|
||||
d3_supported |= parent_pdev && parent_pdev->bridge_d3;
|
||||
}
|
||||
|
||||
/* some newer PX laptops mark the dGPU as a non-VGA display device */
|
||||
@@ -560,6 +570,9 @@ static bool radeon_atpx_detect(void)
|
||||
vga_count++;
|
||||
|
||||
has_atpx |= (radeon_atpx_pci_probe_handle(pdev) == true);
|
||||
|
||||
parent_pdev = pci_upstream_bridge(pdev);
|
||||
d3_supported |= parent_pdev && parent_pdev->bridge_d3;
|
||||
}
|
||||
|
||||
if (has_atpx && vga_count == 2) {
|
||||
@@ -567,6 +580,7 @@ static bool radeon_atpx_detect(void)
|
||||
printk(KERN_INFO "vga_switcheroo: detected switching method %s handle\n",
|
||||
acpi_method_name);
|
||||
radeon_atpx_priv.atpx_detected = true;
|
||||
radeon_atpx_priv.bridge_pm_usable = d3_supported;
|
||||
radeon_atpx_init();
|
||||
return true;
|
||||
}
|
||||
|
Reference in New Issue
Block a user