diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
commit | c71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch) | |
tree | ecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c | |
parent | ea53c912f8a86a8567697115b6a0d8152beee5c8 (diff) | |
parent | 6a00f206debf8a5c8899055726ad127dbeeed098 (diff) |
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts:
litmus/sched_cedf.c
Diffstat (limited to 'drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c')
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c index 11cb39e3accb..b3a2cd5118d7 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c | |||
@@ -345,7 +345,7 @@ static enum drm_connector_status | |||
345 | return connector_status_disconnected; | 345 | return connector_status_disconnected; |
346 | } | 346 | } |
347 | 347 | ||
348 | static struct drm_display_mode vmw_ldu_connector_builtin[] = { | 348 | static const struct drm_display_mode vmw_ldu_connector_builtin[] = { |
349 | /* 640x480@60Hz */ | 349 | /* 640x480@60Hz */ |
350 | { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656, | 350 | { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656, |
351 | 752, 800, 0, 480, 489, 492, 525, 0, | 351 | 752, 800, 0, 480, 489, 492, 525, 0, |
@@ -427,6 +427,7 @@ static int vmw_ldu_connector_fill_modes(struct drm_connector *connector, | |||
427 | { | 427 | { |
428 | struct vmw_legacy_display_unit *ldu = vmw_connector_to_ldu(connector); | 428 | struct vmw_legacy_display_unit *ldu = vmw_connector_to_ldu(connector); |
429 | struct drm_device *dev = connector->dev; | 429 | struct drm_device *dev = connector->dev; |
430 | struct vmw_private *dev_priv = vmw_priv(dev); | ||
430 | struct drm_display_mode *mode = NULL; | 431 | struct drm_display_mode *mode = NULL; |
431 | struct drm_display_mode prefmode = { DRM_MODE("preferred", | 432 | struct drm_display_mode prefmode = { DRM_MODE("preferred", |
432 | DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED, | 433 | DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED, |
@@ -443,22 +444,32 @@ static int vmw_ldu_connector_fill_modes(struct drm_connector *connector, | |||
443 | mode->hdisplay = ldu->pref_width; | 444 | mode->hdisplay = ldu->pref_width; |
444 | mode->vdisplay = ldu->pref_height; | 445 | mode->vdisplay = ldu->pref_height; |
445 | mode->vrefresh = drm_mode_vrefresh(mode); | 446 | mode->vrefresh = drm_mode_vrefresh(mode); |
446 | drm_mode_probed_add(connector, mode); | 447 | if (vmw_kms_validate_mode_vram(dev_priv, mode->hdisplay * 2, |
448 | mode->vdisplay)) { | ||
449 | drm_mode_probed_add(connector, mode); | ||
447 | 450 | ||
448 | if (ldu->pref_mode) { | 451 | if (ldu->pref_mode) { |
449 | list_del_init(&ldu->pref_mode->head); | 452 | list_del_init(&ldu->pref_mode->head); |
450 | drm_mode_destroy(dev, ldu->pref_mode); | 453 | drm_mode_destroy(dev, ldu->pref_mode); |
451 | } | 454 | } |
452 | 455 | ||
453 | ldu->pref_mode = mode; | 456 | ldu->pref_mode = mode; |
457 | } | ||
454 | } | 458 | } |
455 | 459 | ||
456 | for (i = 0; vmw_ldu_connector_builtin[i].type != 0; i++) { | 460 | for (i = 0; vmw_ldu_connector_builtin[i].type != 0; i++) { |
457 | if (vmw_ldu_connector_builtin[i].hdisplay > max_width || | 461 | const struct drm_display_mode *bmode; |
458 | vmw_ldu_connector_builtin[i].vdisplay > max_height) | 462 | |
463 | bmode = &vmw_ldu_connector_builtin[i]; | ||
464 | if (bmode->hdisplay > max_width || | ||
465 | bmode->vdisplay > max_height) | ||
466 | continue; | ||
467 | |||
468 | if (!vmw_kms_validate_mode_vram(dev_priv, bmode->hdisplay * 2, | ||
469 | bmode->vdisplay)) | ||
459 | continue; | 470 | continue; |
460 | 471 | ||
461 | mode = drm_mode_duplicate(dev, &vmw_ldu_connector_builtin[i]); | 472 | mode = drm_mode_duplicate(dev, bmode); |
462 | if (!mode) | 473 | if (!mode) |
463 | return 0; | 474 | return 0; |
464 | mode->vrefresh = drm_mode_vrefresh(mode); | 475 | mode->vrefresh = drm_mode_vrefresh(mode); |
@@ -547,7 +558,7 @@ int vmw_kms_init_legacy_display_system(struct vmw_private *dev_priv) | |||
547 | return -EINVAL; | 558 | return -EINVAL; |
548 | } | 559 | } |
549 | 560 | ||
550 | dev_priv->ldu_priv = kmalloc(GFP_KERNEL, sizeof(*dev_priv->ldu_priv)); | 561 | dev_priv->ldu_priv = kmalloc(sizeof(*dev_priv->ldu_priv), GFP_KERNEL); |
551 | 562 | ||
552 | if (!dev_priv->ldu_priv) | 563 | if (!dev_priv->ldu_priv) |
553 | return -ENOMEM; | 564 | return -ENOMEM; |