History

Merge tag 'drm-fixes-2018-10-19' of git://anongit.freedesktop.org/drm/drm

Dave writes: "drm fixes for 4.19 final Just a last set of misc core fixes for final. 4 fixes, one use after free, one fb integration fix, one EDID fix, and one laptop panel quirk," * tag 'drm-fixes-2018-10-19' of git://anongit.freedesktop.org/drm/drm: drm/edid: VSDB yCBCr420 Deep Color mode bit definitions drm: fix use of freed memory in drm_mode_setcrtc drm: fb-helper: Reject all pixel format changing requests drm/edid: Add 6 bpc quirk for BOE panel in HP Pavilion 15-n233sl

Greg Kroah-Hartman committed 8 years ago

Commit 7555c5d2 parents eb6d938 f8e6e1b4 files · +40 −72Browse files

Unified · Split

4 files
  1. drivers/gpu/drm/drm_crtc.c +7 −3
  2. drivers/gpu/drm/drm_edid.c +4 −1
  3. drivers/gpu/drm/drm_fb_helper.c +26 −65
  4. include/drm/drm_edid.h +3 −3
drivers/gpu/drm/drm_crtc.c+7−3
@@ -567,9 +567,9 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data, · 566 unmodified lines
567 struct drm_mode_crtc *crtc_req = data;567 struct drm_mode_crtc *crtc_req = data;
568 struct drm_crtc *crtc;568 struct drm_crtc *crtc;
569 struct drm_plane *plane;569 struct drm_plane *plane;
570 struct drm_connector **connector_set = NULL, *connector;570 struct drm_connector **connector_set, *connector;
571 struct drm_framebuffer *fb = NULL;571 struct drm_framebuffer *fb;
572 struct drm_display_mode *mode = NULL;572 struct drm_display_mode *mode;
573 struct drm_mode_set set;573 struct drm_mode_set set;
574 uint32_t __user *set_connectors_ptr;574 uint32_t __user *set_connectors_ptr;
575 struct drm_modeset_acquire_ctx ctx;575 struct drm_modeset_acquire_ctx ctx;
@@ -598,6 +598,10 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data, · 22 unmodified lines
598 mutex_lock(&crtc->dev->mode_config.mutex);598 mutex_lock(&crtc->dev->mode_config.mutex);
599 drm_modeset_acquire_init(&ctx, DRM_MODESET_ACQUIRE_INTERRUPTIBLE);599 drm_modeset_acquire_init(&ctx, DRM_MODESET_ACQUIRE_INTERRUPTIBLE);
600retry:600retry:
601 connector_set = NULL;
602 fb = NULL;
603 mode = NULL;
604
601 ret = drm_modeset_lock_all_ctx(crtc->dev, &ctx);605 ret = drm_modeset_lock_all_ctx(crtc->dev, &ctx);
602 if (ret)606 if (ret)
603 goto out;607 goto out;
drivers/gpu/drm/drm_edid.c+4−1
@@ -113,6 +113,9 @@ static const struct edid_quirk { · 112 unmodified lines
113 /* AEO model 0 reports 8 bpc, but is a 6 bpc panel */113 /* AEO model 0 reports 8 bpc, but is a 6 bpc panel */
114 { "AEO", 0, EDID_QUIRK_FORCE_6BPC },114 { "AEO", 0, EDID_QUIRK_FORCE_6BPC },
115 115
116 /* BOE model on HP Pavilion 15-n233sl reports 8 bpc, but is a 6 bpc panel */
117 { "BOE", 0x78b, EDID_QUIRK_FORCE_6BPC },
118
116 /* CPT panel of Asus UX303LA reports 8 bpc, but is a 6 bpc panel */119 /* CPT panel of Asus UX303LA reports 8 bpc, but is a 6 bpc panel */
117 { "CPT", 0x17df, EDID_QUIRK_FORCE_6BPC },120 { "CPT", 0x17df, EDID_QUIRK_FORCE_6BPC },
118 121
@@ -4279,7 +4282,7 @@ static void drm_parse_ycbcr420_deep_color_info(struct drm_connector *connector, · 4160 unmodified lines
4279 struct drm_hdmi_info *hdmi = &connector->display_info.hdmi;4282 struct drm_hdmi_info *hdmi = &connector->display_info.hdmi;
4280 4283
4281 dc_mask = db[7] & DRM_EDID_YCBCR420_DC_MASK;4284 dc_mask = db[7] & DRM_EDID_YCBCR420_DC_MASK;
4282 hdmi->y420_dc_modes |= dc_mask;4285 hdmi->y420_dc_modes = dc_mask;
4283}4286}
4284 4287
4285static void drm_parse_hdmi_forum_vsdb(struct drm_connector *connector,4288static void drm_parse_hdmi_forum_vsdb(struct drm_connector *connector,
drivers/gpu/drm/drm_fb_helper.c+26−65
@@ -1580,6 +1580,25 @@ unlock: · 1579 unmodified lines
1580}1580}
1581EXPORT_SYMBOL(drm_fb_helper_ioctl);1581EXPORT_SYMBOL(drm_fb_helper_ioctl);
1582 1582
1583static bool drm_fb_pixel_format_equal(const struct fb_var_screeninfo *var_1,
1584 const struct fb_var_screeninfo *var_2)
1585{
1586 return var_1->bits_per_pixel == var_2->bits_per_pixel &&
1587 var_1->grayscale == var_2->grayscale &&
1588 var_1->red.offset == var_2->red.offset &&
1589 var_1->red.length == var_2->red.length &&
1590 var_1->red.msb_right == var_2->red.msb_right &&
1591 var_1->green.offset == var_2->green.offset &&
1592 var_1->green.length == var_2->green.length &&
1593 var_1->green.msb_right == var_2->green.msb_right &&
1594 var_1->blue.offset == var_2->blue.offset &&
1595 var_1->blue.length == var_2->blue.length &&
1596 var_1->blue.msb_right == var_2->blue.msb_right &&
1597 var_1->transp.offset == var_2->transp.offset &&
1598 var_1->transp.length == var_2->transp.length &&
1599 var_1->transp.msb_right == var_2->transp.msb_right;
1600}
1601
1583/**1602/**
1584 * drm_fb_helper_check_var - implementation for &fb_ops.fb_check_var1603 * drm_fb_helper_check_var - implementation for &fb_ops.fb_check_var
1585 * @var: screeninfo to check1604 * @var: screeninfo to check
@@ -1590,7 +1609,6 @@ int drm_fb_helper_check_var(struct fb_var_screeninfo *var, · 4 unmodified lines
1590{1609{
1591 struct drm_fb_helper *fb_helper = info->par;1610 struct drm_fb_helper *fb_helper = info->par;
1592 struct drm_framebuffer *fb = fb_helper->fb;1611 struct drm_framebuffer *fb = fb_helper->fb;
1593 int depth;
1594 1612
1595 if (var->pixclock != 0 || in_dbg_master())1613 if (var->pixclock != 0 || in_dbg_master())
1596 return -EINVAL;1614 return -EINVAL;
@@ -1610,72 +1628,15 @@ int drm_fb_helper_check_var(struct fb_var_screeninfo *var, · 13 unmodified lines
1610 return -EINVAL;1628 return -EINVAL;
1611 }1629 }
1612 1630
1613 switch (var->bits_per_pixel) {1631 /*
1614 case 16:1632 * drm fbdev emulation doesn't support changing the pixel format at all,
1615 depth = (var->green.length == 6) ? 16 : 15;1633 * so reject all pixel format changing requests.
1616 break;1634 */
1617 case 32:1635 if (!drm_fb_pixel_format_equal(var, &info->var)) {
1618 depth = (var->transp.length > 0) ? 32 : 24;1636 DRM_DEBUG("fbdev emulation doesn't support changing the pixel format\n");
1619 break;
1620 default:
1621 depth = var->bits_per_pixel;
1622 break;
1623 }
1624
1625 switch (depth) {
1626 case 8:
1627 var->red.offset = 0;
1628 var->green.offset = 0;
1629 var->blue.offset = 0;
1630 var->red.length = 8;
1631 var->green.length = 8;
1632 var->blue.length = 8;
1633 var->transp.length = 0;
1634 var->transp.offset = 0;
1635 break;
1636 case 15:
1637 var->red.offset = 10;
1638 var->green.offset = 5;
1639 var->blue.offset = 0;
1640 var->red.length = 5;
1641 var->green.length = 5;
1642 var->blue.length = 5;
1643 var->transp.length = 1;
1644 var->transp.offset = 15;
1645 break;
1646 case 16:
1647 var->red.offset = 11;
1648 var->green.offset = 5;
1649 var->blue.offset = 0;
1650 var->red.length = 5;
1651 var->green.length = 6;
1652 var->blue.length = 5;
1653 var->transp.length = 0;
1654 var->transp.offset = 0;
1655 break;
1656 case 24:
1657 var->red.offset = 16;
1658 var->green.offset = 8;
1659 var->blue.offset = 0;
1660 var->red.length = 8;
1661 var->green.length = 8;
1662 var->blue.length = 8;
1663 var->transp.length = 0;
1664 var->transp.offset = 0;
1665 break;
1666 case 32:
1667 var->red.offset = 16;
1668 var->green.offset = 8;
1669 var->blue.offset = 0;
1670 var->red.length = 8;
1671 var->green.length = 8;
1672 var->blue.length = 8;
1673 var->transp.length = 8;
1674 var->transp.offset = 24;
1675 break;
1676 default:
1677 return -EINVAL;1637 return -EINVAL;
1678 }1638 }
1639
1679 return 0;1640 return 0;
1680}1641}
1681EXPORT_SYMBOL(drm_fb_helper_check_var);1642EXPORT_SYMBOL(drm_fb_helper_check_var);
include/drm/drm_edid.h+3−3
@@ -214,9 +214,9 @@ struct detailed_timing { · 213 unmodified lines
214#define DRM_EDID_HDMI_DC_Y444 (1 << 3)214#define DRM_EDID_HDMI_DC_Y444 (1 << 3)
215 215
216/* YCBCR 420 deep color modes */216/* YCBCR 420 deep color modes */
217#define DRM_EDID_YCBCR420_DC_48 (1 << 6)217#define DRM_EDID_YCBCR420_DC_48 (1 << 2)
218#define DRM_EDID_YCBCR420_DC_36 (1 << 5)218#define DRM_EDID_YCBCR420_DC_36 (1 << 1)
219#define DRM_EDID_YCBCR420_DC_30 (1 << 4)219#define DRM_EDID_YCBCR420_DC_30 (1 << 0)
220#define DRM_EDID_YCBCR420_DC_MASK (DRM_EDID_YCBCR420_DC_48 | \220#define DRM_EDID_YCBCR420_DC_MASK (DRM_EDID_YCBCR420_DC_48 | \
221 DRM_EDID_YCBCR420_DC_36 | \221 DRM_EDID_YCBCR420_DC_36 | \
222 DRM_EDID_YCBCR420_DC_30)222 DRM_EDID_YCBCR420_DC_30)

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t