Skip to content

Commit de53874

Browse files
committed
Merge tag 'drm-misc-fixes-2019-03-25' of git://anongit.freedesktop.org/drm/drm-misc into drm-fixes
- A bunch of fixes to cleanup path in meson - Fix the DMT TDMS clock filtering on meson - Fix an issue with NV12 buffers on rockchip when scaling is active - Fix a couple of use-after-free Signed-off-by: Dave Airlie <airlied@redhat.com> From: Maxime Ripard <maxime.ripard@bootlin.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190325104523.obnfelgvaglyhe5e@flea
2 parents a511430 + 3d565a2 commit de53874

File tree

5 files changed

+25
-16
lines changed

5 files changed

+25
-16
lines changed

drivers/gpu/drm/meson/meson_drv.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -337,12 +337,14 @@ static int meson_drv_bind_master(struct device *dev, bool has_components)
337337

338338
ret = drm_dev_register(drm, 0);
339339
if (ret)
340-
goto free_drm;
340+
goto uninstall_irq;
341341

342342
drm_fbdev_generic_setup(drm, 32);
343343

344344
return 0;
345345

346+
uninstall_irq:
347+
drm_irq_uninstall(drm);
346348
free_drm:
347349
drm_dev_put(drm);
348350

@@ -356,8 +358,8 @@ static int meson_drv_bind(struct device *dev)
356358

357359
static void meson_drv_unbind(struct device *dev)
358360
{
359-
struct drm_device *drm = dev_get_drvdata(dev);
360-
struct meson_drm *priv = drm->dev_private;
361+
struct meson_drm *priv = dev_get_drvdata(dev);
362+
struct drm_device *drm = priv->drm;
361363

362364
if (priv->canvas) {
363365
meson_canvas_free(priv->canvas, priv->canvas_id_osd1);
@@ -367,6 +369,7 @@ static void meson_drv_unbind(struct device *dev)
367369
}
368370

369371
drm_dev_unregister(drm);
372+
drm_irq_uninstall(drm);
370373
drm_kms_helper_poll_fini(drm);
371374
drm_mode_config_cleanup(drm);
372375
drm_dev_put(drm);

drivers/gpu/drm/meson/meson_dw_hdmi.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -569,7 +569,8 @@ dw_hdmi_mode_valid(struct drm_connector *connector,
569569
DRM_DEBUG_DRIVER("Modeline " DRM_MODE_FMT "\n", DRM_MODE_ARG(mode));
570570

571571
/* If sink max TMDS clock, we reject the mode */
572-
if (mode->clock > connector->display_info.max_tmds_clock)
572+
if (connector->display_info.max_tmds_clock &&
573+
mode->clock > connector->display_info.max_tmds_clock)
573574
return MODE_BAD;
574575

575576
/* Check against non-VIC supported modes */

drivers/gpu/drm/rockchip/rockchip_drm_vop.c

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,18 @@ static void vop_core_clks_disable(struct vop *vop)
541541
clk_disable(vop->hclk);
542542
}
543543

544+
static void vop_win_disable(struct vop *vop, const struct vop_win_data *win)
545+
{
546+
if (win->phy->scl && win->phy->scl->ext) {
547+
VOP_SCL_SET_EXT(vop, win, yrgb_hor_scl_mode, SCALE_NONE);
548+
VOP_SCL_SET_EXT(vop, win, yrgb_ver_scl_mode, SCALE_NONE);
549+
VOP_SCL_SET_EXT(vop, win, cbcr_hor_scl_mode, SCALE_NONE);
550+
VOP_SCL_SET_EXT(vop, win, cbcr_ver_scl_mode, SCALE_NONE);
551+
}
552+
553+
VOP_WIN_SET(vop, win, enable, 0);
554+
}
555+
544556
static int vop_enable(struct drm_crtc *crtc)
545557
{
546558
struct vop *vop = to_vop(crtc);
@@ -586,7 +598,7 @@ static int vop_enable(struct drm_crtc *crtc)
586598
struct vop_win *vop_win = &vop->win[i];
587599
const struct vop_win_data *win = vop_win->data;
588600

589-
VOP_WIN_SET(vop, win, enable, 0);
601+
vop_win_disable(vop, win);
590602
}
591603
spin_unlock(&vop->reg_lock);
592604

@@ -735,7 +747,7 @@ static void vop_plane_atomic_disable(struct drm_plane *plane,
735747

736748
spin_lock(&vop->reg_lock);
737749

738-
VOP_WIN_SET(vop, win, enable, 0);
750+
vop_win_disable(vop, win);
739751

740752
spin_unlock(&vop->reg_lock);
741753
}
@@ -1622,7 +1634,7 @@ static int vop_initial(struct vop *vop)
16221634
int channel = i * 2 + 1;
16231635

16241636
VOP_WIN_SET(vop, win, channel, (channel + 1) << 4 | channel);
1625-
VOP_WIN_SET(vop, win, enable, 0);
1637+
vop_win_disable(vop, win);
16261638
VOP_WIN_SET(vop, win, gate, 1);
16271639
}
16281640

drivers/gpu/drm/vgem/vgem_drv.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -191,13 +191,9 @@ static struct drm_gem_object *vgem_gem_create(struct drm_device *dev,
191191
ret = drm_gem_handle_create(file, &obj->base, handle);
192192
drm_gem_object_put_unlocked(&obj->base);
193193
if (ret)
194-
goto err;
194+
return ERR_PTR(ret);
195195

196196
return &obj->base;
197-
198-
err:
199-
__vgem_gem_destroy(obj);
200-
return ERR_PTR(ret);
201197
}
202198

203199
static int vgem_gem_dumb_create(struct drm_file *file, struct drm_device *dev,

drivers/gpu/drm/vkms/vkms_gem.c

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,8 @@ struct drm_gem_object *vkms_gem_create(struct drm_device *dev,
111111

112112
ret = drm_gem_handle_create(file, &obj->gem, handle);
113113
drm_gem_object_put_unlocked(&obj->gem);
114-
if (ret) {
115-
drm_gem_object_release(&obj->gem);
116-
kfree(obj);
114+
if (ret)
117115
return ERR_PTR(ret);
118-
}
119116

120117
return &obj->gem;
121118
}

0 commit comments

Comments
 (0)