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

Commit 9430738d authored by Ben Skeggs's avatar Ben Skeggs
Browse files

drm/nouveau: resurrect headless mode since rework



Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
parent 5cad16ac
Loading
Loading
Loading
Loading
+19 −15
Original line number Diff line number Diff line
@@ -360,6 +360,7 @@ nouveau_display_create(struct drm_device *dev)
	drm_kms_helper_poll_init(dev);
	drm_kms_helper_poll_disable(dev);

	if (nouveau_modeset == 1) {
		if (nv_device(drm->device)->card_type < NV_50)
			ret = nv04_display_create(dev);
		else
@@ -377,6 +378,8 @@ nouveau_display_create(struct drm_device *dev)
		}

		nouveau_backlight_init(dev);
	}

	return 0;

vblank_err:
@@ -395,6 +398,7 @@ nouveau_display_destroy(struct drm_device *dev)
	nouveau_backlight_exit(dev);
	drm_vblank_cleanup(dev);

	if (disp->dtor)
		disp->dtor(dev);

	drm_kms_helper_poll_fini(dev);
+21 −13
Original line number Diff line number Diff line
@@ -63,8 +63,9 @@ MODULE_PARM_DESC(noaccel, "disable kernel/abi16 acceleration");
static int nouveau_noaccel = 0;
module_param_named(noaccel, nouveau_noaccel, int, 0400);

MODULE_PARM_DESC(modeset, "enable driver");
static int nouveau_modeset = -1;
MODULE_PARM_DESC(modeset, "enable driver (default: auto, "
		          "0 = disabled, 1 = enabled, 2 = headless)");
int nouveau_modeset = -1;
module_param_named(modeset, nouveau_modeset, int, 0400);

static struct drm_driver driver;
@@ -363,6 +364,7 @@ nouveau_drm_unload(struct drm_device *dev)

	nouveau_pm_fini(dev);

	if (dev->mode_config.num_crtc)
		nouveau_display_fini(dev);
	nouveau_display_destroy(dev);

@@ -403,6 +405,7 @@ nouveau_drm_suspend(struct pci_dev *pdev, pm_message_t pm_state)
	    pm_state.event == PM_EVENT_PRETHAW)
		return 0;

	if (dev->mode_config.num_crtc) {
		NV_INFO(drm, "suspending fbcon...\n");
		nouveau_fbcon_set_suspend(dev, 1);

@@ -410,6 +413,7 @@ nouveau_drm_suspend(struct pci_dev *pdev, pm_message_t pm_state)
		ret = nouveau_display_suspend(dev);
		if (ret)
			return ret;
	}

	NV_INFO(drm, "evicting buffers...\n");
	ttm_bo_evict_mm(&drm->ttm.bdev, TTM_PL_VRAM);
@@ -445,8 +449,10 @@ nouveau_drm_suspend(struct pci_dev *pdev, pm_message_t pm_state)
		nouveau_client_init(&cli->base);
	}

	if (dev->mode_config.num_crtc) {
		NV_INFO(drm, "resuming display...\n");
		nouveau_display_resume(dev);
	}
	return ret;
}

@@ -486,8 +492,10 @@ nouveau_drm_resume(struct pci_dev *pdev)
	nouveau_irq_postinstall(dev);
	nouveau_pm_resume(dev);

	if (dev->mode_config.num_crtc) {
		NV_INFO(drm, "resuming display...\n");
		nouveau_display_resume(dev);
	}
	return 0;
}

+2 −0
Original line number Diff line number Diff line
@@ -141,4 +141,6 @@ int nouveau_drm_resume(struct pci_dev *);
		nv_info((cli), fmt, ##args);                                   \
} while (0)

extern int nouveau_modeset;

#endif
+9 −7
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ nouveau_irq_handler(DRM_IRQ_ARGS)

	nv_subdev(pmc)->intr(nv_subdev(pmc));

	if (dev->mode_config.num_crtc) {
		if (device->card_type >= NV_D0) {
			if (nv_rd32(device, 0x000100) & 0x04000000)
				nvd0_display_intr(dev);
@@ -69,6 +70,7 @@ nouveau_irq_handler(DRM_IRQ_ARGS)
			if (nv_rd32(device, 0x000100) & 0x04000000)
				nv50_display_intr(dev);
		}
	}

	return IRQ_HANDLED;
}