From: Jocelyn Falempe <jfalempe@redhat.com>
To: Geert Uytterhoeven <geert+renesas@glider.be>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
David Airlie <airlied@gmail.com>, Daniel Vetter <daniel@ffwll.ch>
Cc: Helge Deller <deller@gmx.de>,
dri-devel@lists.freedesktop.org, linux-fbdev@vger.kernel.org,
linux-renesas-soc@vger.kernel.org
Subject: Re: [PATCH v2 7/7] drm/panic: Add support for drawing a monochrome graphical logo
Date: Fri, 14 Jun 2024 11:55:21 +0200 [thread overview]
Message-ID: <f2c00c97-4d2d-4cb8-aa9b-e9c458ca9e65@redhat.com> (raw)
In-Reply-To: <3f1a5f56213f3e4584773eb2813e212b2dff6d14.1718305355.git.geert+renesas@glider.be>
On 13/06/2024 21:18, Geert Uytterhoeven wrote:
> Re-use the existing support for boot-up logos to draw a monochrome
> graphical logo in the DRM panic handler. When no suitable graphical
> logo is available, the code falls back to the ASCII art penguin logo.
>
> Note that all graphical boot-up logos are freed during late kernel
> initialization, hence a copy must be made for later use.
Would it be possible to have the logo not in the __init section if
DRM_PANIC is set ?
The patch looks good to me anyway.
Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
>
> Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
> ---
> v2:
> - Rebased,
> - Inline trivial draw_logo_mono().
> ---
> drivers/gpu/drm/drm_panic.c | 65 +++++++++++++++++++++++++++++++++----
> drivers/video/logo/Kconfig | 2 ++
> 2 files changed, 60 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_panic.c b/drivers/gpu/drm/drm_panic.c
> index f7e22b69bb25d3be..af30f243b2802ad7 100644
> --- a/drivers/gpu/drm/drm_panic.c
> +++ b/drivers/gpu/drm/drm_panic.c
> @@ -7,11 +7,15 @@
> */
>
> #include <linux/font.h>
> +#include <linux/init.h>
> #include <linux/iosys-map.h>
> #include <linux/kdebug.h>
> #include <linux/kmsg_dump.h>
> +#include <linux/linux_logo.h>
> #include <linux/list.h>
> +#include <linux/math.h>
> #include <linux/module.h>
> +#include <linux/overflow.h>
> #include <linux/printk.h>
> #include <linux/types.h>
>
> @@ -88,6 +92,42 @@ static const struct drm_panic_line logo_ascii[] = {
> PANIC_LINE(" \\___)=(___/"),
> };
>
> +#ifdef CONFIG_LOGO
> +static const struct linux_logo *logo_mono;
> +
> +static int drm_panic_setup_logo(void)
> +{
> + const struct linux_logo *logo = fb_find_logo(1);
> + const unsigned char *logo_data;
> + struct linux_logo *logo_dup;
> +
> + if (!logo || logo->type != LINUX_LOGO_MONO)
> + return 0;
> +
> + /* The logo is __init, so we must make a copy for later use */
> + logo_data = kmemdup(logo->data,
> + size_mul(DIV_ROUND_UP(logo->width, BITS_PER_BYTE), logo->height),
> + GFP_KERNEL);
> + if (!logo_data)
> + return -ENOMEM;
> +
> + logo_dup = kmemdup(logo, sizeof(*logo), GFP_KERNEL);
> + if (!logo_dup) {
> + kfree(logo_data);
> + return -ENOMEM;
> + }
> +
> + logo_dup->data = logo_data;
> + logo_mono = logo_dup;
> +
> + return 0;
> +}
> +
> +device_initcall(drm_panic_setup_logo);
> +#else
> +#define logo_mono ((const struct linux_logo *)NULL)
> +#endif
> +
> /*
> * Color conversion
> */
> @@ -452,15 +492,22 @@ static void draw_panic_static_user(struct drm_scanout_buffer *sb)
> u32 bg_color = convert_from_xrgb8888(CONFIG_DRM_PANIC_BACKGROUND_COLOR, sb->format->format);
> const struct font_desc *font = get_default_font(sb->width, sb->height, NULL, NULL);
> struct drm_rect r_screen, r_logo, r_msg;
> + unsigned int logo_width, logo_height;
>
> if (!font)
> return;
>
> r_screen = DRM_RECT_INIT(0, 0, sb->width, sb->height);
>
> - r_logo = DRM_RECT_INIT(0, 0,
> - get_max_line_len(logo_ascii, logo_ascii_lines) * font->width,
> - logo_ascii_lines * font->height);
> + if (logo_mono) {
> + logo_width = logo_mono->width;
> + logo_height = logo_mono->height;
> + } else {
> + logo_width = get_max_line_len(logo_ascii, logo_ascii_lines) * font->width;
> + logo_height = logo_ascii_lines * font->height;
> + }
> +
> + r_logo = DRM_RECT_INIT(0, 0, logo_width, logo_height);
> r_msg = DRM_RECT_INIT(0, 0,
> min(get_max_line_len(panic_msg, msg_lines) * font->width, sb->width),
> min(msg_lines * font->height, sb->height));
> @@ -471,10 +518,14 @@ static void draw_panic_static_user(struct drm_scanout_buffer *sb)
> /* Fill with the background color, and draw text on top */
> drm_panic_fill(sb, &r_screen, bg_color);
>
> - if ((r_msg.x1 >= drm_rect_width(&r_logo) || r_msg.y1 >= drm_rect_height(&r_logo)) &&
> - drm_rect_width(&r_logo) <= sb->width && drm_rect_height(&r_logo) <= sb->height) {
> - draw_txt_rectangle(sb, font, logo_ascii, logo_ascii_lines, false, &r_logo,
> - fg_color);
> + if ((r_msg.x1 >= logo_width || r_msg.y1 >= logo_height) &&
> + logo_width <= sb->width && logo_height <= sb->height) {
> + if (logo_mono)
> + drm_panic_blit(sb, &r_logo, logo_mono->data, DIV_ROUND_UP(logo_width, 8),
> + fg_color);
> + else
> + draw_txt_rectangle(sb, font, logo_ascii, logo_ascii_lines, false, &r_logo,
> + fg_color);
> }
> draw_txt_rectangle(sb, font, panic_msg, msg_lines, true, &r_msg, fg_color);
> }
> diff --git a/drivers/video/logo/Kconfig b/drivers/video/logo/Kconfig
> index b7d94d1dd1585a84..ce6bb753522d215d 100644
> --- a/drivers/video/logo/Kconfig
> +++ b/drivers/video/logo/Kconfig
> @@ -8,6 +8,8 @@ menuconfig LOGO
> depends on FB_CORE || SGI_NEWPORT_CONSOLE
> help
> Enable and select frame buffer bootup logos.
> + Monochrome logos will also be used by the DRM panic handler, if
> + enabled.
>
> if LOGO
>
next prev parent reply other threads:[~2024-06-14 9:55 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-13 19:17 [PATCH v2 0/7] drm/panic: Fixes and graphical logo Geert Uytterhoeven
2024-06-13 19:17 ` [PATCH v2 1/7] drm/panic: Fix uninitialized drm_scanout_buffer.set_pixel() crash Geert Uytterhoeven
2024-06-14 9:35 ` Jocelyn Falempe
2024-06-13 19:18 ` [PATCH v2 2/7] drm/panic: Fix off-by-one logo size checks Geert Uytterhoeven
2024-06-14 9:36 ` Jocelyn Falempe
2024-06-13 19:18 ` [PATCH v2 3/7] lib/fonts: Fix visiblity of SUN12x22 and TER16x32 if DRM_PANIC Geert Uytterhoeven
2024-06-14 9:40 ` Jocelyn Falempe
2024-06-13 19:18 ` [PATCH v2 4/7] drm/panic: Spelling s/formater/formatter/ Geert Uytterhoeven
2024-06-14 9:43 ` Jocelyn Falempe
2024-06-13 19:18 ` [PATCH v2 5/7] drm/panic: Convert to drm_fb_clip_offset() Geert Uytterhoeven
2024-06-14 9:44 ` Jocelyn Falempe
2024-06-15 10:55 ` kernel test robot
2024-06-16 9:08 ` Geert Uytterhoeven
2024-06-16 9:12 ` Geert Uytterhoeven
2024-06-17 7:29 ` Jocelyn Falempe
2024-06-13 19:18 ` [PATCH v2 6/7] drm/panic: Rename logo to logo_ascii Geert Uytterhoeven
2024-06-14 9:45 ` Jocelyn Falempe
2024-06-13 19:18 ` [PATCH v2 7/7] drm/panic: Add support for drawing a monochrome graphical logo Geert Uytterhoeven
2024-06-14 9:55 ` Jocelyn Falempe [this message]
2024-06-14 12:04 ` Geert Uytterhoeven
2024-06-17 9:59 ` Jocelyn Falempe
2024-06-17 12:49 ` Geert Uytterhoeven
2024-06-17 13:06 ` Jocelyn Falempe
2024-06-21 8:55 ` [PATCH v2 0/7] drm/panic: Fixes and " Jocelyn Falempe
2024-06-24 11:31 ` Jocelyn Falempe
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=f2c00c97-4d2d-4cb8-aa9b-e9c458ca9e65@redhat.com \
--to=jfalempe@redhat.com \
--cc=airlied@gmail.com \
--cc=daniel@ffwll.ch \
--cc=deller@gmx.de \
--cc=dri-devel@lists.freedesktop.org \
--cc=geert+renesas@glider.be \
--cc=linux-fbdev@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=tzimmermann@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).