aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/radeon/radeon_device.c11
-rw-r--r--drivers/pci/quirks.c13
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
118struct radeon_px_quirk { 117struct 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)
1241static void radeon_switcheroo_set_state(struct pci_dev *pdev, enum vga_switcheroo_state state) 1238static 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);
1684DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x260a, quirk_intel_pcie_pm); 1684DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x260a, quirk_intel_pcie_pm);
1685DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x260b, quirk_intel_pcie_pm); 1685DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x260b, quirk_intel_pcie_pm);
1686 1686
1687static 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}
1698DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_ATI, 0x6741, quirk_radeon_pm);
1699
1687#ifdef CONFIG_X86_IO_APIC 1700#ifdef CONFIG_X86_IO_APIC
1688static int dmi_disable_ioapicreroute(const struct dmi_system_id *d) 1701static int dmi_disable_ioapicreroute(const struct dmi_system_id *d)
1689{ 1702{