diff options
Diffstat (limited to 'drivers/gpu/drm/nouveau/nouveau_drm.c')
-rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_drm.c | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c index ccae8c26ae2..8503b2ea570 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c | |||
@@ -63,8 +63,9 @@ MODULE_PARM_DESC(noaccel, "disable kernel/abi16 acceleration"); | |||
63 | static int nouveau_noaccel = 0; | 63 | static int nouveau_noaccel = 0; |
64 | module_param_named(noaccel, nouveau_noaccel, int, 0400); | 64 | module_param_named(noaccel, nouveau_noaccel, int, 0400); |
65 | 65 | ||
66 | MODULE_PARM_DESC(modeset, "enable driver"); | 66 | MODULE_PARM_DESC(modeset, "enable driver (default: auto, " |
67 | static int nouveau_modeset = -1; | 67 | "0 = disabled, 1 = enabled, 2 = headless)"); |
68 | int nouveau_modeset = -1; | ||
68 | module_param_named(modeset, nouveau_modeset, int, 0400); | 69 | module_param_named(modeset, nouveau_modeset, int, 0400); |
69 | 70 | ||
70 | static struct drm_driver driver; | 71 | static struct drm_driver driver; |
@@ -128,7 +129,8 @@ nouveau_accel_init(struct nouveau_drm *drm) | |||
128 | 129 | ||
129 | /* initialise synchronisation routines */ | 130 | /* initialise synchronisation routines */ |
130 | if (device->card_type < NV_10) ret = nv04_fence_create(drm); | 131 | if (device->card_type < NV_10) ret = nv04_fence_create(drm); |
131 | else if (device->chipset < 0x84) ret = nv10_fence_create(drm); | 132 | else if (device->card_type < NV_50) ret = nv10_fence_create(drm); |
133 | else if (device->chipset < 0x84) ret = nv50_fence_create(drm); | ||
132 | else if (device->card_type < NV_C0) ret = nv84_fence_create(drm); | 134 | else if (device->card_type < NV_C0) ret = nv84_fence_create(drm); |
133 | else ret = nvc0_fence_create(drm); | 135 | else ret = nvc0_fence_create(drm); |
134 | if (ret) { | 136 | if (ret) { |
@@ -363,7 +365,8 @@ nouveau_drm_unload(struct drm_device *dev) | |||
363 | 365 | ||
364 | nouveau_pm_fini(dev); | 366 | nouveau_pm_fini(dev); |
365 | 367 | ||
366 | nouveau_display_fini(dev); | 368 | if (dev->mode_config.num_crtc) |
369 | nouveau_display_fini(dev); | ||
367 | nouveau_display_destroy(dev); | 370 | nouveau_display_destroy(dev); |
368 | 371 | ||
369 | nouveau_irq_fini(dev); | 372 | nouveau_irq_fini(dev); |
@@ -403,13 +406,15 @@ nouveau_drm_suspend(struct pci_dev *pdev, pm_message_t pm_state) | |||
403 | pm_state.event == PM_EVENT_PRETHAW) | 406 | pm_state.event == PM_EVENT_PRETHAW) |
404 | return 0; | 407 | return 0; |
405 | 408 | ||
406 | NV_INFO(drm, "suspending fbcon...\n"); | 409 | if (dev->mode_config.num_crtc) { |
407 | nouveau_fbcon_set_suspend(dev, 1); | 410 | NV_INFO(drm, "suspending fbcon...\n"); |
411 | nouveau_fbcon_set_suspend(dev, 1); | ||
408 | 412 | ||
409 | NV_INFO(drm, "suspending display...\n"); | 413 | NV_INFO(drm, "suspending display...\n"); |
410 | ret = nouveau_display_suspend(dev); | 414 | ret = nouveau_display_suspend(dev); |
411 | if (ret) | 415 | if (ret) |
412 | return ret; | 416 | return ret; |
417 | } | ||
413 | 418 | ||
414 | NV_INFO(drm, "evicting buffers...\n"); | 419 | NV_INFO(drm, "evicting buffers...\n"); |
415 | ttm_bo_evict_mm(&drm->ttm.bdev, TTM_PL_VRAM); | 420 | ttm_bo_evict_mm(&drm->ttm.bdev, TTM_PL_VRAM); |
@@ -445,8 +450,10 @@ fail_client: | |||
445 | nouveau_client_init(&cli->base); | 450 | nouveau_client_init(&cli->base); |
446 | } | 451 | } |
447 | 452 | ||
448 | NV_INFO(drm, "resuming display...\n"); | 453 | if (dev->mode_config.num_crtc) { |
449 | nouveau_display_resume(dev); | 454 | NV_INFO(drm, "resuming display...\n"); |
455 | nouveau_display_resume(dev); | ||
456 | } | ||
450 | return ret; | 457 | return ret; |
451 | } | 458 | } |
452 | 459 | ||
@@ -486,8 +493,10 @@ nouveau_drm_resume(struct pci_dev *pdev) | |||
486 | nouveau_irq_postinstall(dev); | 493 | nouveau_irq_postinstall(dev); |
487 | nouveau_pm_resume(dev); | 494 | nouveau_pm_resume(dev); |
488 | 495 | ||
489 | NV_INFO(drm, "resuming display...\n"); | 496 | if (dev->mode_config.num_crtc) { |
490 | nouveau_display_resume(dev); | 497 | NV_INFO(drm, "resuming display...\n"); |
498 | nouveau_display_resume(dev); | ||
499 | } | ||
491 | return 0; | 500 | return 0; |
492 | } | 501 | } |
493 | 502 | ||
@@ -662,9 +671,7 @@ nouveau_drm_init(void) | |||
662 | #ifdef CONFIG_VGA_CONSOLE | 671 | #ifdef CONFIG_VGA_CONSOLE |
663 | if (vgacon_text_force()) | 672 | if (vgacon_text_force()) |
664 | nouveau_modeset = 0; | 673 | nouveau_modeset = 0; |
665 | else | ||
666 | #endif | 674 | #endif |
667 | nouveau_modeset = 1; | ||
668 | } | 675 | } |
669 | 676 | ||
670 | if (!nouveau_modeset) | 677 | if (!nouveau_modeset) |