diff options
| author | Dave Airlie <airlied@redhat.com> | 2016-04-10 23:29:42 -0400 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2016-04-10 23:29:42 -0400 |
| commit | d3de1b81a08a06be2f4a5ac2dd5dc9d87bd85193 (patch) | |
| tree | 412ad0d434896148a6b49d427f1bac680aaed09d /drivers/gpu | |
| parent | bf16200689118d19de1b8d2a3c314fc21f5dc7bb (diff) | |
| parent | 735b100f6d84b60da68e81e0bcb953d2021e0aa8 (diff) | |
Merge tag 'topic/drm-fixes-2016-04-07' of git://anongit.freedesktop.org/drm-intel into drm-fixes
The qxl fix I've picked up quite some time ago, and unfortunately
neglected.
Then there's established timing fixes, of which particularly "drm/edid:
Fix parsing of EDID 1.4 Established Timings III descriptor" is quite
surprising. It looks like we've never got any of them right. I am not
sure what the full implications of this are. That combined with lack of
any details of real world bugs fixed made me decide against cc: stable.
* tag 'topic/drm-fixes-2016-04-07' of git://anongit.freedesktop.org/drm-intel:
drm/edid: Fix DMT 1024x768@43Hz (interlaced) timings
drm/edid: Fix parsing of EDID 1.4 Established Timings III descriptor
drm/edid: Fix EDID Established Timings I and II
drm/qxl: fix cursor position with non-zero hotspot
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/drm_edid.c | 10 | ||||
| -rw-r--r-- | drivers/gpu/drm/qxl/qxl_display.c | 13 | ||||
| -rw-r--r-- | drivers/gpu/drm/qxl/qxl_drv.h | 2 |
3 files changed, 16 insertions, 9 deletions
diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c index 414d7f61aa05..558ef9fc39e6 100644 --- a/drivers/gpu/drm/drm_edid.c +++ b/drivers/gpu/drm/drm_edid.c | |||
| @@ -205,7 +205,7 @@ static const struct drm_display_mode drm_dmt_modes[] = { | |||
| 205 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, | 205 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, |
| 206 | /* 0x0f - 1024x768@43Hz, interlace */ | 206 | /* 0x0f - 1024x768@43Hz, interlace */ |
| 207 | { DRM_MODE("1024x768i", DRM_MODE_TYPE_DRIVER, 44900, 1024, 1032, | 207 | { DRM_MODE("1024x768i", DRM_MODE_TYPE_DRIVER, 44900, 1024, 1032, |
| 208 | 1208, 1264, 0, 768, 768, 772, 817, 0, | 208 | 1208, 1264, 0, 768, 768, 776, 817, 0, |
| 209 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | | 209 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | |
| 210 | DRM_MODE_FLAG_INTERLACE) }, | 210 | DRM_MODE_FLAG_INTERLACE) }, |
| 211 | /* 0x10 - 1024x768@60Hz */ | 211 | /* 0x10 - 1024x768@60Hz */ |
| @@ -522,12 +522,12 @@ static const struct drm_display_mode edid_est_modes[] = { | |||
| 522 | 720, 840, 0, 480, 481, 484, 500, 0, | 522 | 720, 840, 0, 480, 481, 484, 500, 0, |
| 523 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@75Hz */ | 523 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@75Hz */ |
| 524 | { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 664, | 524 | { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 664, |
| 525 | 704, 832, 0, 480, 489, 491, 520, 0, | 525 | 704, 832, 0, 480, 489, 492, 520, 0, |
| 526 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@72Hz */ | 526 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@72Hz */ |
| 527 | { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 30240, 640, 704, | 527 | { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 30240, 640, 704, |
| 528 | 768, 864, 0, 480, 483, 486, 525, 0, | 528 | 768, 864, 0, 480, 483, 486, 525, 0, |
| 529 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@67Hz */ | 529 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@67Hz */ |
| 530 | { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25200, 640, 656, | 530 | { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656, |
| 531 | 752, 800, 0, 480, 490, 492, 525, 0, | 531 | 752, 800, 0, 480, 490, 492, 525, 0, |
| 532 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@60Hz */ | 532 | DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@60Hz */ |
| 533 | { DRM_MODE("720x400", DRM_MODE_TYPE_DRIVER, 35500, 720, 738, | 533 | { DRM_MODE("720x400", DRM_MODE_TYPE_DRIVER, 35500, 720, 738, |
| @@ -539,7 +539,7 @@ static const struct drm_display_mode edid_est_modes[] = { | |||
| 539 | { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 135000, 1280, 1296, | 539 | { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 135000, 1280, 1296, |
| 540 | 1440, 1688, 0, 1024, 1025, 1028, 1066, 0, | 540 | 1440, 1688, 0, 1024, 1025, 1028, 1066, 0, |
| 541 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 1280x1024@75Hz */ | 541 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 1280x1024@75Hz */ |
| 542 | { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 78800, 1024, 1040, | 542 | { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 78750, 1024, 1040, |
| 543 | 1136, 1312, 0, 768, 769, 772, 800, 0, | 543 | 1136, 1312, 0, 768, 769, 772, 800, 0, |
| 544 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 1024x768@75Hz */ | 544 | DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 1024x768@75Hz */ |
| 545 | { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 75000, 1024, 1048, | 545 | { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 75000, 1024, 1048, |
| @@ -2241,7 +2241,7 @@ drm_est3_modes(struct drm_connector *connector, struct detailed_timing *timing) | |||
| 2241 | { | 2241 | { |
| 2242 | int i, j, m, modes = 0; | 2242 | int i, j, m, modes = 0; |
| 2243 | struct drm_display_mode *mode; | 2243 | struct drm_display_mode *mode; |
| 2244 | u8 *est = ((u8 *)timing) + 5; | 2244 | u8 *est = ((u8 *)timing) + 6; |
| 2245 | 2245 | ||
| 2246 | for (i = 0; i < 6; i++) { | 2246 | for (i = 0; i < 6; i++) { |
| 2247 | for (j = 7; j >= 0; j--) { | 2247 | for (j = 7; j >= 0; j--) { |
diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c index 43e5f503d1c5..030409a3ee4e 100644 --- a/drivers/gpu/drm/qxl/qxl_display.c +++ b/drivers/gpu/drm/qxl/qxl_display.c | |||
| @@ -375,10 +375,15 @@ static int qxl_crtc_cursor_set2(struct drm_crtc *crtc, | |||
| 375 | 375 | ||
| 376 | qxl_bo_kunmap(user_bo); | 376 | qxl_bo_kunmap(user_bo); |
| 377 | 377 | ||
| 378 | qcrtc->cur_x += qcrtc->hot_spot_x - hot_x; | ||
| 379 | qcrtc->cur_y += qcrtc->hot_spot_y - hot_y; | ||
| 380 | qcrtc->hot_spot_x = hot_x; | ||
| 381 | qcrtc->hot_spot_y = hot_y; | ||
| 382 | |||
| 378 | cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release); | 383 | cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release); |
| 379 | cmd->type = QXL_CURSOR_SET; | 384 | cmd->type = QXL_CURSOR_SET; |
| 380 | cmd->u.set.position.x = qcrtc->cur_x; | 385 | cmd->u.set.position.x = qcrtc->cur_x + qcrtc->hot_spot_x; |
| 381 | cmd->u.set.position.y = qcrtc->cur_y; | 386 | cmd->u.set.position.y = qcrtc->cur_y + qcrtc->hot_spot_y; |
| 382 | 387 | ||
| 383 | cmd->u.set.shape = qxl_bo_physical_address(qdev, cursor_bo, 0); | 388 | cmd->u.set.shape = qxl_bo_physical_address(qdev, cursor_bo, 0); |
| 384 | 389 | ||
| @@ -441,8 +446,8 @@ static int qxl_crtc_cursor_move(struct drm_crtc *crtc, | |||
| 441 | 446 | ||
| 442 | cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release); | 447 | cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release); |
| 443 | cmd->type = QXL_CURSOR_MOVE; | 448 | cmd->type = QXL_CURSOR_MOVE; |
| 444 | cmd->u.position.x = qcrtc->cur_x; | 449 | cmd->u.position.x = qcrtc->cur_x + qcrtc->hot_spot_x; |
| 445 | cmd->u.position.y = qcrtc->cur_y; | 450 | cmd->u.position.y = qcrtc->cur_y + qcrtc->hot_spot_y; |
| 446 | qxl_release_unmap(qdev, release, &cmd->release_info); | 451 | qxl_release_unmap(qdev, release, &cmd->release_info); |
| 447 | 452 | ||
| 448 | qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false); | 453 | qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false); |
diff --git a/drivers/gpu/drm/qxl/qxl_drv.h b/drivers/gpu/drm/qxl/qxl_drv.h index 6e6b9b1519b8..3f3897eb458c 100644 --- a/drivers/gpu/drm/qxl/qxl_drv.h +++ b/drivers/gpu/drm/qxl/qxl_drv.h | |||
| @@ -135,6 +135,8 @@ struct qxl_crtc { | |||
| 135 | int index; | 135 | int index; |
| 136 | int cur_x; | 136 | int cur_x; |
| 137 | int cur_y; | 137 | int cur_y; |
| 138 | int hot_spot_x; | ||
| 139 | int hot_spot_y; | ||
| 138 | }; | 140 | }; |
| 139 | 141 | ||
| 140 | struct qxl_output { | 142 | struct qxl_output { |
