* drm: fix possible use-after-free
* dbi: fix SPI Type 1 transfer * drm_fb_helper: use memcpy_io on bochs' sparc64 * mcde: fix stability * panel: fix display noise on auo,kd101n80-45na * panel: delay HPD checks for boe_nv133fhm_n61 * bridge: drop connector check in nwl-dsi bridge * bridge: set proper bridge type for adv7511 * of: fix a double free -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEchf7rIzpz2NEoWjlaA3BHVMLeiMFAl8gBZkACgkQaA3BHVML eiMf4Af+ITzLTKmaaWfQyiaE9KsMNa0dzv2bBpG/H15RevJ40O2qEgY2R4hYmONZ zMSXLfT8fgj0ZVEac9jE2VoLi6QtAcB+cB9k0jfIL4kT5aG33sek9go/LmAtL9FB tyqS3k4lt8wxnVjVJs+Cqiz4BpnKHC9RxxGB8l83kPRbSE+Ifq3sciB0HJx3x6eI K2FQqphsYuXyIdewJNCoZ5RKHaS9UjQutargnwWi2Tb3OAmUblZxvojbjAtNlHhx PkOD8/iCygsL87GCawoopLnWaPJTDmOEKmxttzLs37Dqw2rhTsRU47/E6MlBZuwe LBuXCAAdNs4iRDj9HUoIXnup4YGXOw== =gfQ2 -----END PGP SIGNATURE----- Merge tag 'drm-misc-fixes-2020-07-28' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes * drm: fix possible use-after-free * dbi: fix SPI Type 1 transfer * drm_fb_helper: use memcpy_io on bochs' sparc64 * mcde: fix stability * panel: fix display noise on auo,kd101n80-45na * panel: delay HPD checks for boe_nv133fhm_n61 * bridge: drop connector check in nwl-dsi bridge * bridge: set proper bridge type for adv7511 * of: fix a double free Signed-off-by: Dave Airlie <airlied@redhat.com> From: Thomas Zimmermann <tzimmermann@suse.de> Link: https://patchwork.freedesktop.org/patch/msgid/20200728110446.GA8076@linux-uq9g
This commit is contained in:
commit
a4a2739beb
|
@ -146,6 +146,7 @@ int bochs_kms_init(struct bochs_device *bochs)
|
|||
bochs->dev->mode_config.preferred_depth = 24;
|
||||
bochs->dev->mode_config.prefer_shadow = 0;
|
||||
bochs->dev->mode_config.prefer_shadow_fbdev = 1;
|
||||
bochs->dev->mode_config.fbdev_use_iomem = true;
|
||||
bochs->dev->mode_config.quirk_addfb_prefer_host_byte_order = true;
|
||||
|
||||
bochs->dev->mode_config.funcs = &bochs_mode_funcs;
|
||||
|
|
|
@ -1224,6 +1224,7 @@ static int adv7511_probe(struct i2c_client *i2c, const struct i2c_device_id *id)
|
|||
|
||||
adv7511->bridge.funcs = &adv7511_bridge_funcs;
|
||||
adv7511->bridge.of_node = dev->of_node;
|
||||
adv7511->bridge.type = DRM_MODE_CONNECTOR_HDMIA;
|
||||
|
||||
drm_bridge_add(&adv7511->bridge);
|
||||
|
||||
|
|
|
@ -917,11 +917,6 @@ static int nwl_dsi_bridge_attach(struct drm_bridge *bridge,
|
|||
struct drm_panel *panel;
|
||||
int ret;
|
||||
|
||||
if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) {
|
||||
DRM_ERROR("Fix bridge driver to make connector optional!");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
ret = drm_of_find_panel_or_bridge(dsi->dev->of_node, 1, 0, &panel,
|
||||
&panel_bridge);
|
||||
if (ret)
|
||||
|
|
|
@ -399,7 +399,11 @@ static void drm_fb_helper_dirty_blit_real(struct drm_fb_helper *fb_helper,
|
|||
unsigned int y;
|
||||
|
||||
for (y = clip->y1; y < clip->y2; y++) {
|
||||
memcpy(dst, src, len);
|
||||
if (!fb_helper->dev->mode_config.fbdev_use_iomem)
|
||||
memcpy(dst, src, len);
|
||||
else
|
||||
memcpy_toio((void __iomem *)dst, src, len);
|
||||
|
||||
src += fb->pitches[0];
|
||||
dst += fb->pitches[0];
|
||||
}
|
||||
|
|
|
@ -871,9 +871,6 @@ err:
|
|||
* @file_priv: drm file-private structure
|
||||
*
|
||||
* Open an object using the global name, returning a handle and the size.
|
||||
*
|
||||
* This handle (of course) holds a reference to the object, so the object
|
||||
* will not go away until the handle is deleted.
|
||||
*/
|
||||
int
|
||||
drm_gem_open_ioctl(struct drm_device *dev, void *data,
|
||||
|
@ -898,14 +895,15 @@ drm_gem_open_ioctl(struct drm_device *dev, void *data,
|
|||
|
||||
/* drm_gem_handle_create_tail unlocks dev->object_name_lock. */
|
||||
ret = drm_gem_handle_create_tail(file_priv, obj, &handle);
|
||||
drm_gem_object_put_unlocked(obj);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto err;
|
||||
|
||||
args->handle = handle;
|
||||
args->size = obj->size;
|
||||
|
||||
return 0;
|
||||
err:
|
||||
drm_gem_object_put_unlocked(obj);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -923,7 +923,7 @@ static int mipi_dbi_spi1_transfer(struct mipi_dbi *dbi, int dc,
|
|||
}
|
||||
}
|
||||
|
||||
tr.len = chunk;
|
||||
tr.len = chunk * 2;
|
||||
len -= chunk;
|
||||
|
||||
ret = spi_sync(spi, &m);
|
||||
|
|
|
@ -322,10 +322,8 @@ static int drm_of_lvds_get_remote_pixels_type(
|
|||
* configurations by passing the endpoints explicitly to
|
||||
* drm_of_lvds_get_dual_link_pixel_order().
|
||||
*/
|
||||
if (!current_pt || pixels_type != current_pt) {
|
||||
of_node_put(remote_port);
|
||||
if (!current_pt || pixels_type != current_pt)
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
return pixels_type;
|
||||
|
|
|
@ -1060,9 +1060,14 @@ static void mcde_display_update(struct drm_simple_display_pipe *pipe,
|
|||
*/
|
||||
if (fb) {
|
||||
mcde_set_extsrc(mcde, drm_fb_cma_get_gem_addr(fb, pstate, 0));
|
||||
if (!mcde->video_mode)
|
||||
/* Send a single frame using software sync */
|
||||
mcde_display_send_one_frame(mcde);
|
||||
if (!mcde->video_mode) {
|
||||
/*
|
||||
* Send a single frame using software sync if the flow
|
||||
* is not active yet.
|
||||
*/
|
||||
if (mcde->flow_active == 0)
|
||||
mcde_display_send_one_frame(mcde);
|
||||
}
|
||||
dev_info_once(mcde->dev, "sent first display update\n");
|
||||
} else {
|
||||
/*
|
||||
|
|
|
@ -615,9 +615,9 @@ static const struct panel_desc boe_tv101wum_nl6_desc = {
|
|||
static const struct drm_display_mode auo_kd101n80_45na_default_mode = {
|
||||
.clock = 157000,
|
||||
.hdisplay = 1200,
|
||||
.hsync_start = 1200 + 80,
|
||||
.hsync_end = 1200 + 80 + 24,
|
||||
.htotal = 1200 + 80 + 24 + 36,
|
||||
.hsync_start = 1200 + 60,
|
||||
.hsync_end = 1200 + 60 + 24,
|
||||
.htotal = 1200 + 60 + 24 + 56,
|
||||
.vdisplay = 1920,
|
||||
.vsync_start = 1920 + 16,
|
||||
.vsync_end = 1920 + 16 + 4,
|
||||
|
|
|
@ -1250,7 +1250,21 @@ static const struct panel_desc boe_nv133fhm_n61 = {
|
|||
.height = 165,
|
||||
},
|
||||
.delay = {
|
||||
.hpd_absent_delay = 200,
|
||||
/*
|
||||
* When power is first given to the panel there's a short
|
||||
* spike on the HPD line. It was explained that this spike
|
||||
* was until the TCON data download was complete. On
|
||||
* one system this was measured at 8 ms. We'll put 15 ms
|
||||
* in the prepare delay just to be safe and take it away
|
||||
* from the hpd_absent_delay (which would otherwise be 200 ms)
|
||||
* to handle this. That means:
|
||||
* - If HPD isn't hooked up you still have 200 ms delay.
|
||||
* - If HPD is hooked up we won't try to look at it for the
|
||||
* first 15 ms.
|
||||
*/
|
||||
.prepare = 15,
|
||||
.hpd_absent_delay = 185,
|
||||
|
||||
.unprepare = 500,
|
||||
},
|
||||
.bus_format = MEDIA_BUS_FMT_RGB888_1X24,
|
||||
|
|
|
@ -865,6 +865,18 @@ struct drm_mode_config {
|
|||
*/
|
||||
bool prefer_shadow_fbdev;
|
||||
|
||||
/**
|
||||
* @fbdev_use_iomem:
|
||||
*
|
||||
* Set to true if framebuffer reside in iomem.
|
||||
* When set to true memcpy_toio() is used when copying the framebuffer in
|
||||
* drm_fb_helper.drm_fb_helper_dirty_blit_real().
|
||||
*
|
||||
* FIXME: This should be replaced with a per-mapping is_iomem
|
||||
* flag (like ttm does), and then used everywhere in fbdev code.
|
||||
*/
|
||||
bool fbdev_use_iomem;
|
||||
|
||||
/**
|
||||
* @quirk_addfb_prefer_xbgr_30bpp:
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue