This driver uses a single GEM object even when there are multiple
planes. Starting with commit 746b9c62cc86 ("drm/gem: Ignore color planes
that are unused by framebuffer format"), multiple plane support was
broken on armada because the object pointers for the additional planes
were empty and drm_gem_plane_helper_prepare_fb was returning -EINVAL.

Restore functionality by pointing to the same GEM object on all planes.

Signed-off-by: Doug Brown <d...@schmorgal.com>
---
 drivers/gpu/drm/armada/armada_fb.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/armada/armada_fb.c 
b/drivers/gpu/drm/armada/armada_fb.c
index b87c71703c85..341ad4d422de 100644
--- a/drivers/gpu/drm/armada/armada_fb.c
+++ b/drivers/gpu/drm/armada/armada_fb.c
@@ -21,9 +21,10 @@ static const struct drm_framebuffer_funcs armada_fb_funcs = {
 struct armada_framebuffer *armada_framebuffer_create(struct drm_device *dev,
        const struct drm_mode_fb_cmd2 *mode, struct armada_gem_object *obj)
 {
+       const struct drm_format_info *info = drm_get_format_info(dev, mode);
        struct armada_framebuffer *dfb;
        uint8_t format, config;
-       int ret;
+       int ret, i;
 
        switch (mode->pixel_format) {
 #define FMT(drm, fmt, mod)             \
@@ -63,7 +64,8 @@ struct armada_framebuffer *armada_framebuffer_create(struct 
drm_device *dev,
 
        dfb->fmt = format;
        dfb->mod = config;
-       dfb->fb.obj[0] = &obj->obj;
+       for (i = 0; i < info->num_planes; i++)
+               dfb->fb.obj[i] = &obj->obj;
 
        drm_helper_mode_fill_fb_struct(dev, &dfb->fb, mode);
 
@@ -79,7 +81,8 @@ struct armada_framebuffer *armada_framebuffer_create(struct 
drm_device *dev,
         * the above call, but the caller will drop their reference
         * to it.  Hence we need to take our own reference.
         */
-       drm_gem_object_get(&obj->obj);
+       for (i = 0; i < info->num_planes; i++)
+               drm_gem_object_get(&obj->obj);
 
        return dfb;
 }
-- 
2.34.1

Reply via email to