Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

+16 -9
+5 -5
drivers/gpu/drm/drm_edid.c
··· 205 205 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, 206 206 /* 0x0f - 1024x768@43Hz, interlace */ 207 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 209 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC | 210 210 DRM_MODE_FLAG_INTERLACE) }, 211 211 /* 0x10 - 1024x768@60Hz */ ··· 522 522 720, 840, 0, 480, 481, 484, 500, 0, 523 523 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@75Hz */ 524 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 526 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@72Hz */ 527 527 { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 30240, 640, 704, 528 528 768, 864, 0, 480, 483, 486, 525, 0, 529 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 531 752, 800, 0, 480, 490, 492, 525, 0, 532 532 DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) }, /* 640x480@60Hz */ 533 533 { DRM_MODE("720x400", DRM_MODE_TYPE_DRIVER, 35500, 720, 738, ··· 539 539 { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 135000, 1280, 1296, 540 540 1440, 1688, 0, 1024, 1025, 1028, 1066, 0, 541 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 543 1136, 1312, 0, 768, 769, 772, 800, 0, 544 544 DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) }, /* 1024x768@75Hz */ 545 545 { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 75000, 1024, 1048, ··· 2241 2241 { 2242 2242 int i, j, m, modes = 0; 2243 2243 struct drm_display_mode *mode; 2244 - u8 *est = ((u8 *)timing) + 5; 2244 + u8 *est = ((u8 *)timing) + 6; 2245 2245 2246 2246 for (i = 0; i < 6; i++) { 2247 2247 for (j = 7; j >= 0; j--) {
+9 -4
drivers/gpu/drm/qxl/qxl_display.c
··· 375 375 376 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 383 cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release); 379 384 cmd->type = QXL_CURSOR_SET; 380 - cmd->u.set.position.x = qcrtc->cur_x; 381 - cmd->u.set.position.y = qcrtc->cur_y; 385 + cmd->u.set.position.x = qcrtc->cur_x + qcrtc->hot_spot_x; 386 + cmd->u.set.position.y = qcrtc->cur_y + qcrtc->hot_spot_y; 382 387 383 388 cmd->u.set.shape = qxl_bo_physical_address(qdev, cursor_bo, 0); 384 389 ··· 446 441 447 442 cmd = (struct qxl_cursor_cmd *)qxl_release_map(qdev, release); 448 443 cmd->type = QXL_CURSOR_MOVE; 449 - cmd->u.position.x = qcrtc->cur_x; 450 - cmd->u.position.y = qcrtc->cur_y; 444 + cmd->u.position.x = qcrtc->cur_x + qcrtc->hot_spot_x; 445 + cmd->u.position.y = qcrtc->cur_y + qcrtc->hot_spot_y; 451 446 qxl_release_unmap(qdev, release, &cmd->release_info); 452 447 453 448 qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false);
+2
drivers/gpu/drm/qxl/qxl_drv.h
··· 135 135 int index; 136 136 int cur_x; 137 137 int cur_y; 138 + int hot_spot_x; 139 + int hot_spot_y; 138 140 }; 139 141 140 142 struct qxl_output {