drm/nouveau: resurrect headless mode since rework
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
parent
5cad16acd2
commit
9430738d80
@ -360,23 +360,26 @@ nouveau_display_create(struct drm_device *dev)
|
|||||||
drm_kms_helper_poll_init(dev);
|
drm_kms_helper_poll_init(dev);
|
||||||
drm_kms_helper_poll_disable(dev);
|
drm_kms_helper_poll_disable(dev);
|
||||||
|
|
||||||
if (nv_device(drm->device)->card_type < NV_50)
|
if (nouveau_modeset == 1) {
|
||||||
ret = nv04_display_create(dev);
|
if (nv_device(drm->device)->card_type < NV_50)
|
||||||
else
|
ret = nv04_display_create(dev);
|
||||||
if (nv_device(drm->device)->card_type < NV_D0)
|
else
|
||||||
ret = nv50_display_create(dev);
|
if (nv_device(drm->device)->card_type < NV_D0)
|
||||||
else
|
ret = nv50_display_create(dev);
|
||||||
ret = nvd0_display_create(dev);
|
else
|
||||||
if (ret)
|
ret = nvd0_display_create(dev);
|
||||||
goto disp_create_err;
|
|
||||||
|
|
||||||
if (dev->mode_config.num_crtc) {
|
|
||||||
ret = drm_vblank_init(dev, dev->mode_config.num_crtc);
|
|
||||||
if (ret)
|
if (ret)
|
||||||
goto vblank_err;
|
goto disp_create_err;
|
||||||
|
|
||||||
|
if (dev->mode_config.num_crtc) {
|
||||||
|
ret = drm_vblank_init(dev, dev->mode_config.num_crtc);
|
||||||
|
if (ret)
|
||||||
|
goto vblank_err;
|
||||||
|
}
|
||||||
|
|
||||||
|
nouveau_backlight_init(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
nouveau_backlight_init(dev);
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
vblank_err:
|
vblank_err:
|
||||||
@ -395,7 +398,8 @@ nouveau_display_destroy(struct drm_device *dev)
|
|||||||
nouveau_backlight_exit(dev);
|
nouveau_backlight_exit(dev);
|
||||||
drm_vblank_cleanup(dev);
|
drm_vblank_cleanup(dev);
|
||||||
|
|
||||||
disp->dtor(dev);
|
if (disp->dtor)
|
||||||
|
disp->dtor(dev);
|
||||||
|
|
||||||
drm_kms_helper_poll_fini(dev);
|
drm_kms_helper_poll_fini(dev);
|
||||||
drm_mode_config_cleanup(dev);
|
drm_mode_config_cleanup(dev);
|
||||||
|
@ -63,8 +63,9 @@ MODULE_PARM_DESC(noaccel, "disable kernel/abi16 acceleration");
|
|||||||
static int nouveau_noaccel = 0;
|
static int nouveau_noaccel = 0;
|
||||||
module_param_named(noaccel, nouveau_noaccel, int, 0400);
|
module_param_named(noaccel, nouveau_noaccel, int, 0400);
|
||||||
|
|
||||||
MODULE_PARM_DESC(modeset, "enable driver");
|
MODULE_PARM_DESC(modeset, "enable driver (default: auto, "
|
||||||
static int nouveau_modeset = -1;
|
"0 = disabled, 1 = enabled, 2 = headless)");
|
||||||
|
int nouveau_modeset = -1;
|
||||||
module_param_named(modeset, nouveau_modeset, int, 0400);
|
module_param_named(modeset, nouveau_modeset, int, 0400);
|
||||||
|
|
||||||
static struct drm_driver driver;
|
static struct drm_driver driver;
|
||||||
@ -363,7 +364,8 @@ nouveau_drm_unload(struct drm_device *dev)
|
|||||||
|
|
||||||
nouveau_pm_fini(dev);
|
nouveau_pm_fini(dev);
|
||||||
|
|
||||||
nouveau_display_fini(dev);
|
if (dev->mode_config.num_crtc)
|
||||||
|
nouveau_display_fini(dev);
|
||||||
nouveau_display_destroy(dev);
|
nouveau_display_destroy(dev);
|
||||||
|
|
||||||
nouveau_irq_fini(dev);
|
nouveau_irq_fini(dev);
|
||||||
@ -403,13 +405,15 @@ nouveau_drm_suspend(struct pci_dev *pdev, pm_message_t pm_state)
|
|||||||
pm_state.event == PM_EVENT_PRETHAW)
|
pm_state.event == PM_EVENT_PRETHAW)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
NV_INFO(drm, "suspending fbcon...\n");
|
if (dev->mode_config.num_crtc) {
|
||||||
nouveau_fbcon_set_suspend(dev, 1);
|
NV_INFO(drm, "suspending fbcon...\n");
|
||||||
|
nouveau_fbcon_set_suspend(dev, 1);
|
||||||
|
|
||||||
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)
|
||||||
return ret;
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
NV_INFO(drm, "evicting buffers...\n");
|
NV_INFO(drm, "evicting buffers...\n");
|
||||||
ttm_bo_evict_mm(&drm->ttm.bdev, TTM_PL_VRAM);
|
ttm_bo_evict_mm(&drm->ttm.bdev, TTM_PL_VRAM);
|
||||||
@ -445,8 +449,10 @@ fail_client:
|
|||||||
nouveau_client_init(&cli->base);
|
nouveau_client_init(&cli->base);
|
||||||
}
|
}
|
||||||
|
|
||||||
NV_INFO(drm, "resuming display...\n");
|
if (dev->mode_config.num_crtc) {
|
||||||
nouveau_display_resume(dev);
|
NV_INFO(drm, "resuming display...\n");
|
||||||
|
nouveau_display_resume(dev);
|
||||||
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -486,8 +492,10 @@ nouveau_drm_resume(struct pci_dev *pdev)
|
|||||||
nouveau_irq_postinstall(dev);
|
nouveau_irq_postinstall(dev);
|
||||||
nouveau_pm_resume(dev);
|
nouveau_pm_resume(dev);
|
||||||
|
|
||||||
NV_INFO(drm, "resuming display...\n");
|
if (dev->mode_config.num_crtc) {
|
||||||
nouveau_display_resume(dev);
|
NV_INFO(drm, "resuming display...\n");
|
||||||
|
nouveau_display_resume(dev);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -141,4 +141,6 @@ int nouveau_drm_resume(struct pci_dev *);
|
|||||||
nv_info((cli), fmt, ##args); \
|
nv_info((cli), fmt, ##args); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
extern int nouveau_modeset;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -61,13 +61,15 @@ nouveau_irq_handler(DRM_IRQ_ARGS)
|
|||||||
|
|
||||||
nv_subdev(pmc)->intr(nv_subdev(pmc));
|
nv_subdev(pmc)->intr(nv_subdev(pmc));
|
||||||
|
|
||||||
if (device->card_type >= NV_D0) {
|
if (dev->mode_config.num_crtc) {
|
||||||
if (nv_rd32(device, 0x000100) & 0x04000000)
|
if (device->card_type >= NV_D0) {
|
||||||
nvd0_display_intr(dev);
|
if (nv_rd32(device, 0x000100) & 0x04000000)
|
||||||
} else
|
nvd0_display_intr(dev);
|
||||||
if (device->card_type >= NV_50) {
|
} else
|
||||||
if (nv_rd32(device, 0x000100) & 0x04000000)
|
if (device->card_type >= NV_50) {
|
||||||
nv50_display_intr(dev);
|
if (nv_rd32(device, 0x000100) & 0x04000000)
|
||||||
|
nv50_display_intr(dev);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user