
In order to display a boot picture or an error message, the i.MX8MP display pipeline must be enabled. The SoC has support for various interfaces (LVDS, HDMI, DSI). The one supported in this series is the standard 4-lane LVDS output. The minimal setup is thus composed of: * An LCD InterFace (LCDIF) with an AXI/APB interface, generating a pixel stream * One LVDS Display Bridge (LDB), also named pixel mapper, which receives the pixel stream and route it to one or two (possibly combined) LVDS displays. * All necessary clocks and power controls coming from the MEDIAMIX control block.
Patch 1 adds a very useful helper to the core in order to grab devices through endpoints instead of being limited to phandles. Video pipelines being often described using graphs endpoints, the introduced helper is used several times in the serires (there are 3 LCDIF, one of them being connected to the LDB, itself having 2 ports).
Patch 2 is a fix which is necessary for this series to work properly, but is way broader than just this use case. In practice, when assigned clocks are defined in the device tree, the clock uclass tries to assign the parents first and then sets them to the correct frequency. This only works if the parents have been enabled themselves. Otherwise we end-up with a non-clocked parent. I believe this is not the intended behavior in general, but more importantly on the i.MX8MP, there are "clock slices" which have pre-requisites in order to be modified and selecting an ungated parent is one of them.
All the other patches progressively build support for the whole video pipeline. Regarding the LCDIF driver, there is already a similar driver for older i.MX SoCs but I didn't manage to get it to work. It was written more than a decade ago while device-model, clocks and others were not yet generically supported. Thus, numerous ad-hoc solutions were implemented, which no longer fit today's requirements. I preferred to add a new "clean" driver instead of modifying the existing one because of the too high risk of breaking these platforms. Once proper clocks/power-domain descriptions will be added to them they might be converted (and tested) to work with the "new" implementation, but going the opposite way felt drawback.
--- Changes in v3: - Fix a clock name in the imx8mp clock driver (mismatch between Linux and U-Boot). - Fixed the Azure tests with extra changes in the test files and sandbox configurations: https://dev.azure.com/u-boot/u-boot/_build/results?buildId=10296&view=re... - Link to v2: https://lore.kernel.org/r/20241205-ge-mainline-display-support-v2-0-4683bb43...
Changes in v2: - Add ISP clocks to avoid harmless errors when shutting down the pipeline. - Add power domain refcounting to avoid shutting down a power domain already disabled. This is useful when a device points several times to the same power domain in the DT. - Ensure the mediamix driver frees all the power domains it got a reference on. - Add an in-tree user as requested by Fabio: the EVK. - Use the same Kconfig prompts as in Linux. - Add sandbox tests for uclass_get_device_by_endpoint(). - Enclosed media clocks definitions within #if CONFIG_IS_ENABLED() guards to avoid bloating the SPL and configurations without video support, as Adam and Fabio advised. - Disable the enabled clocks in the remove path of the mediamix block driver. - Fix many typos. - Fix checkpatch warnings. - Rebase on next. - Collect tags - Link to v1: https://lore.kernel.org/r/20240910101344.110633-1-miquel.raynal@bootlin.com
--- Miquel Raynal (13): dm: doc: Fix example dm: core: Add a helper to retrieve devices through graph endpoints sandbox: Add a fake DSI controller and link it to the panel test: dm: test-fdt: Add checks for uclass_get_device_by_endpoint() power-domain: Add refcounting clk: Ensure the parent clocks are enabled while reparenting clk: imx8mp: Add media related clocks imx: power-domain: Describe the i.MX8 MEDIAMIX domain imx: power-domain: Add support for the MEDIAMIX control block video: imx: Fix Makefile in order to be able to add other imx drivers video: imx: Add LDB driver video: imx: Add LCDIF driver imx8mp_evk: Enable display support
arch/sandbox/dts/test.dts | 23 ++ configs/imx8mp_evk_defconfig | 7 + configs/sandbox64_defconfig | 1 + configs/sandbox_flattree_defconfig | 1 + doc/develop/driver-model/design.rst | 2 +- drivers/clk/clk-uclass.c | 21 +- drivers/clk/imx/clk-imx8mp.c | 69 +++++ drivers/core/uclass.c | 62 +++++ drivers/firmware/scmi/sandbox-scmi_devices.c | 1 + drivers/power/domain/Kconfig | 7 + drivers/power/domain/Makefile | 1 + drivers/power/domain/imx8m-power-domain.c | 17 ++ drivers/power/domain/imx8mp-mediamix.c | 208 +++++++++++++++ drivers/power/domain/power-domain-uclass.c | 37 ++- drivers/power/domain/sandbox-power-domain-test.c | 1 + drivers/video/Makefile | 2 +- drivers/video/imx/Kconfig | 9 + drivers/video/imx/Makefile | 4 +- drivers/video/imx/lcdif.c | 314 +++++++++++++++++++++++ drivers/video/imx/ldb.c | 251 ++++++++++++++++++ include/dm/uclass.h | 21 ++ include/power-domain.h | 4 +- test/dm/power-domain.c | 2 +- test/dm/test-fdt.c | 20 +- 24 files changed, 1072 insertions(+), 13 deletions(-) --- base-commit: c498b6cace9e0de45ea12146312f5a6f43a03a9b change-id: 20241205-ge-mainline-display-support-00cf60fbd2cc
Best regards,