Commit 05c63c2f authored by Dave Airlie's avatar Dave Airlie

drm/nouveau: don't suspend/resume display on runtime s/r

This should ensure we don't hit a locking problem when someone
wakes us up via a connector, we should never go into suspend
while the display is on anyways.
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent c32fc9c8
...@@ -510,13 +510,13 @@ nouveau_drm_remove(struct pci_dev *pdev) ...@@ -510,13 +510,13 @@ nouveau_drm_remove(struct pci_dev *pdev)
} }
static int static int
nouveau_do_suspend(struct drm_device *dev) nouveau_do_suspend(struct drm_device *dev, bool runtime)
{ {
struct nouveau_drm *drm = nouveau_drm(dev); struct nouveau_drm *drm = nouveau_drm(dev);
struct nouveau_cli *cli; struct nouveau_cli *cli;
int ret; int ret;
if (dev->mode_config.num_crtc) { if (dev->mode_config.num_crtc && !runtime) {
NV_INFO(drm, "suspending display...\n"); NV_INFO(drm, "suspending display...\n");
ret = nouveau_display_suspend(dev); ret = nouveau_display_suspend(dev);
if (ret) if (ret)
...@@ -590,7 +590,7 @@ int nouveau_pmops_suspend(struct device *dev) ...@@ -590,7 +590,7 @@ int nouveau_pmops_suspend(struct device *dev)
if (drm_dev->mode_config.num_crtc) if (drm_dev->mode_config.num_crtc)
nouveau_fbcon_set_suspend(drm_dev, 1); nouveau_fbcon_set_suspend(drm_dev, 1);
ret = nouveau_do_suspend(drm_dev); ret = nouveau_do_suspend(drm_dev, false);
if (ret) if (ret)
return ret; return ret;
...@@ -670,7 +670,7 @@ static int nouveau_pmops_freeze(struct device *dev) ...@@ -670,7 +670,7 @@ static int nouveau_pmops_freeze(struct device *dev)
if (drm_dev->mode_config.num_crtc) if (drm_dev->mode_config.num_crtc)
nouveau_fbcon_set_suspend(drm_dev, 1); nouveau_fbcon_set_suspend(drm_dev, 1);
ret = nouveau_do_suspend(drm_dev); ret = nouveau_do_suspend(drm_dev, false);
return ret; return ret;
} }
...@@ -904,7 +904,7 @@ static int nouveau_pmops_runtime_suspend(struct device *dev) ...@@ -904,7 +904,7 @@ static int nouveau_pmops_runtime_suspend(struct device *dev)
drm_kms_helper_poll_disable(drm_dev); drm_kms_helper_poll_disable(drm_dev);
vga_switcheroo_set_dynamic_switch(pdev, VGA_SWITCHEROO_OFF); vga_switcheroo_set_dynamic_switch(pdev, VGA_SWITCHEROO_OFF);
nouveau_switcheroo_optimus_dsm(); nouveau_switcheroo_optimus_dsm();
ret = nouveau_do_suspend(drm_dev); ret = nouveau_do_suspend(drm_dev, true);
pci_save_state(pdev); pci_save_state(pdev);
pci_disable_device(pdev); pci_disable_device(pdev);
pci_set_power_state(pdev, PCI_D3cold); pci_set_power_state(pdev, PCI_D3cold);
...@@ -930,8 +930,6 @@ static int nouveau_pmops_runtime_resume(struct device *dev) ...@@ -930,8 +930,6 @@ static int nouveau_pmops_runtime_resume(struct device *dev)
pci_set_master(pdev); pci_set_master(pdev);
ret = nouveau_do_resume(drm_dev); ret = nouveau_do_resume(drm_dev);
if (drm_dev->mode_config.num_crtc)
nouveau_display_resume(drm_dev);
drm_kms_helper_poll_enable(drm_dev); drm_kms_helper_poll_enable(drm_dev);
/* do magic */ /* do magic */
nv_mask(device, 0x88488, (1 << 25), (1 << 25)); nv_mask(device, 0x88488, (1 << 25), (1 << 25));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment