Re: [PATCH v9 0/6] drm/log: Introduce a new boot logger to draw the kmsg on the screen

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 18/12/2024 15:18, Petr Mladek wrote:
On Wed 2024-12-18 12:41:39, Jocelyn Falempe wrote:
On 18/12/2024 12:00, Geert Uytterhoeven wrote:
Hi Jocelyn,

On Wed, Dec 18, 2024 at 11:14 AM Jocelyn Falempe <jfalempe@xxxxxxxxxx> wrote:
On 17/12/2024 15:54, Geert Uytterhoeven wrote:
On Tue, Dec 17, 2024 at 3:46 PM Jocelyn Falempe <jfalempe@xxxxxxxxxx> wrote:
On 17/12/2024 15:19, Geert Uytterhoeven wrote:
On Wed, Dec 4, 2024 at 6:41 PM Jocelyn Falempe <jfalempe@xxxxxxxxxx> wrote:
drm_log is a simple logger that uses the drm_client API to print the kmsg boot log on the screen.
This is not a full replacement to fbcon, as it will only print the kmsg.
It will never handle user input, or a terminal because this is better done in userspace.

If you're curious on how it looks like, I've put a small demo here:
https://people.redhat.com/jfalempe/drm_log/drm_log_draft_boot_v2.mp4

Design decisions:
      * It uses the drm_client API, so it should work on all drm drivers from the start.
      * It doesn't scroll the message, that way it doesn't need to redraw the whole screen for each new message.
        It also means it doesn't have to keep drawn messages in memory, to redraw them when scrolling.
      * It uses the new non-blocking console API, so it should work well with PREEMPT_RT

I gave this a try on Koelsch (R-Car M2-W), using rcar-du.
Unfortunately I don't see any kernel messages, and my monitor complains
about no signal. Does this require special support from the driver?

It doesn't require a special support from the driver. But as it is the
first drm client other than fbdev emulation, I'm not surprised it's
broken on some driver.
I know it works on virtio-gpu, nouveau, amdgpu, and even on a OnePlus 6
(Qualcomm SDM845/freedreno), without requiring driver changes.

Do you have a serial console on this device, to check if there is
something in kmsg?

Nothing interesting to see. Compared to the fbdev client:

        rcar-du feb00000.display: [drm] Registered 2 planes with drm panic
        [drm] Initialized rcar-du 1.0.0 for feb00000.display on minor 0
        rcar-du feb00000.display: [drm] Device feb00000.display probed
       -Console: switching to colour frame buffer device 240x67
       -rcar-du feb00000.display: [drm] fb0: rcar-dudrmfb frame buffer device

I did verify (by adding my own debug prints) that the code does
get to the success case in drm_log_register().
Thanks!

Maybe you need to add console=drm_log to your kernel command line, so
the kernel will actually use this console.

Thanks, that does the trick!

Note that I do not need to specify any console= kernel command line
parameter for the fbdev console.

Yes, the fbcon console is tty0, which is hardcoded for historical reason.
Some architectures use add_preferred_console() to enable specific consoles,
I'm not sure it's allowed to use that from the drm_log_register() code.

add_preferred_console() is used when the console should get enabled
intentionally. I would split the intentions into two categories:

   + requested by the end-user on the command line, see
        __add_preferred_console(..., true) in console_setup()

   + enabled by default by a hardware definition (manufacture), see
        add_preferred_console() in:

	+ of_console_check(): generic solution via device tree
	+ acpi_parse_spcr(): generic solution via SPCR table
	+ *: hardcoded in few more HW-specific drivers

add_preferred_console() causes the console will always get enabled
when it is successfully initialized.

So, should the "drm_log" console get always enabled?

drm_log is a replacement for fbcon, which is always enabled, so I think it should also be always enabled. Otherwise you won't get any console as fbcon is no more available. drm_log doesn't really fit in the architecture/hardware model, because drm drivers are available for a wide range of architecture, and a GPU can do either fbdev/fbcon or drm_log.



I will still send a patch to add update the Kconfig help for drm_log, as
this command line argument is required to have it working.

I guess that the drm_log consoles should get enabled only when
requested by the user => documenting the command line parameter
is the right solution here.

Most embedded linux specify the console on the command line, but for laptop/desktop distributions, it's not the case as fbcon is the default since the beginning.

I see a few options here:
1) Use add_preferred_console("drm_log") if DRM_CLIENT_LOG is enabled for x86_64 and maybe arm64, so at least the main users are covered. 2) Have a DRM_CLIENT_LOG_PREFERRED_CONSOLE config, so that it's easier to setup than changing the kernel command line.
3) Use the kernel command line.

Best Regards,

--

Jocelyn


Best Regards,
Petr





[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux