gpu/drm: ingenic: Avoid null pointer deference in plane atomic update
It is possible that there is no drm_framebuffer associated with a given plane state. v2: Handle drm_plane->state which can be NULL too Signed-off-by: Paul Cercueil <paul@crapouillou.net> Link: https://patchwork.freedesktop.org/patch/msgid/20191210144142.33143-2-paul@crapouillou.net # *** extracted tags *** Acked-by: Sam Ravnborg <sam@ravnborg.org>
This commit is contained in:
Родитель
9482ae6ea7
Коммит
354b051c5d
|
@ -372,14 +372,18 @@ static void ingenic_drm_plane_atomic_update(struct drm_plane *plane,
|
||||||
struct ingenic_drm *priv = drm_plane_get_priv(plane);
|
struct ingenic_drm *priv = drm_plane_get_priv(plane);
|
||||||
struct drm_plane_state *state = plane->state;
|
struct drm_plane_state *state = plane->state;
|
||||||
unsigned int width, height, cpp;
|
unsigned int width, height, cpp;
|
||||||
|
dma_addr_t addr;
|
||||||
|
|
||||||
width = state->crtc->state->adjusted_mode.hdisplay;
|
if (state && state->fb) {
|
||||||
height = state->crtc->state->adjusted_mode.vdisplay;
|
addr = drm_fb_cma_get_gem_addr(state->fb, state, 0);
|
||||||
cpp = state->fb->format->cpp[plane->index];
|
width = state->crtc->state->adjusted_mode.hdisplay;
|
||||||
|
height = state->crtc->state->adjusted_mode.vdisplay;
|
||||||
|
cpp = state->fb->format->cpp[plane->index];
|
||||||
|
|
||||||
priv->dma_hwdesc->addr = drm_fb_cma_get_gem_addr(state->fb, state, 0);
|
priv->dma_hwdesc->addr = addr;
|
||||||
priv->dma_hwdesc->cmd = width * height * cpp / 4;
|
priv->dma_hwdesc->cmd = width * height * cpp / 4;
|
||||||
priv->dma_hwdesc->cmd |= JZ_LCD_CMD_EOF_IRQ;
|
priv->dma_hwdesc->cmd |= JZ_LCD_CMD_EOF_IRQ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ingenic_drm_encoder_atomic_mode_set(struct drm_encoder *encoder,
|
static void ingenic_drm_encoder_atomic_mode_set(struct drm_encoder *encoder,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче