All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH] drm/radeon: increase d3 delay to 20 ms during switcheroo poweron
@ 2013-01-02 15:38 Maarten Lankhorst
  2013-01-04 15:34 ` Alex Deucher
  0 siblings, 1 reply; 3+ messages in thread
From: Maarten Lankhorst @ 2013-01-02 15:38 UTC (permalink / raw)
  To: Alex Deucher; +Cc: Seth Forshee, dri-devel@lists.freedesktop.org

vga-switcheroo with apple-gmux does not switch correctly on my system. The PCI
configuration space is not restored correctly, resulting in MSI not working after switch.

Only useful item in dmesg is:

[   33.922807] radeon 0000:01:00.0: Refused to change power state, currently in D3

I did some testing, dumping the difference in ms between first succesful switch
from D3 to D0, and it seems that there is slightly more than 20 ms difference when
the device is re-enabled through vga-switcheroo.

So bump the re-enable d3 delay to 20 ms to handle this, which fixes msi not working
on my system after switcheroo-ing.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>

---

This is a RFC patch since I feel what I'm doing is done in a hackish way,
but it seems only the D3->D0 transition during switcheroo enable is affected,
other transitions like suspend/resume and switcheroo poweroff seem unaffected.

diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
index 5515921..8816958 100644
--- a/drivers/gpu/drm/radeon/radeon_device.c
+++ b/drivers/gpu/drm/radeon/radeon_device.c
@@ -910,10 +910,19 @@ static void radeon_switcheroo_set_state(struct pci_dev *pdev, enum vga_switchero
 	struct drm_device *dev = pci_get_drvdata(pdev);
 	pm_message_t pmm = { .event = PM_EVENT_SUSPEND };
 	if (state == VGA_SWITCHEROO_ON) {
+		unsigned d3_delay = dev->pdev->d3_delay;
+
 		printk(KERN_INFO "radeon: switched on\n");
 		/* don't suspend or resume card normally */
 		dev->switch_power_state = DRM_SWITCH_POWER_CHANGING;
+
+		if (dev->pdev->d3_delay < 20)
+			dev->pdev->d3_delay = 20;
+
 		radeon_resume_kms(dev);
+
+		dev->pdev->d3_delay = d3_delay;
+
 		dev->switch_power_state = DRM_SWITCH_POWER_ON;
 		drm_kms_helper_poll_enable(dev);
 	} else {

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-01-04 16:26 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-01-02 15:38 [RFC PATCH] drm/radeon: increase d3 delay to 20 ms during switcheroo poweron Maarten Lankhorst
2013-01-04 15:34 ` Alex Deucher
2013-01-04 16:26   ` Maarten Lankhorst

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.