Commit 354b051c authored by Paul Cercueil's avatar Paul Cercueil
Browse files

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: default avatarPaul Cercueil <paul@crapouillou.net>
Link: https://patchwork.freedesktop.org/patch/msgid/20191210144142.33143-2-paul@crapouillou.net


# *** extracted tags ***
Acked-by: default avatarSam Ravnborg <sam@ravnborg.org>
parent 9482ae6e
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -372,15 +372,19 @@ static void ingenic_drm_plane_atomic_update(struct drm_plane *plane,
	struct ingenic_drm *priv = drm_plane_get_priv(plane);
	struct drm_plane_state *state = plane->state;
	unsigned int width, height, cpp;
	dma_addr_t addr;

	if (state && state->fb) {
		addr = drm_fb_cma_get_gem_addr(state->fb, state, 0);
		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 |= JZ_LCD_CMD_EOF_IRQ;
	}
}

static void ingenic_drm_encoder_atomic_mode_set(struct drm_encoder *encoder,
						struct drm_crtc_state *crtc_state,