It is possible that there is no drm_framebuffer associated with a given
plane state.

Signed-off-by: Paul Cercueil <p...@crapouillou.net>
---
 drivers/gpu/drm/ingenic/ingenic-drm.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/ingenic/ingenic-drm.c 
b/drivers/gpu/drm/ingenic/ingenic-drm.c
index 2e2ed653e9c6..6dc4b06e7e68 100644
--- a/drivers/gpu/drm/ingenic/ingenic-drm.c
+++ b/drivers/gpu/drm/ingenic/ingenic-drm.c
@@ -371,14 +371,17 @@ 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;
+       struct drm_framebuffer *fb = state->fb;
 
-       width = state->crtc->state->adjusted_mode.hdisplay;
-       height = state->crtc->state->adjusted_mode.vdisplay;
-       cpp = state->fb->format->cpp[plane->index];
+       if (fb) {
+               width = state->crtc->state->adjusted_mode.hdisplay;
+               height = state->crtc->state->adjusted_mode.vdisplay;
+               cpp = fb->format->cpp[plane->index];
 
-       priv->dma_hwdesc->addr = drm_fb_cma_get_gem_addr(state->fb, state, 0);
-       priv->dma_hwdesc->cmd = width * height * cpp / 4;
-       priv->dma_hwdesc->cmd |= JZ_LCD_CMD_EOF_IRQ;
+               priv->dma_hwdesc->addr = drm_fb_cma_get_gem_addr(fb, state, 0);
+               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,
-- 
2.24.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to