[PATCH v2 00/11] video: enable boot splash on i.MX8MP with LVDS panel

Johannes Schneider johannes.schneider at leica-geosystems.com
Wed Jun 3 23:49:55 PDT 2026


v1: https://lists.infradead.org/pipermail/barebox/2026-June/056588.html

This is v2 of the i.MX8MP boot-splash series.  Review on v1 pointed out
that barebox already has in-tree drivers covering work v1 was
duplicating, plus several detail issues; v2 replaces the two new
drivers with extensions to the existing ones and addresses the
remaining review feedback.

Changes since v1:

 * Drop drivers/video/imx-lcdif.c (Michael).  drivers/video/lcdif_drv.c
   already matches "fsl,imx8mp-lcdif" and "fsl,imx93-lcdif" but had
   only been exercised on i.MX93.  Three latent issues kept it unusable
   on i.MX8MP; v2 extends it instead of duplicating:

     - Kconfig depends-on widened to ARCH_IMX8MP.  The symbol was
       silently forced to n on i.MX8MP defconfigs even though the help
       text and the driver's of_match cover i.MX8MP.

     - clk_prepare_enable() AXI/disp_axi/pix at atomic_enable.  Linux
       runtime PM handles that via genpd; barebox has none, so the
       controller's MMIO writes silently no-op'd and frames never
       ticked.

     - VPL_GET_BUS_FORMAT abort no longer kills the enable path when
       the downstream panel doesn't carry a "bus-format" property
       (typical of panel-lvds DTs).  Default to RGB888_1X24 with a
       dev_warn instead.

 * Drop drivers/video/panel-lvds.c (Ahmad).  drivers/video/simple-panel.c
   already parses display-timings, enable-gpios and a backlight phandle
   from DT -- exactly what a Linux panel-lvds node provides.  v2 makes
   three small extensions:

     - Match "panel-lvds" in the of_id table.
     - Read modes from a "panel-timing" subnode as a fallback to the
       "display-timings" container (panel-lvds uses the singular form).
     - Switch power-supply to regulator_get_optional() so panels
       without "power-supply" bind.

 * Move the LCDIF write-combine drain from a dsb() to a readback of the
   WC region in fb_damage (Lucas).  dsb() doesn't actually drain WC;
   a load from the WC region does.

 * pmdomain: keep the ADB handshake propagation before the upstream
   clock enable in imx8mp_blk_ctrl_power_on; v1's refactor accidentally
   moved it after.  Route the HSIO-specific call through a new
   pre_power_on hook in struct imx8mp_blk_ctrl_data so the generic path
   remains HSIO-agnostic (Ahmad).

 * backlight-pwm: switch the power-supply lookup to
   regulator_get_optional() so a missing power-supply property surfaces
   as -ENODEV (the IS_ERR check never caught the NULL return),
   drop the now-redundant NULL guards around regulator_enable/_disable,
   use dev_errp_probe() for the PWM lookup, and add a Fixes: tag for
   the bogus "enable-gpios" gpiod descriptor name (gpiod_get_optional()
   appends -gpios itself) (Ahmad).

 * Pick up Ahmad's Reviewed-by on the 700 MHz VIDEO_PLL1 rate entry.

 * New patch: clk: imx8mp: add 1039.5 MHz and 519.75 MHz VIDEO_PLL1
   rate entries.  arch/arm64/boot/dts/freescale/imx8mp.dtsi pins
   VIDEO_PLL1 to 1039.5 MHz via media_blk_ctrl's assigned-clock-rates
   (the right value for 1080p60 LVDS), but the rate was missing from
   barebox's PLL14xx table.  Without it, media_blk_ctrl probe fails
   -EINVAL and breaks the clock tree below LCDIF2 before lcdif2's own
   assigned-clock-rates can rebind it.  Values taken from Linux's
   imx_pll1443x_tbl.

 * Split out three smaller stand-alone changes v1 had bundled with the
   new driver:

     - lcdif: 128B AXI bursts (avoids a right-edge gap on panels whose
       stride isn't a multiple of 256 bytes -- e.g. 800px at XRGB8888).
     - lcdif: register a simplefb fixup and call fb_enable() at probe,
       so a splash command can blit straight into a live framebuffer
       and Linux's DRM_SIMPLEDRM inherits the boot fb.
     - simple-panel: lazily resolve the backlight phandle without
       failing the panel-enable chain when the backlight hasn't probed
       yet.

Tested on i.MX8MP with a single-link LVDS 800x480 at 60Hz panel: boot
splash renders, Linux DRM_SIMPLEDRM inherits the framebuffer via the
simplefb DT fixup.

Assisted-by: Claude:claude-opus-4-7

Johannes Schneider (5):
  clk: imx8mp: add 1039.5 MHz and 519.75 MHz rate entries for VIDEO_PLL1
  video: lcdif: make functional on i.MX8MP
  video: lcdif: default to RGB888_1X24 on VPL_GET_BUS_FORMAT failure
  video: simple-panel: support panel-lvds DT bindings
  video: simple-panel: lazily resolve backlight without failing

Thomas Haemmerle (6):
  clk: imx8mp: add 700 MHz rate entry for VIDEO_PLL1
  pmdomain: imx8mp-blk-ctrl: add media blk-ctrl power domain support
  video: backlight-pwm: make power-supply and enable-gpio optional
  video: lcdif: use 128B AXI bursts to avoid right-edge gap
  video: lcdif: register simplefb fixup and enable framebuffer at probe
  video: lcdif: drain write-combine framebuffer in fb_damage

 drivers/clk/imx/clk-pll14xx.c          |  3 +
 drivers/pmdomain/imx/imx8mp-blk-ctrl.c | 91 ++++++++++++++++++++++++--
 drivers/video/Kconfig                  |  4 +-
 drivers/video/backlight-pwm.c          | 16 ++---
 drivers/video/backlight.c              |  2 +-
 drivers/video/fsl-ldb.c                |  2 +-
 drivers/video/lcdif_kms.c              | 47 +++++++++----
 drivers/video/simple-panel.c           | 31 ++++++---
 8 files changed, 155 insertions(+), 41 deletions(-)


base-commit: 651343da8af78d134d7ead4d2b36095d7ddc2d8f
--
2.43.0



More information about the barebox mailing list