Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+5 −7
Original line number Diff line number Diff line
@@ -510,13 +510,13 @@ nouveau_drm_remove(struct pci_dev *pdev)
}

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_cli *cli;
	int ret;

	if (dev->mode_config.num_crtc) {
	if (dev->mode_config.num_crtc && !runtime) {
		NV_INFO(drm, "suspending display...\n");
		ret = nouveau_display_suspend(dev);
		if (ret)
@@ -590,7 +590,7 @@ int nouveau_pmops_suspend(struct device *dev)
	if (drm_dev->mode_config.num_crtc)
		nouveau_fbcon_set_suspend(drm_dev, 1);

	ret = nouveau_do_suspend(drm_dev);
	ret = nouveau_do_suspend(drm_dev, false);
	if (ret)
		return ret;

@@ -670,7 +670,7 @@ static int nouveau_pmops_freeze(struct device *dev)
	if (drm_dev->mode_config.num_crtc)
		nouveau_fbcon_set_suspend(drm_dev, 1);

	ret = nouveau_do_suspend(drm_dev);
	ret = nouveau_do_suspend(drm_dev, false);
	return ret;
}

@@ -904,7 +904,7 @@ static int nouveau_pmops_runtime_suspend(struct device *dev)
	drm_kms_helper_poll_disable(drm_dev);
	vga_switcheroo_set_dynamic_switch(pdev, VGA_SWITCHEROO_OFF);
	nouveau_switcheroo_optimus_dsm();
	ret = nouveau_do_suspend(drm_dev);
	ret = nouveau_do_suspend(drm_dev, true);
	pci_save_state(pdev);
	pci_disable_device(pdev);
	pci_set_power_state(pdev, PCI_D3cold);
@@ -930,8 +930,6 @@ static int nouveau_pmops_runtime_resume(struct device *dev)
	pci_set_master(pdev);

	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);
	/* do magic */
	nv_mask(device, 0x88488, (1 << 25), (1 << 25));