[U-Boot] cfb_console.c: DM_VIDEO conversion questions/suggestions

Stefan Agner stefan at agner.ch
Mon May 27 07:22:05 UTC 2019


On 27.05.2019 07:21, Igor Opaniuk wrote:
> Hi everyone,
> 
> I've finally started looking into the cfb_console.c driver and it's
> conversion to DM_VIDEO after our initial discussion [1].
> Unfortunately I've a bit underestimated the amount of effort that
> should be done, as mxsfb.c in the Linux mainline obviously pulls the
> whole core fb subsystem
> (drivers/video/fbdev/core), which can take a while and frankly I doubt
> that this is a proper way to do things here.

Just wanted to mention that the Linux mxsfb fbdev driver is considered
deprecated.

See: https://lore.kernel.org/patchwork/patch/950619/#1135990

Also note that the new DRM driver does use OF graph style bindings, see:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/display/mxsfb.txt

> 
> Taking into account that the deadline for DM_VIDEO conversion is
> 2019.07, it's unlikely that we will manage to do the full conversions
> this cfb_console driver and all dependent hw specific drivers in a
> proper way (where we can provide information about videomodes as
> properties in a proper nodes in DT).

IMHO, if the deadline hinders us to do it properly, we should extend the
deadline.

> 
> Currently the init chain for fb stuff in U-boot (on the other hand, in
> the Linux, hw specific driver is probed initially, then they trigger
> fb common routines that are needed from `video/fbdev/core`):
> stdio_add_devices() -> ./common/stdio.c -> drv_video_init ()
> (drivers/cfb_console.c) - > video_hw_init (particular hw backend,
> which was statically linked at compile time with a proper
> video_hw_init() implementation, for example look into mxsfb.c)
> 
> 2 ways of conversion that come to my mind:
> 1. Start with simple DM wrappers in cfb_console.c, and introduce dumb
> DT nodes so the device at least can be probed. All video configuration
> will be stored the same way as before in the U-boot env (for example,
> "videomode=video=ctfb:x:640,y:480,depth:18,pclk:39722,le:48,ri:16,up:33,lo:10,hs:96,vs:2,sync:0,vmode:0\0").
> Then, step by step, driver by driver, we can move some properties to
> DT and try to sync Linux/U-boot video DT nodes (at least avoid
> divergence of tree nodes, so Linux/U-boot video-related DT nodes
> conform to each other). Yes, this is kind of dirty workaround, but at
> least this something we can start with, and with minimal amount of
> intrusive changes.
> 2. Perform full conversion, where everything works the same way as in
> Linux kernel. Initially I thought that it could be the proper way to
> go, but taking into account all differences in the implementation of
> fb in U-boot/Linux (even the way how the drivers are initialized), I
> think we will just end up pulling the whole big piece from the Linux
> kernel, that will definitely take a while (especially further support
> of this code base, testing/fixing issues etc.).

Is there maybe option 3, start a new DM_VIDEO capable driver mxsfb
driver without converting the existing stuff. It is probably not much
different from 2, but it allows you to start with a minimal feature set,
and go from there incrementally. That is what Marek did when he
implemented the Linux mxsfb DRM driver..

Haven't looked into the code much, so this might not really make
sense...

--
Stefan

> 
> Just to be aware about the amount of effort that should be done:
> 
> : u-boot.git$ grep -e CONFIG_CFB_CONSOLE -r ./configs/
> ./configs/T1042RDB_PI_SDCARD_defconfig:CONFIG_CFB_CONSOLE_ANSI=y
> ./configs/T1042D4RDB_SDCARD_defconfig:CONFIG_CFB_CONSOLE_ANSI=y
> ./configs/T1042RDB_PI_NAND_SECURE_BOOT_defconfig:CONFIG_CFB_CONSOLE_ANSI=y
> ./configs/nokia_rx51_defconfig:CONFIG_CFB_CONSOLE_ANSI=y
> ./configs/T1042D4RDB_NAND_defconfig:CONFIG_CFB_CONSOLE_ANSI=y
> ./configs/T1042RDB_PI_SPIFLASH_defconfig:CONFIG_CFB_CONSOLE_ANSI=y
> ./configs/T1042RDB_PI_NAND_defconfig:CONFIG_CFB_CONSOLE_ANSI=y
> ./configs/T1042D4RDB_defconfig:CONFIG_CFB_CONSOLE_ANSI=y
> ./configs/T1042RDB_PI_defconfig:CONFIG_CFB_CONSOLE_ANSI=y
> ./configs/eb_cpu5282_internal_defconfig:# CONFIG_CFB_CONSOLE is not set
> ./configs/T1042D4RDB_SPIFLASH_defconfig:CONFIG_CFB_CONSOLE_ANSI=y
> ./configs/eb_cpu5282_defconfig:# CONFIG_CFB_CONSOLE is not set
> ./configs/T1042D4RDB_SECURE_BOOT_defconfig:CONFIG_CFB_CONSOLE_ANSI=y
> 
> Additional Kconfig symbols, that depend on CFB_CONSOLE:
> * VGA_AS_SINGLE_DEVICE
> * CONSOLE_EXTRA_INFO
> * CONSOLE_SCROLL_LINES
> * SYS_CONSOLE_BG_COL
> * SYS_CONSOLE_FG_COL
> 
> Drivers, that don't imply CFG_CONSOLE, but are used alongside with
> cfb_console.c (kind of particular hw backend driver for fb console):
> * mxsfb.c
> * mb862xx.c
> * sunxi_display.c
> * ati_radeon_fb.c
> * fsl_dcu_fb.c
> * omap3_dss.c
> * da8xx-fb.c
> 
> Looking forward to your suggestions/recommendations here (and let me
> know if I missed something), thanks!
> 
> [1] https://lists.denx.de/pipermail/u-boot/2019-April/365506.html


More information about the U-Boot mailing list