From: Thomas Haemmerle <[email protected]>

Two changes are needed to use lcdif_drv as the primary barebox boot
framebuffer:

  - register_framebuffer() leaves the cdev disabled; the splash command
    opens fb0 via the fb API and never goes through the cdev open path
    that triggers fb_enable lazily, so it bails on
    "fb_open: No such file or directory".  fb_enable() at the end of
    register_fb so the controller is up by the time anything blits.

  - Set info->register_simplefb and call fb_register_simplefb() so
    DRM_SIMPLEDRM in Linux sees the boot framebuffer as a
    simple-framebuffer DT node and keeps the splash visible until its
    native LCDIF driver binds.

Signed-off-by: Thomas Haemmerle <[email protected]>
---
 drivers/video/lcdif_kms.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/video/lcdif_kms.c b/drivers/video/lcdif_kms.c
index 5487d1298c..e3d1985dc9 100644
--- a/drivers/video/lcdif_kms.c
+++ b/drivers/video/lcdif_kms.c
@@ -459,6 +459,16 @@ static int lcdif_register_fb(struct lcdif_drm_private 
*lcdif)
        if (ret)
                return ret;
 
+       /* expose as simple-framebuffer for Linux DRM_SIMPLEDRM handoff */
+       info->register_simplefb = 1;
+       fb_register_simplefb(info);
+
+       /* enable now so the splash command can blit into a live fb */
+       ret = fb_enable(info);
+       if (ret)
+               dev_warn(lcdif->dev, "failed to enable framebuffer: %pe\n",
+                        ERR_PTR(ret));
+
        dev_info(lcdif->dev, "Registered %s on LCDIF%d, type primary\n",
                 info->cdev.name, lcdif->id);
 
-- 
2.43.0


Reply via email to