diff options
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_device.c | 11 | ||||
-rw-r--r-- | drivers/pci/quirks.c | 13 |
2 files changed, 13 insertions, 11 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c index 6ecf42783d4b..aecaafbc8417 100644 --- a/drivers/gpu/drm/radeon/radeon_device.c +++ b/drivers/gpu/drm/radeon/radeon_device.c | |||
@@ -113,7 +113,6 @@ static inline bool radeon_is_atpx_hybrid(void) { return false; } | |||
113 | #endif | 113 | #endif |
114 | 114 | ||
115 | #define RADEON_PX_QUIRK_DISABLE_PX (1 << 0) | 115 | #define RADEON_PX_QUIRK_DISABLE_PX (1 << 0) |
116 | #define RADEON_PX_QUIRK_LONG_WAKEUP (1 << 1) | ||
117 | 116 | ||
118 | struct radeon_px_quirk { | 117 | struct radeon_px_quirk { |
119 | u32 chip_vendor; | 118 | u32 chip_vendor; |
@@ -136,8 +135,6 @@ static struct radeon_px_quirk radeon_px_quirk_list[] = { | |||
136 | * https://bugzilla.kernel.org/show_bug.cgi?id=51381 | 135 | * https://bugzilla.kernel.org/show_bug.cgi?id=51381 |
137 | */ | 136 | */ |
138 | { PCI_VENDOR_ID_ATI, 0x6840, 0x1043, 0x2122, RADEON_PX_QUIRK_DISABLE_PX }, | 137 | { PCI_VENDOR_ID_ATI, 0x6840, 0x1043, 0x2122, RADEON_PX_QUIRK_DISABLE_PX }, |
139 | /* macbook pro 8.2 */ | ||
140 | { PCI_VENDOR_ID_ATI, 0x6741, PCI_VENDOR_ID_APPLE, 0x00e2, RADEON_PX_QUIRK_LONG_WAKEUP }, | ||
141 | { 0, 0, 0, 0, 0 }, | 138 | { 0, 0, 0, 0, 0 }, |
142 | }; | 139 | }; |
143 | 140 | ||
@@ -1241,25 +1238,17 @@ static void radeon_check_arguments(struct radeon_device *rdev) | |||
1241 | static void radeon_switcheroo_set_state(struct pci_dev *pdev, enum vga_switcheroo_state state) | 1238 | static void radeon_switcheroo_set_state(struct pci_dev *pdev, enum vga_switcheroo_state state) |
1242 | { | 1239 | { |
1243 | struct drm_device *dev = pci_get_drvdata(pdev); | 1240 | struct drm_device *dev = pci_get_drvdata(pdev); |
1244 | struct radeon_device *rdev = dev->dev_private; | ||
1245 | 1241 | ||
1246 | if (radeon_is_px(dev) && state == VGA_SWITCHEROO_OFF) | 1242 | if (radeon_is_px(dev) && state == VGA_SWITCHEROO_OFF) |
1247 | return; | 1243 | return; |
1248 | 1244 | ||
1249 | if (state == VGA_SWITCHEROO_ON) { | 1245 | if (state == VGA_SWITCHEROO_ON) { |
1250 | unsigned d3_delay = dev->pdev->d3_delay; | ||
1251 | |||
1252 | pr_info("radeon: switched on\n"); | 1246 | pr_info("radeon: switched on\n"); |
1253 | /* don't suspend or resume card normally */ | 1247 | /* don't suspend or resume card normally */ |
1254 | dev->switch_power_state = DRM_SWITCH_POWER_CHANGING; | 1248 | dev->switch_power_state = DRM_SWITCH_POWER_CHANGING; |
1255 | 1249 | ||
1256 | if (d3_delay < 20 && (rdev->px_quirk_flags & RADEON_PX_QUIRK_LONG_WAKEUP)) | ||
1257 | dev->pdev->d3_delay = 20; | ||
1258 | |||
1259 | radeon_resume_kms(dev, true, true); | 1250 | radeon_resume_kms(dev, true, true); |
1260 | 1251 | ||
1261 | dev->pdev->d3_delay = d3_delay; | ||
1262 | |||
1263 | dev->switch_power_state = DRM_SWITCH_POWER_ON; | 1252 | dev->switch_power_state = DRM_SWITCH_POWER_ON; |
1264 | drm_kms_helper_poll_enable(dev); | 1253 | drm_kms_helper_poll_enable(dev); |
1265 | } else { | 1254 | } else { |
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c index 085fb787aa9e..d16d2f6546cf 100644 --- a/drivers/pci/quirks.c +++ b/drivers/pci/quirks.c | |||
@@ -1684,6 +1684,19 @@ DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x2609, quirk_intel_pcie_pm); | |||
1684 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x260a, quirk_intel_pcie_pm); | 1684 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x260a, quirk_intel_pcie_pm); |
1685 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x260b, quirk_intel_pcie_pm); | 1685 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x260b, quirk_intel_pcie_pm); |
1686 | 1686 | ||
1687 | static void quirk_radeon_pm(struct pci_dev *dev) | ||
1688 | { | ||
1689 | if (dev->subsystem_vendor == PCI_VENDOR_ID_APPLE && | ||
1690 | dev->subsystem_device == 0x00e2) { | ||
1691 | if (dev->d3_delay < 20) { | ||
1692 | dev->d3_delay = 20; | ||
1693 | dev_info(&dev->dev, "extending delay after power-on from D3 to %d msec\n", | ||
1694 | dev->d3_delay); | ||
1695 | } | ||
1696 | } | ||
1697 | } | ||
1698 | DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x6741, quirk_radeon_pm); | ||
1699 | |||
1687 | #ifdef CONFIG_X86_IO_APIC | 1700 | #ifdef CONFIG_X86_IO_APIC |
1688 | static int dmi_disable_ioapicreroute(const struct dmi_system_id *d) | 1701 | static int dmi_disable_ioapicreroute(const struct dmi_system_id *d) |
1689 | { | 1702 | { |