* [PATCH 0/7] fbdev: Split off code for boot-up logo
@ 2023-08-29 14:15 Thomas Zimmermann
2023-08-29 14:15 ` [PATCH 1/7] fbdev/au1200fb: Do not display " Thomas Zimmermann
` (6 more replies)
0 siblings, 7 replies; 23+ messages in thread
From: Thomas Zimmermann @ 2023-08-29 14:15 UTC (permalink / raw)
To: deller, daniel, javierm, sam, linux-fbdev, dri-devel
Cc: linux-kernel, Thomas Zimmermann
The boot-up logo is a feature of the fbcon console; with only a few
external callers. Move it from the core fbdev code into its own file.
Patches 1 and 2 remove the logo setup from fbdev drivers. The logo
requires a configured output, which is provided by the framebuffer
console. Drivers should not implement their own logo.
Patches 3 to 6 move the code for the boot-up logo into its own file
and add a number of simple cleanups. It's now separate from the core
fbdev code that maintains the display framebuffers.
Patch 7 then removes a number of unecessary include statements from
fbmem.c.
Thomas Zimmermann (7):
fbdev/au1200fb: Do not display boot-up logo
fbdev/mmp/mmpfb: Do not display boot-up logo
fbdev/core: Fix style of code for boot-up logo
fbdev/core: Move logo functions into separate source file
fbdev/core: Build fb_logo iff CONFIG_LOGO has been selected
fbdev/core: Remove empty internal helpers from fb_logo.c
fbdev/core: Clean up include statements in fbmem.c
drivers/video/fbdev/au1200fb.c | 9 -
drivers/video/fbdev/core/Makefile | 2 +
drivers/video/fbdev/core/fb_internal.h | 17 +
drivers/video/fbdev/core/fb_logo.c | 509 +++++++++++++++++++++++
drivers/video/fbdev/core/fbcon.c | 4 +
drivers/video/fbdev/core/fbmem.c | 542 +------------------------
drivers/video/fbdev/mmp/fb/mmpfb.c | 7 -
include/linux/fb.h | 5 -
8 files changed, 533 insertions(+), 562 deletions(-)
create mode 100644 drivers/video/fbdev/core/fb_logo.c
--
2.41.0
^ permalink raw reply [flat|nested] 23+ messages in thread* [PATCH 1/7] fbdev/au1200fb: Do not display boot-up logo 2023-08-29 14:15 [PATCH 0/7] fbdev: Split off code for boot-up logo Thomas Zimmermann @ 2023-08-29 14:15 ` Thomas Zimmermann 2023-09-06 9:45 ` Javier Martinez Canillas 2023-08-29 14:15 ` [PATCH 2/7] fbdev/mmp/mmpfb: " Thomas Zimmermann ` (5 subsequent siblings) 6 siblings, 1 reply; 23+ messages in thread From: Thomas Zimmermann @ 2023-08-29 14:15 UTC (permalink / raw) To: deller, daniel, javierm, sam, linux-fbdev, dri-devel Cc: linux-kernel, Thomas Zimmermann The fbcon module takes care of displaying the logo, if any. Remove the code form au1200fb. If we want to display the logo without fbcon, we should implement this in the fbdev core code. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> --- drivers/video/fbdev/au1200fb.c | 9 --------- 1 file changed, 9 deletions(-) diff --git a/drivers/video/fbdev/au1200fb.c b/drivers/video/fbdev/au1200fb.c index c137d6afe484..98afd385c49c 100644 --- a/drivers/video/fbdev/au1200fb.c +++ b/drivers/video/fbdev/au1200fb.c @@ -1719,15 +1719,6 @@ static int au1200fb_drv_probe(struct platform_device *dev) } au1200fb_fb_set_par(fbi); - -#if !defined(CONFIG_FRAMEBUFFER_CONSOLE) && defined(CONFIG_LOGO) - if (plane == 0) - if (fb_prepare_logo(fbi, FB_ROTATE_UR)) { - /* Start display and show logo on boot */ - fb_set_cmap(&fbi->cmap, fbi); - fb_show_logo(fbi, FB_ROTATE_UR); - } -#endif } /* Now hook interrupt too */ -- 2.41.0 ^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [PATCH 1/7] fbdev/au1200fb: Do not display boot-up logo 2023-08-29 14:15 ` [PATCH 1/7] fbdev/au1200fb: Do not display " Thomas Zimmermann @ 2023-09-06 9:45 ` Javier Martinez Canillas 0 siblings, 0 replies; 23+ messages in thread From: Javier Martinez Canillas @ 2023-09-06 9:45 UTC (permalink / raw) To: Thomas Zimmermann, deller, daniel, sam, linux-fbdev, dri-devel Cc: linux-kernel, Thomas Zimmermann Thomas Zimmermann <tzimmermann@suse.de> writes: > The fbcon module takes care of displaying the logo, if any. Remove > the code form au1200fb. If we want to display the logo without fbcon, > we should implement this in the fbdev core code. > Agreed. I see that this code has been since the driver was added in 2006, I wonder if was ever used. Enabling a fbdev driver without fbcon doesn't seem to be a common configuration. > Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> > --- Acked-by: Javier Martinez Canillas <javierm@redhat.com> -- Best regards, Javier Martinez Canillas Core Platforms Red Hat ^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 2/7] fbdev/mmp/mmpfb: Do not display boot-up logo 2023-08-29 14:15 [PATCH 0/7] fbdev: Split off code for boot-up logo Thomas Zimmermann 2023-08-29 14:15 ` [PATCH 1/7] fbdev/au1200fb: Do not display " Thomas Zimmermann @ 2023-08-29 14:15 ` Thomas Zimmermann 2023-09-06 9:54 ` Javier Martinez Canillas 2023-08-29 14:15 ` [PATCH 3/7] fbdev/core: Fix style of code for " Thomas Zimmermann ` (4 subsequent siblings) 6 siblings, 1 reply; 23+ messages in thread From: Thomas Zimmermann @ 2023-08-29 14:15 UTC (permalink / raw) To: deller, daniel, javierm, sam, linux-fbdev, dri-devel Cc: linux-kernel, Thomas Zimmermann The fbcon module takes care of displaying the logo, if any. Remove the code form mmpfb. If we want to display the logo without fbcon, we should implement this in the fbdev core code. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> --- drivers/video/fbdev/mmp/fb/mmpfb.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/drivers/video/fbdev/mmp/fb/mmpfb.c b/drivers/video/fbdev/mmp/fb/mmpfb.c index 42a87474bcea..2d9797c6fb3e 100644 --- a/drivers/video/fbdev/mmp/fb/mmpfb.c +++ b/drivers/video/fbdev/mmp/fb/mmpfb.c @@ -628,13 +628,6 @@ static int mmpfb_probe(struct platform_device *pdev) dev_info(fbi->dev, "loaded to /dev/fb%d <%s>.\n", info->node, info->fix.id); -#ifdef CONFIG_LOGO - if (fbi->fb_start) { - fb_prepare_logo(info, 0); - fb_show_logo(info, 0); - } -#endif - return 0; failed_clear_info: -- 2.41.0 ^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [PATCH 2/7] fbdev/mmp/mmpfb: Do not display boot-up logo 2023-08-29 14:15 ` [PATCH 2/7] fbdev/mmp/mmpfb: " Thomas Zimmermann @ 2023-09-06 9:54 ` Javier Martinez Canillas 2023-09-07 6:56 ` Thomas Zimmermann 0 siblings, 1 reply; 23+ messages in thread From: Javier Martinez Canillas @ 2023-09-06 9:54 UTC (permalink / raw) To: Thomas Zimmermann, deller, daniel, sam, linux-fbdev, dri-devel Cc: linux-kernel, Thomas Zimmermann Thomas Zimmermann <tzimmermann@suse.de> writes: > The fbcon module takes care of displaying the logo, if any. Remove > the code form mmpfb. If we want to display the logo without fbcon, s/form/from > we should implement this in the fbdev core code. > The commit message says the same than patch #1 but the driver will behave differently right? That is, won't only show the logo when fbcon is not enabled but unconditionally? So the logo will be duplicated when fbcon is enabled? If I understood that correctly, probably you should mention that in the commit message since removing the fb_show_logo() will make the driver to behave correctly. > Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> > --- Acked-by: Javier Martinez Canillas <javierm@redhat.com> -- Best regards, Javier Martinez Canillas Core Platforms Red Hat ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 2/7] fbdev/mmp/mmpfb: Do not display boot-up logo 2023-09-06 9:54 ` Javier Martinez Canillas @ 2023-09-07 6:56 ` Thomas Zimmermann 0 siblings, 0 replies; 23+ messages in thread From: Thomas Zimmermann @ 2023-09-07 6:56 UTC (permalink / raw) To: Javier Martinez Canillas, deller, daniel, sam, linux-fbdev, dri-devel Cc: linux-kernel [-- Attachment #1.1: Type: text/plain, Size: 1353 bytes --] Hi Javier Am 06.09.23 um 11:54 schrieb Javier Martinez Canillas: > Thomas Zimmermann <tzimmermann@suse.de> writes: > >> The fbcon module takes care of displaying the logo, if any. Remove >> the code form mmpfb. If we want to display the logo without fbcon, > > s/form/from > >> we should implement this in the fbdev core code. >> > > The commit message says the same than patch #1 but the driver will behave > differently right? That is, won't only show the logo when fbcon is not > enabled but unconditionally? So the logo will be duplicated when fbcon is > enabled? > > If I understood that correctly, probably you should mention that in the > commit message since removing the fb_show_logo() will make the driver to > behave correctly. TBH I don't understand what happens here if the console and the logo has been enabled at the same time. AFAIK fbcon respects display rotation, but this driver doesn't. So the logo shows up in the wrong place then? > >> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> >> --- > > Acked-by: Javier Martinez Canillas <javierm@redhat.com> > -- Thomas Zimmermann Graphics Driver Developer SUSE Software Solutions Germany GmbH Frankenstrasse 146, 90461 Nuernberg, Germany GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman HRB 36809 (AG Nuernberg) [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 840 bytes --] ^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 3/7] fbdev/core: Fix style of code for boot-up logo 2023-08-29 14:15 [PATCH 0/7] fbdev: Split off code for boot-up logo Thomas Zimmermann 2023-08-29 14:15 ` [PATCH 1/7] fbdev/au1200fb: Do not display " Thomas Zimmermann 2023-08-29 14:15 ` [PATCH 2/7] fbdev/mmp/mmpfb: " Thomas Zimmermann @ 2023-08-29 14:15 ` Thomas Zimmermann 2023-09-06 9:59 ` Javier Martinez Canillas 2023-08-29 14:15 ` [PATCH 4/7] fbdev/core: Move logo functions into separate source file Thomas Zimmermann ` (3 subsequent siblings) 6 siblings, 1 reply; 23+ messages in thread From: Thomas Zimmermann @ 2023-08-29 14:15 UTC (permalink / raw) To: deller, daniel, javierm, sam, linux-fbdev, dri-devel Cc: linux-kernel, Thomas Zimmermann Fix a number of warnings from checkpatch.pl in this code before moving it into a separate file. This includes * Prefer 'unsigned int' to bare use of 'unsigned' * space required after that ',' (ctx:VxV) * space prohibited after that open parenthesis '(' * suspect code indent for conditional statements (16, 32) * braces {} are not necessary for single statement blocks No functional changes. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> --- drivers/video/fbdev/core/fbmem.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c index ee44a46a66be..98e1847e4287 100644 --- a/drivers/video/fbdev/core/fbmem.c +++ b/drivers/video/fbdev/core/fbmem.c @@ -186,7 +186,7 @@ EXPORT_SYMBOL(fb_get_buffer_offset); #ifdef CONFIG_LOGO -static inline unsigned safe_shift(unsigned d, int n) +static inline unsigned int safe_shift(unsigned int d, int n) { return n < 0 ? d >> -n : d << n; } @@ -229,7 +229,9 @@ static void fb_set_logo_truepalette(struct fb_info *info, const struct linux_logo *logo, u32 *palette) { - static const unsigned char mask[] = { 0,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff }; + static const unsigned char mask[] = { + 0, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff + }; unsigned char redmask, greenmask, bluemask; int redshift, greenshift, blueshift; int i; @@ -247,7 +249,7 @@ static void fb_set_logo_truepalette(struct fb_info *info, greenshift = info->var.green.offset - (8 - info->var.green.length); blueshift = info->var.blue.offset - (8 - info->var.blue.length); - for ( i = 0; i < logo->clutsize; i++) { + for (i = 0; i < logo->clutsize; i++) { palette[i+32] = (safe_shift((clut[0] & redmask), redshift) | safe_shift((clut[1] & greenmask), greenshift) | safe_shift((clut[2] & bluemask), blueshift)); @@ -371,7 +373,7 @@ static void fb_rotate_logo_cw(const u8 *in, u8 *out, u32 width, u32 height) for (i = 0; i < height; i++) for (j = 0; j < width; j++) - out[height * j + h - i] = *in++; + out[height * j + h - i] = *in++; } static void fb_rotate_logo_ccw(const u8 *in, u8 *out, u32 width, u32 height) @@ -636,9 +638,8 @@ int fb_prepare_logo(struct fb_info *info, int rotate) /* Return if no suitable logo was found */ fb_logo.logo = fb_find_logo(depth); - if (!fb_logo.logo) { + if (!fb_logo.logo) return 0; - } if (rotate == FB_ROTATE_UR || rotate == FB_ROTATE_UD) yres = info->var.yres; -- 2.41.0 ^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [PATCH 3/7] fbdev/core: Fix style of code for boot-up logo 2023-08-29 14:15 ` [PATCH 3/7] fbdev/core: Fix style of code for " Thomas Zimmermann @ 2023-09-06 9:59 ` Javier Martinez Canillas 0 siblings, 0 replies; 23+ messages in thread From: Javier Martinez Canillas @ 2023-09-06 9:59 UTC (permalink / raw) To: Thomas Zimmermann, deller, daniel, sam, linux-fbdev, dri-devel Cc: linux-kernel, Thomas Zimmermann Thomas Zimmermann <tzimmermann@suse.de> writes: > Fix a number of warnings from checkpatch.pl in this code before > moving it into a separate file. This includes > > * Prefer 'unsigned int' to bare use of 'unsigned' > * space required after that ',' (ctx:VxV) > * space prohibited after that open parenthesis '(' > * suspect code indent for conditional statements (16, 32) > * braces {} are not necessary for single statement blocks > > No functional changes. > > Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> > --- [...] > - static const unsigned char mask[] = { 0,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff }; > + static const unsigned char mask[] = { > + 0, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff > + }; I didn't know that checkpatch.pl complained about this. Acked-by: Javier Martinez Canillas <javierm@redhat.com> -- Best regards, Javier Martinez Canillas Core Platforms Red Hat ^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 4/7] fbdev/core: Move logo functions into separate source file 2023-08-29 14:15 [PATCH 0/7] fbdev: Split off code for boot-up logo Thomas Zimmermann ` (2 preceding siblings ...) 2023-08-29 14:15 ` [PATCH 3/7] fbdev/core: Fix style of code for " Thomas Zimmermann @ 2023-08-29 14:15 ` Thomas Zimmermann 2023-08-29 15:55 ` kernel test robot ` (3 more replies) 2023-08-29 14:15 ` [PATCH 5/7] fbdev/core: Build fb_logo iff CONFIG_LOGO has been selected Thomas Zimmermann ` (2 subsequent siblings) 6 siblings, 4 replies; 23+ messages in thread From: Thomas Zimmermann @ 2023-08-29 14:15 UTC (permalink / raw) To: deller, daniel, javierm, sam, linux-fbdev, dri-devel Cc: linux-kernel, Thomas Zimmermann Move the fbdev function for displaying boot-up logos into their own file fb_logo.c. The file can later be build depending on the state of CONFIG_LOGO. No functional changes. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> --- drivers/video/fbdev/core/Makefile | 1 + drivers/video/fbdev/core/fb_internal.h | 6 + drivers/video/fbdev/core/fb_logo.c | 533 +++++++++++++++++++++++++ drivers/video/fbdev/core/fbmem.c | 524 ------------------------ include/linux/fb.h | 5 - 5 files changed, 540 insertions(+), 529 deletions(-) create mode 100644 drivers/video/fbdev/core/fb_logo.c diff --git a/drivers/video/fbdev/core/Makefile b/drivers/video/fbdev/core/Makefile index edfde2948e5c..adce31155e92 100644 --- a/drivers/video/fbdev/core/Makefile +++ b/drivers/video/fbdev/core/Makefile @@ -2,6 +2,7 @@ obj-$(CONFIG_FB_NOTIFY) += fb_notify.o obj-$(CONFIG_FB_CORE) += fb.o fb-y := fb_info.o \ + fb_logo.o \ fbmem.o fbcmap.o \ modedb.o fbcvt.o fb_cmdline.o fb_io_fops.o ifdef CONFIG_FB diff --git a/drivers/video/fbdev/core/fb_internal.h b/drivers/video/fbdev/core/fb_internal.h index 4c8d509a0026..79e57a5e6e7e 100644 --- a/drivers/video/fbdev/core/fb_internal.h +++ b/drivers/video/fbdev/core/fb_internal.h @@ -20,6 +20,12 @@ static inline void fb_unregister_chrdev(void) { } #endif +/* fb_logo.c */ +extern bool fb_center_logo; +extern int fb_logo_count; +int fb_prepare_logo(struct fb_info *fb_info, int rotate); +int fb_show_logo(struct fb_info *fb_info, int rotate); + /* fbmem.c */ extern struct class *fb_class; extern struct mutex registration_lock; diff --git a/drivers/video/fbdev/core/fb_logo.c b/drivers/video/fbdev/core/fb_logo.c new file mode 100644 index 000000000000..76ba5a2bebae --- /dev/null +++ b/drivers/video/fbdev/core/fb_logo.c @@ -0,0 +1,533 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include <linux/export.h> +#include <linux/fb.h> +#include <linux/linux_logo.h> + +bool fb_center_logo __read_mostly; +int fb_logo_count __read_mostly = -1; + +#ifdef CONFIG_LOGO +static inline unsigned int safe_shift(unsigned int d, int n) +{ + return n < 0 ? d >> -n : d << n; +} + +static void fb_set_logocmap(struct fb_info *info, + const struct linux_logo *logo) +{ + struct fb_cmap palette_cmap; + u16 palette_green[16]; + u16 palette_blue[16]; + u16 palette_red[16]; + int i, j, n; + const unsigned char *clut = logo->clut; + + palette_cmap.start = 0; + palette_cmap.len = 16; + palette_cmap.red = palette_red; + palette_cmap.green = palette_green; + palette_cmap.blue = palette_blue; + palette_cmap.transp = NULL; + + for (i = 0; i < logo->clutsize; i += n) { + n = logo->clutsize - i; + /* palette_cmap provides space for only 16 colors at once */ + if (n > 16) + n = 16; + palette_cmap.start = 32 + i; + palette_cmap.len = n; + for (j = 0; j < n; ++j) { + palette_cmap.red[j] = clut[0] << 8 | clut[0]; + palette_cmap.green[j] = clut[1] << 8 | clut[1]; + palette_cmap.blue[j] = clut[2] << 8 | clut[2]; + clut += 3; + } + fb_set_cmap(&palette_cmap, info); + } +} + +static void fb_set_logo_truepalette(struct fb_info *info, + const struct linux_logo *logo, + u32 *palette) +{ + static const unsigned char mask[] = { + 0, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff + }; + unsigned char redmask, greenmask, bluemask; + int redshift, greenshift, blueshift; + int i; + const unsigned char *clut = logo->clut; + + /* + * We have to create a temporary palette since console palette is only + * 16 colors long. + */ + /* Bug: Doesn't obey msb_right ... (who needs that?) */ + redmask = mask[info->var.red.length < 8 ? info->var.red.length : 8]; + greenmask = mask[info->var.green.length < 8 ? info->var.green.length : 8]; + bluemask = mask[info->var.blue.length < 8 ? info->var.blue.length : 8]; + redshift = info->var.red.offset - (8 - info->var.red.length); + greenshift = info->var.green.offset - (8 - info->var.green.length); + blueshift = info->var.blue.offset - (8 - info->var.blue.length); + + for (i = 0; i < logo->clutsize; i++) { + palette[i+32] = (safe_shift((clut[0] & redmask), redshift) | + safe_shift((clut[1] & greenmask), greenshift) | + safe_shift((clut[2] & bluemask), blueshift)); + clut += 3; + } +} + +static void fb_set_logo_directpalette(struct fb_info *info, + const struct linux_logo *logo, + u32 *palette) +{ + int redshift, greenshift, blueshift; + int i; + + redshift = info->var.red.offset; + greenshift = info->var.green.offset; + blueshift = info->var.blue.offset; + + for (i = 32; i < 32 + logo->clutsize; i++) + palette[i] = i << redshift | i << greenshift | i << blueshift; +} + +static void fb_set_logo(struct fb_info *info, + const struct linux_logo *logo, u8 *dst, + int depth) +{ + int i, j, k; + const u8 *src = logo->data; + u8 xor = (info->fix.visual == FB_VISUAL_MONO01) ? 0xff : 0; + u8 fg = 1, d; + + switch (fb_get_color_depth(&info->var, &info->fix)) { + case 1: + fg = 1; + break; + case 2: + fg = 3; + break; + default: + fg = 7; + break; + } + + if (info->fix.visual == FB_VISUAL_MONO01 || + info->fix.visual == FB_VISUAL_MONO10) + fg = ~((u8) (0xfff << info->var.green.length)); + + switch (depth) { + case 4: + for (i = 0; i < logo->height; i++) + for (j = 0; j < logo->width; src++) { + *dst++ = *src >> 4; + j++; + if (j < logo->width) { + *dst++ = *src & 0x0f; + j++; + } + } + break; + case 1: + for (i = 0; i < logo->height; i++) { + for (j = 0; j < logo->width; src++) { + d = *src ^ xor; + for (k = 7; k >= 0 && j < logo->width; k--) { + *dst++ = ((d >> k) & 1) ? fg : 0; + j++; + } + } + } + break; + } +} + +/* + * Three (3) kinds of logo maps exist. linux_logo_clut224 (>16 colors), + * linux_logo_vga16 (16 colors) and linux_logo_mono (2 colors). Depending on + * the visual format and color depth of the framebuffer, the DAC, the + * pseudo_palette, and the logo data will be adjusted accordingly. + * + * Case 1 - linux_logo_clut224: + * Color exceeds the number of console colors (16), thus we set the hardware DAC + * using fb_set_cmap() appropriately. The "needs_cmapreset" flag will be set. + * + * For visuals that require color info from the pseudo_palette, we also construct + * one for temporary use. The "needs_directpalette" or "needs_truepalette" flags + * will be set. + * + * Case 2 - linux_logo_vga16: + * The number of colors just matches the console colors, thus there is no need + * to set the DAC or the pseudo_palette. However, the bitmap is packed, ie, + * each byte contains color information for two pixels (upper and lower nibble). + * To be consistent with fb_imageblit() usage, we therefore separate the two + * nibbles into separate bytes. The "depth" flag will be set to 4. + * + * Case 3 - linux_logo_mono: + * This is similar with Case 2. Each byte contains information for 8 pixels. + * We isolate each bit and expand each into a byte. The "depth" flag will + * be set to 1. + */ +static struct logo_data { + int depth; + int needs_directpalette; + int needs_truepalette; + int needs_cmapreset; + const struct linux_logo *logo; +} fb_logo __read_mostly; + +static void fb_rotate_logo_ud(const u8 *in, u8 *out, u32 width, u32 height) +{ + u32 size = width * height, i; + + out += size - 1; + + for (i = size; i--; ) + *out-- = *in++; +} + +static void fb_rotate_logo_cw(const u8 *in, u8 *out, u32 width, u32 height) +{ + int i, j, h = height - 1; + + for (i = 0; i < height; i++) + for (j = 0; j < width; j++) + out[height * j + h - i] = *in++; +} + +static void fb_rotate_logo_ccw(const u8 *in, u8 *out, u32 width, u32 height) +{ + int i, j, w = width - 1; + + for (i = 0; i < height; i++) + for (j = 0; j < width; j++) + out[height * (w - j) + i] = *in++; +} + +static void fb_rotate_logo(struct fb_info *info, u8 *dst, + struct fb_image *image, int rotate) +{ + u32 tmp; + + if (rotate == FB_ROTATE_UD) { + fb_rotate_logo_ud(image->data, dst, image->width, + image->height); + image->dx = info->var.xres - image->width - image->dx; + image->dy = info->var.yres - image->height - image->dy; + } else if (rotate == FB_ROTATE_CW) { + fb_rotate_logo_cw(image->data, dst, image->width, + image->height); + swap(image->width, image->height); + tmp = image->dy; + image->dy = image->dx; + image->dx = info->var.xres - image->width - tmp; + } else if (rotate == FB_ROTATE_CCW) { + fb_rotate_logo_ccw(image->data, dst, image->width, + image->height); + swap(image->width, image->height); + tmp = image->dx; + image->dx = image->dy; + image->dy = info->var.yres - image->height - tmp; + } + + image->data = dst; +} + +static void fb_do_show_logo(struct fb_info *info, struct fb_image *image, + int rotate, unsigned int num) +{ + unsigned int x; + + if (image->width > info->var.xres || image->height > info->var.yres) + return; + + if (rotate == FB_ROTATE_UR) { + for (x = 0; + x < num && image->dx + image->width <= info->var.xres; + x++) { + info->fbops->fb_imageblit(info, image); + image->dx += image->width + 8; + } + } else if (rotate == FB_ROTATE_UD) { + u32 dx = image->dx; + + for (x = 0; x < num && image->dx <= dx; x++) { + info->fbops->fb_imageblit(info, image); + image->dx -= image->width + 8; + } + } else if (rotate == FB_ROTATE_CW) { + for (x = 0; + x < num && image->dy + image->height <= info->var.yres; + x++) { + info->fbops->fb_imageblit(info, image); + image->dy += image->height + 8; + } + } else if (rotate == FB_ROTATE_CCW) { + u32 dy = image->dy; + + for (x = 0; x < num && image->dy <= dy; x++) { + info->fbops->fb_imageblit(info, image); + image->dy -= image->height + 8; + } + } +} + +static int fb_show_logo_line(struct fb_info *info, int rotate, + const struct linux_logo *logo, int y, + unsigned int n) +{ + u32 *palette = NULL, *saved_pseudo_palette = NULL; + unsigned char *logo_new = NULL, *logo_rotate = NULL; + struct fb_image image; + + /* Return if the frame buffer is not mapped or suspended */ + if (logo == NULL || info->state != FBINFO_STATE_RUNNING || + info->fbops->owner) + return 0; + + image.depth = 8; + image.data = logo->data; + + if (fb_logo.needs_cmapreset) + fb_set_logocmap(info, logo); + + if (fb_logo.needs_truepalette || + fb_logo.needs_directpalette) { + palette = kmalloc(256 * 4, GFP_KERNEL); + if (palette == NULL) + return 0; + + if (fb_logo.needs_truepalette) + fb_set_logo_truepalette(info, logo, palette); + else + fb_set_logo_directpalette(info, logo, palette); + + saved_pseudo_palette = info->pseudo_palette; + info->pseudo_palette = palette; + } + + if (fb_logo.depth <= 4) { + logo_new = kmalloc_array(logo->width, logo->height, + GFP_KERNEL); + if (logo_new == NULL) { + kfree(palette); + if (saved_pseudo_palette) + info->pseudo_palette = saved_pseudo_palette; + return 0; + } + image.data = logo_new; + fb_set_logo(info, logo, logo_new, fb_logo.depth); + } + + if (fb_center_logo) { + int xres = info->var.xres; + int yres = info->var.yres; + + if (rotate == FB_ROTATE_CW || rotate == FB_ROTATE_CCW) { + xres = info->var.yres; + yres = info->var.xres; + } + + while (n && (n * (logo->width + 8) - 8 > xres)) + --n; + image.dx = (xres - (n * (logo->width + 8) - 8)) / 2; + image.dy = y ?: (yres - logo->height) / 2; + } else { + image.dx = 0; + image.dy = y; + } + + image.width = logo->width; + image.height = logo->height; + + if (rotate) { + logo_rotate = kmalloc_array(logo->width, logo->height, + GFP_KERNEL); + if (logo_rotate) + fb_rotate_logo(info, logo_rotate, &image, rotate); + } + + fb_do_show_logo(info, &image, rotate, n); + + kfree(palette); + if (saved_pseudo_palette != NULL) + info->pseudo_palette = saved_pseudo_palette; + kfree(logo_new); + kfree(logo_rotate); + return image.dy + logo->height; +} + +#ifdef CONFIG_FB_LOGO_EXTRA + +#define FB_LOGO_EX_NUM_MAX 10 +static struct logo_data_extra { + const struct linux_logo *logo; + unsigned int n; +} fb_logo_ex[FB_LOGO_EX_NUM_MAX]; +static unsigned int fb_logo_ex_num; + +void fb_append_extra_logo(const struct linux_logo *logo, unsigned int n) +{ + if (!n || fb_logo_ex_num == FB_LOGO_EX_NUM_MAX) + return; + + fb_logo_ex[fb_logo_ex_num].logo = logo; + fb_logo_ex[fb_logo_ex_num].n = n; + fb_logo_ex_num++; +} + +static int fb_prepare_extra_logos(struct fb_info *info, unsigned int height, + unsigned int yres) +{ + unsigned int i; + + /* FIXME: logo_ex supports only truecolor fb. */ + if (info->fix.visual != FB_VISUAL_TRUECOLOR) + fb_logo_ex_num = 0; + + for (i = 0; i < fb_logo_ex_num; i++) { + if (fb_logo_ex[i].logo->type != fb_logo.logo->type) { + fb_logo_ex[i].logo = NULL; + continue; + } + height += fb_logo_ex[i].logo->height; + if (height > yres) { + height -= fb_logo_ex[i].logo->height; + fb_logo_ex_num = i; + break; + } + } + return height; +} + +static int fb_show_extra_logos(struct fb_info *info, int y, int rotate) +{ + unsigned int i; + + for (i = 0; i < fb_logo_ex_num; i++) + y = fb_show_logo_line(info, rotate, + fb_logo_ex[i].logo, y, fb_logo_ex[i].n); + + return y; +} + +#else /* !CONFIG_FB_LOGO_EXTRA */ + +static inline int fb_prepare_extra_logos(struct fb_info *info, + unsigned int height, + unsigned int yres) +{ + return height; +} + +static inline int fb_show_extra_logos(struct fb_info *info, int y, int rotate) +{ + return y; +} + +#endif /* CONFIG_FB_LOGO_EXTRA */ + +int fb_prepare_logo(struct fb_info *info, int rotate) +{ + int depth = fb_get_color_depth(&info->var, &info->fix); + unsigned int yres; + int height; + + memset(&fb_logo, 0, sizeof(struct logo_data)); + + if (info->flags & FBINFO_MISC_TILEBLITTING || + info->fbops->owner || !fb_logo_count) + return 0; + + if (info->fix.visual == FB_VISUAL_DIRECTCOLOR) { + depth = info->var.blue.length; + if (info->var.red.length < depth) + depth = info->var.red.length; + if (info->var.green.length < depth) + depth = info->var.green.length; + } + + if (info->fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR && depth > 4) { + /* assume console colormap */ + depth = 4; + } + + /* Return if no suitable logo was found */ + fb_logo.logo = fb_find_logo(depth); + + if (!fb_logo.logo) + return 0; + + if (rotate == FB_ROTATE_UR || rotate == FB_ROTATE_UD) + yres = info->var.yres; + else + yres = info->var.xres; + + if (fb_logo.logo->height > yres) { + fb_logo.logo = NULL; + return 0; + } + + /* What depth we asked for might be different from what we get */ + if (fb_logo.logo->type == LINUX_LOGO_CLUT224) + fb_logo.depth = 8; + else if (fb_logo.logo->type == LINUX_LOGO_VGA16) + fb_logo.depth = 4; + else + fb_logo.depth = 1; + + + if (fb_logo.depth > 4 && depth > 4) { + switch (info->fix.visual) { + case FB_VISUAL_TRUECOLOR: + fb_logo.needs_truepalette = 1; + break; + case FB_VISUAL_DIRECTCOLOR: + fb_logo.needs_directpalette = 1; + fb_logo.needs_cmapreset = 1; + break; + case FB_VISUAL_PSEUDOCOLOR: + fb_logo.needs_cmapreset = 1; + break; + } + } + + height = fb_logo.logo->height; + if (fb_center_logo) + height += (yres - fb_logo.logo->height) / 2; + + return fb_prepare_extra_logos(info, height, yres); +} +EXPORT_SYMBOL(fb_prepare_logo); + +int fb_show_logo(struct fb_info *info, int rotate) +{ + unsigned int count; + int y; + + if (!fb_logo_count) + return 0; + + count = fb_logo_count < 0 ? num_online_cpus() : fb_logo_count; + y = fb_show_logo_line(info, rotate, fb_logo.logo, 0, count); + y = fb_show_extra_logos(info, y, rotate); + + return y; +} +EXPORT_SYMBOL(fb_show_logo); +#else +int fb_prepare_logo(struct fb_info *info, int rotate) +{ + return 0; +} +EXPORT_SYMBOL(fb_prepare_logo); + +int fb_show_logo(struct fb_info *info, int rotate) +{ + return 0; +} +EXPORT_SYMBOL(fb_show_logo); +#endif /* CONFIG_LOGO */ diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c index 98e1847e4287..1a662a606ba6 100644 --- a/drivers/video/fbdev/core/fbmem.c +++ b/drivers/video/fbdev/core/fbmem.c @@ -21,7 +21,6 @@ #include <linux/mman.h> #include <linux/vt.h> #include <linux/init.h> -#include <linux/linux_logo.h> #include <linux/platform_device.h> #include <linux/console.h> #include <linux/kmod.h> @@ -53,10 +52,6 @@ int num_registered_fb __read_mostly; for (i = 0; i < FB_MAX; i++) \ if (!registered_fb[i]) {} else -bool fb_center_logo __read_mostly; - -int fb_logo_count __read_mostly = -1; - struct fb_info *get_fb_info(unsigned int idx) { struct fb_info *fb_info; @@ -184,525 +179,6 @@ char* fb_get_buffer_offset(struct fb_info *info, struct fb_pixmap *buf, u32 size } EXPORT_SYMBOL(fb_get_buffer_offset); -#ifdef CONFIG_LOGO - -static inline unsigned int safe_shift(unsigned int d, int n) -{ - return n < 0 ? d >> -n : d << n; -} - -static void fb_set_logocmap(struct fb_info *info, - const struct linux_logo *logo) -{ - struct fb_cmap palette_cmap; - u16 palette_green[16]; - u16 palette_blue[16]; - u16 palette_red[16]; - int i, j, n; - const unsigned char *clut = logo->clut; - - palette_cmap.start = 0; - palette_cmap.len = 16; - palette_cmap.red = palette_red; - palette_cmap.green = palette_green; - palette_cmap.blue = palette_blue; - palette_cmap.transp = NULL; - - for (i = 0; i < logo->clutsize; i += n) { - n = logo->clutsize - i; - /* palette_cmap provides space for only 16 colors at once */ - if (n > 16) - n = 16; - palette_cmap.start = 32 + i; - palette_cmap.len = n; - for (j = 0; j < n; ++j) { - palette_cmap.red[j] = clut[0] << 8 | clut[0]; - palette_cmap.green[j] = clut[1] << 8 | clut[1]; - palette_cmap.blue[j] = clut[2] << 8 | clut[2]; - clut += 3; - } - fb_set_cmap(&palette_cmap, info); - } -} - -static void fb_set_logo_truepalette(struct fb_info *info, - const struct linux_logo *logo, - u32 *palette) -{ - static const unsigned char mask[] = { - 0, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff - }; - unsigned char redmask, greenmask, bluemask; - int redshift, greenshift, blueshift; - int i; - const unsigned char *clut = logo->clut; - - /* - * We have to create a temporary palette since console palette is only - * 16 colors long. - */ - /* Bug: Doesn't obey msb_right ... (who needs that?) */ - redmask = mask[info->var.red.length < 8 ? info->var.red.length : 8]; - greenmask = mask[info->var.green.length < 8 ? info->var.green.length : 8]; - bluemask = mask[info->var.blue.length < 8 ? info->var.blue.length : 8]; - redshift = info->var.red.offset - (8 - info->var.red.length); - greenshift = info->var.green.offset - (8 - info->var.green.length); - blueshift = info->var.blue.offset - (8 - info->var.blue.length); - - for (i = 0; i < logo->clutsize; i++) { - palette[i+32] = (safe_shift((clut[0] & redmask), redshift) | - safe_shift((clut[1] & greenmask), greenshift) | - safe_shift((clut[2] & bluemask), blueshift)); - clut += 3; - } -} - -static void fb_set_logo_directpalette(struct fb_info *info, - const struct linux_logo *logo, - u32 *palette) -{ - int redshift, greenshift, blueshift; - int i; - - redshift = info->var.red.offset; - greenshift = info->var.green.offset; - blueshift = info->var.blue.offset; - - for (i = 32; i < 32 + logo->clutsize; i++) - palette[i] = i << redshift | i << greenshift | i << blueshift; -} - -static void fb_set_logo(struct fb_info *info, - const struct linux_logo *logo, u8 *dst, - int depth) -{ - int i, j, k; - const u8 *src = logo->data; - u8 xor = (info->fix.visual == FB_VISUAL_MONO01) ? 0xff : 0; - u8 fg = 1, d; - - switch (fb_get_color_depth(&info->var, &info->fix)) { - case 1: - fg = 1; - break; - case 2: - fg = 3; - break; - default: - fg = 7; - break; - } - - if (info->fix.visual == FB_VISUAL_MONO01 || - info->fix.visual == FB_VISUAL_MONO10) - fg = ~((u8) (0xfff << info->var.green.length)); - - switch (depth) { - case 4: - for (i = 0; i < logo->height; i++) - for (j = 0; j < logo->width; src++) { - *dst++ = *src >> 4; - j++; - if (j < logo->width) { - *dst++ = *src & 0x0f; - j++; - } - } - break; - case 1: - for (i = 0; i < logo->height; i++) { - for (j = 0; j < logo->width; src++) { - d = *src ^ xor; - for (k = 7; k >= 0 && j < logo->width; k--) { - *dst++ = ((d >> k) & 1) ? fg : 0; - j++; - } - } - } - break; - } -} - -/* - * Three (3) kinds of logo maps exist. linux_logo_clut224 (>16 colors), - * linux_logo_vga16 (16 colors) and linux_logo_mono (2 colors). Depending on - * the visual format and color depth of the framebuffer, the DAC, the - * pseudo_palette, and the logo data will be adjusted accordingly. - * - * Case 1 - linux_logo_clut224: - * Color exceeds the number of console colors (16), thus we set the hardware DAC - * using fb_set_cmap() appropriately. The "needs_cmapreset" flag will be set. - * - * For visuals that require color info from the pseudo_palette, we also construct - * one for temporary use. The "needs_directpalette" or "needs_truepalette" flags - * will be set. - * - * Case 2 - linux_logo_vga16: - * The number of colors just matches the console colors, thus there is no need - * to set the DAC or the pseudo_palette. However, the bitmap is packed, ie, - * each byte contains color information for two pixels (upper and lower nibble). - * To be consistent with fb_imageblit() usage, we therefore separate the two - * nibbles into separate bytes. The "depth" flag will be set to 4. - * - * Case 3 - linux_logo_mono: - * This is similar with Case 2. Each byte contains information for 8 pixels. - * We isolate each bit and expand each into a byte. The "depth" flag will - * be set to 1. - */ -static struct logo_data { - int depth; - int needs_directpalette; - int needs_truepalette; - int needs_cmapreset; - const struct linux_logo *logo; -} fb_logo __read_mostly; - -static void fb_rotate_logo_ud(const u8 *in, u8 *out, u32 width, u32 height) -{ - u32 size = width * height, i; - - out += size - 1; - - for (i = size; i--; ) - *out-- = *in++; -} - -static void fb_rotate_logo_cw(const u8 *in, u8 *out, u32 width, u32 height) -{ - int i, j, h = height - 1; - - for (i = 0; i < height; i++) - for (j = 0; j < width; j++) - out[height * j + h - i] = *in++; -} - -static void fb_rotate_logo_ccw(const u8 *in, u8 *out, u32 width, u32 height) -{ - int i, j, w = width - 1; - - for (i = 0; i < height; i++) - for (j = 0; j < width; j++) - out[height * (w - j) + i] = *in++; -} - -static void fb_rotate_logo(struct fb_info *info, u8 *dst, - struct fb_image *image, int rotate) -{ - u32 tmp; - - if (rotate == FB_ROTATE_UD) { - fb_rotate_logo_ud(image->data, dst, image->width, - image->height); - image->dx = info->var.xres - image->width - image->dx; - image->dy = info->var.yres - image->height - image->dy; - } else if (rotate == FB_ROTATE_CW) { - fb_rotate_logo_cw(image->data, dst, image->width, - image->height); - swap(image->width, image->height); - tmp = image->dy; - image->dy = image->dx; - image->dx = info->var.xres - image->width - tmp; - } else if (rotate == FB_ROTATE_CCW) { - fb_rotate_logo_ccw(image->data, dst, image->width, - image->height); - swap(image->width, image->height); - tmp = image->dx; - image->dx = image->dy; - image->dy = info->var.yres - image->height - tmp; - } - - image->data = dst; -} - -static void fb_do_show_logo(struct fb_info *info, struct fb_image *image, - int rotate, unsigned int num) -{ - unsigned int x; - - if (image->width > info->var.xres || image->height > info->var.yres) - return; - - if (rotate == FB_ROTATE_UR) { - for (x = 0; - x < num && image->dx + image->width <= info->var.xres; - x++) { - info->fbops->fb_imageblit(info, image); - image->dx += image->width + 8; - } - } else if (rotate == FB_ROTATE_UD) { - u32 dx = image->dx; - - for (x = 0; x < num && image->dx <= dx; x++) { - info->fbops->fb_imageblit(info, image); - image->dx -= image->width + 8; - } - } else if (rotate == FB_ROTATE_CW) { - for (x = 0; - x < num && image->dy + image->height <= info->var.yres; - x++) { - info->fbops->fb_imageblit(info, image); - image->dy += image->height + 8; - } - } else if (rotate == FB_ROTATE_CCW) { - u32 dy = image->dy; - - for (x = 0; x < num && image->dy <= dy; x++) { - info->fbops->fb_imageblit(info, image); - image->dy -= image->height + 8; - } - } -} - -static int fb_show_logo_line(struct fb_info *info, int rotate, - const struct linux_logo *logo, int y, - unsigned int n) -{ - u32 *palette = NULL, *saved_pseudo_palette = NULL; - unsigned char *logo_new = NULL, *logo_rotate = NULL; - struct fb_image image; - - /* Return if the frame buffer is not mapped or suspended */ - if (logo == NULL || info->state != FBINFO_STATE_RUNNING || - info->fbops->owner) - return 0; - - image.depth = 8; - image.data = logo->data; - - if (fb_logo.needs_cmapreset) - fb_set_logocmap(info, logo); - - if (fb_logo.needs_truepalette || - fb_logo.needs_directpalette) { - palette = kmalloc(256 * 4, GFP_KERNEL); - if (palette == NULL) - return 0; - - if (fb_logo.needs_truepalette) - fb_set_logo_truepalette(info, logo, palette); - else - fb_set_logo_directpalette(info, logo, palette); - - saved_pseudo_palette = info->pseudo_palette; - info->pseudo_palette = palette; - } - - if (fb_logo.depth <= 4) { - logo_new = kmalloc_array(logo->width, logo->height, - GFP_KERNEL); - if (logo_new == NULL) { - kfree(palette); - if (saved_pseudo_palette) - info->pseudo_palette = saved_pseudo_palette; - return 0; - } - image.data = logo_new; - fb_set_logo(info, logo, logo_new, fb_logo.depth); - } - - if (fb_center_logo) { - int xres = info->var.xres; - int yres = info->var.yres; - - if (rotate == FB_ROTATE_CW || rotate == FB_ROTATE_CCW) { - xres = info->var.yres; - yres = info->var.xres; - } - - while (n && (n * (logo->width + 8) - 8 > xres)) - --n; - image.dx = (xres - (n * (logo->width + 8) - 8)) / 2; - image.dy = y ?: (yres - logo->height) / 2; - } else { - image.dx = 0; - image.dy = y; - } - - image.width = logo->width; - image.height = logo->height; - - if (rotate) { - logo_rotate = kmalloc_array(logo->width, logo->height, - GFP_KERNEL); - if (logo_rotate) - fb_rotate_logo(info, logo_rotate, &image, rotate); - } - - fb_do_show_logo(info, &image, rotate, n); - - kfree(palette); - if (saved_pseudo_palette != NULL) - info->pseudo_palette = saved_pseudo_palette; - kfree(logo_new); - kfree(logo_rotate); - return image.dy + logo->height; -} - - -#ifdef CONFIG_FB_LOGO_EXTRA - -#define FB_LOGO_EX_NUM_MAX 10 -static struct logo_data_extra { - const struct linux_logo *logo; - unsigned int n; -} fb_logo_ex[FB_LOGO_EX_NUM_MAX]; -static unsigned int fb_logo_ex_num; - -void fb_append_extra_logo(const struct linux_logo *logo, unsigned int n) -{ - if (!n || fb_logo_ex_num == FB_LOGO_EX_NUM_MAX) - return; - - fb_logo_ex[fb_logo_ex_num].logo = logo; - fb_logo_ex[fb_logo_ex_num].n = n; - fb_logo_ex_num++; -} - -static int fb_prepare_extra_logos(struct fb_info *info, unsigned int height, - unsigned int yres) -{ - unsigned int i; - - /* FIXME: logo_ex supports only truecolor fb. */ - if (info->fix.visual != FB_VISUAL_TRUECOLOR) - fb_logo_ex_num = 0; - - for (i = 0; i < fb_logo_ex_num; i++) { - if (fb_logo_ex[i].logo->type != fb_logo.logo->type) { - fb_logo_ex[i].logo = NULL; - continue; - } - height += fb_logo_ex[i].logo->height; - if (height > yres) { - height -= fb_logo_ex[i].logo->height; - fb_logo_ex_num = i; - break; - } - } - return height; -} - -static int fb_show_extra_logos(struct fb_info *info, int y, int rotate) -{ - unsigned int i; - - for (i = 0; i < fb_logo_ex_num; i++) - y = fb_show_logo_line(info, rotate, - fb_logo_ex[i].logo, y, fb_logo_ex[i].n); - - return y; -} - -#else /* !CONFIG_FB_LOGO_EXTRA */ - -static inline int fb_prepare_extra_logos(struct fb_info *info, - unsigned int height, - unsigned int yres) -{ - return height; -} - -static inline int fb_show_extra_logos(struct fb_info *info, int y, int rotate) -{ - return y; -} - -#endif /* CONFIG_FB_LOGO_EXTRA */ - - -int fb_prepare_logo(struct fb_info *info, int rotate) -{ - int depth = fb_get_color_depth(&info->var, &info->fix); - unsigned int yres; - int height; - - memset(&fb_logo, 0, sizeof(struct logo_data)); - - if (info->flags & FBINFO_MISC_TILEBLITTING || - info->fbops->owner || !fb_logo_count) - return 0; - - if (info->fix.visual == FB_VISUAL_DIRECTCOLOR) { - depth = info->var.blue.length; - if (info->var.red.length < depth) - depth = info->var.red.length; - if (info->var.green.length < depth) - depth = info->var.green.length; - } - - if (info->fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR && depth > 4) { - /* assume console colormap */ - depth = 4; - } - - /* Return if no suitable logo was found */ - fb_logo.logo = fb_find_logo(depth); - - if (!fb_logo.logo) - return 0; - - if (rotate == FB_ROTATE_UR || rotate == FB_ROTATE_UD) - yres = info->var.yres; - else - yres = info->var.xres; - - if (fb_logo.logo->height > yres) { - fb_logo.logo = NULL; - return 0; - } - - /* What depth we asked for might be different from what we get */ - if (fb_logo.logo->type == LINUX_LOGO_CLUT224) - fb_logo.depth = 8; - else if (fb_logo.logo->type == LINUX_LOGO_VGA16) - fb_logo.depth = 4; - else - fb_logo.depth = 1; - - - if (fb_logo.depth > 4 && depth > 4) { - switch (info->fix.visual) { - case FB_VISUAL_TRUECOLOR: - fb_logo.needs_truepalette = 1; - break; - case FB_VISUAL_DIRECTCOLOR: - fb_logo.needs_directpalette = 1; - fb_logo.needs_cmapreset = 1; - break; - case FB_VISUAL_PSEUDOCOLOR: - fb_logo.needs_cmapreset = 1; - break; - } - } - - height = fb_logo.logo->height; - if (fb_center_logo) - height += (yres - fb_logo.logo->height) / 2; - - return fb_prepare_extra_logos(info, height, yres); -} - -int fb_show_logo(struct fb_info *info, int rotate) -{ - unsigned int count; - int y; - - if (!fb_logo_count) - return 0; - - count = fb_logo_count < 0 ? num_online_cpus() : fb_logo_count; - y = fb_show_logo_line(info, rotate, fb_logo.logo, 0, count); - y = fb_show_extra_logos(info, y, rotate); - - return y; -} -#else -int fb_prepare_logo(struct fb_info *info, int rotate) { return 0; } -int fb_show_logo(struct fb_info *info, int rotate) { return 0; } -#endif /* CONFIG_LOGO */ -EXPORT_SYMBOL(fb_prepare_logo); -EXPORT_SYMBOL(fb_show_logo); - int fb_pan_display(struct fb_info *info, struct fb_var_screeninfo *var) { diff --git a/include/linux/fb.h b/include/linux/fb.h index 16c3e6d6c55d..d110676c9c83 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h @@ -591,8 +591,6 @@ extern ssize_t fb_sys_write(struct fb_info *info, const char __user *buf, /* drivers/video/fbmem.c */ extern int register_framebuffer(struct fb_info *fb_info); extern void unregister_framebuffer(struct fb_info *fb_info); -extern int fb_prepare_logo(struct fb_info *fb_info, int rotate); -extern int fb_show_logo(struct fb_info *fb_info, int rotate); extern char* fb_get_buffer_offset(struct fb_info *info, struct fb_pixmap *buf, u32 size); extern void fb_pad_unaligned_buffer(u8 *dst, u32 d_pitch, u8 *src, u32 idx, u32 height, u32 shift_high, u32 shift_low, u32 mod); @@ -603,9 +601,6 @@ extern int fb_get_color_depth(struct fb_var_screeninfo *var, extern int fb_get_options(const char *name, char **option); extern int fb_new_modelist(struct fb_info *info); -extern bool fb_center_logo; -extern int fb_logo_count; - static inline void lock_fb_info(struct fb_info *info) { mutex_lock(&info->lock); -- 2.41.0 ^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [PATCH 4/7] fbdev/core: Move logo functions into separate source file 2023-08-29 14:15 ` [PATCH 4/7] fbdev/core: Move logo functions into separate source file Thomas Zimmermann @ 2023-08-29 15:55 ` kernel test robot 2023-09-01 20:09 ` kernel test robot ` (2 subsequent siblings) 3 siblings, 0 replies; 23+ messages in thread From: kernel test robot @ 2023-08-29 15:55 UTC (permalink / raw) To: Thomas Zimmermann, deller, daniel, javierm, sam, linux-fbdev, dri-devel Cc: oe-kbuild-all, linux-kernel, Thomas Zimmermann Hi Thomas, kernel test robot noticed the following build warnings: [auto build test WARNING on drm-misc/drm-misc-next] [also build test WARNING on next-20230829] [cannot apply to linus/master v6.5] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Thomas-Zimmermann/fbdev-au1200fb-Do-not-display-boot-up-logo/20230829-222419 base: git://anongit.freedesktop.org/drm/drm-misc drm-misc-next patch link: https://lore.kernel.org/r/20230829142109.4521-5-tzimmermann%40suse.de patch subject: [PATCH 4/7] fbdev/core: Move logo functions into separate source file config: alpha-allyesconfig (https://download.01.org/0day-ci/archive/20230829/202308292302.bkYBkvrg-lkp@intel.com/config) compiler: alpha-linux-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230829/202308292302.bkYBkvrg-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202308292302.bkYBkvrg-lkp@intel.com/ All warnings (new ones prefixed by >>): >> drivers/video/fbdev/core/fb_logo.c:433:5: warning: no previous prototype for 'fb_prepare_logo' [-Wmissing-prototypes] 433 | int fb_prepare_logo(struct fb_info *info, int rotate) | ^~~~~~~~~~~~~~~ >> drivers/video/fbdev/core/fb_logo.c:506:5: warning: no previous prototype for 'fb_show_logo' [-Wmissing-prototypes] 506 | int fb_show_logo(struct fb_info *info, int rotate) | ^~~~~~~~~~~~ vim +/fb_prepare_logo +433 drivers/video/fbdev/core/fb_logo.c 432 > 433 int fb_prepare_logo(struct fb_info *info, int rotate) 434 { 435 int depth = fb_get_color_depth(&info->var, &info->fix); 436 unsigned int yres; 437 int height; 438 439 memset(&fb_logo, 0, sizeof(struct logo_data)); 440 441 if (info->flags & FBINFO_MISC_TILEBLITTING || 442 info->fbops->owner || !fb_logo_count) 443 return 0; 444 445 if (info->fix.visual == FB_VISUAL_DIRECTCOLOR) { 446 depth = info->var.blue.length; 447 if (info->var.red.length < depth) 448 depth = info->var.red.length; 449 if (info->var.green.length < depth) 450 depth = info->var.green.length; 451 } 452 453 if (info->fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR && depth > 4) { 454 /* assume console colormap */ 455 depth = 4; 456 } 457 458 /* Return if no suitable logo was found */ 459 fb_logo.logo = fb_find_logo(depth); 460 461 if (!fb_logo.logo) 462 return 0; 463 464 if (rotate == FB_ROTATE_UR || rotate == FB_ROTATE_UD) 465 yres = info->var.yres; 466 else 467 yres = info->var.xres; 468 469 if (fb_logo.logo->height > yres) { 470 fb_logo.logo = NULL; 471 return 0; 472 } 473 474 /* What depth we asked for might be different from what we get */ 475 if (fb_logo.logo->type == LINUX_LOGO_CLUT224) 476 fb_logo.depth = 8; 477 else if (fb_logo.logo->type == LINUX_LOGO_VGA16) 478 fb_logo.depth = 4; 479 else 480 fb_logo.depth = 1; 481 482 483 if (fb_logo.depth > 4 && depth > 4) { 484 switch (info->fix.visual) { 485 case FB_VISUAL_TRUECOLOR: 486 fb_logo.needs_truepalette = 1; 487 break; 488 case FB_VISUAL_DIRECTCOLOR: 489 fb_logo.needs_directpalette = 1; 490 fb_logo.needs_cmapreset = 1; 491 break; 492 case FB_VISUAL_PSEUDOCOLOR: 493 fb_logo.needs_cmapreset = 1; 494 break; 495 } 496 } 497 498 height = fb_logo.logo->height; 499 if (fb_center_logo) 500 height += (yres - fb_logo.logo->height) / 2; 501 502 return fb_prepare_extra_logos(info, height, yres); 503 } 504 EXPORT_SYMBOL(fb_prepare_logo); 505 > 506 int fb_show_logo(struct fb_info *info, int rotate) 507 { 508 unsigned int count; 509 int y; 510 511 if (!fb_logo_count) 512 return 0; 513 514 count = fb_logo_count < 0 ? num_online_cpus() : fb_logo_count; 515 y = fb_show_logo_line(info, rotate, fb_logo.logo, 0, count); 516 y = fb_show_extra_logos(info, y, rotate); 517 518 return y; 519 } 520 EXPORT_SYMBOL(fb_show_logo); 521 #else 522 int fb_prepare_logo(struct fb_info *info, int rotate) 523 { 524 return 0; 525 } 526 EXPORT_SYMBOL(fb_prepare_logo); 527 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 4/7] fbdev/core: Move logo functions into separate source file 2023-08-29 14:15 ` [PATCH 4/7] fbdev/core: Move logo functions into separate source file Thomas Zimmermann 2023-08-29 15:55 ` kernel test robot @ 2023-09-01 20:09 ` kernel test robot 2023-09-01 20:20 ` kernel test robot 2023-09-06 10:10 ` Javier Martinez Canillas 3 siblings, 0 replies; 23+ messages in thread From: kernel test robot @ 2023-09-01 20:09 UTC (permalink / raw) To: Thomas Zimmermann, deller, daniel, javierm, sam, linux-fbdev, dri-devel Cc: llvm, oe-kbuild-all, linux-kernel, Thomas Zimmermann Hi Thomas, kernel test robot noticed the following build warnings: [auto build test WARNING on drm-misc/drm-misc-next] [also build test WARNING on linus/master next-20230831] [cannot apply to v6.5] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Thomas-Zimmermann/fbdev-au1200fb-Do-not-display-boot-up-logo/20230829-222419 base: git://anongit.freedesktop.org/drm/drm-misc drm-misc-next patch link: https://lore.kernel.org/r/20230829142109.4521-5-tzimmermann%40suse.de patch subject: [PATCH 4/7] fbdev/core: Move logo functions into separate source file config: mips-rs90_defconfig (https://download.01.org/0day-ci/archive/20230902/202309020305.jCImaNGf-lkp@intel.com/config) compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230902/202309020305.jCImaNGf-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202309020305.jCImaNGf-lkp@intel.com/ All warnings (new ones prefixed by >>): >> drivers/video/fbdev/core/fb_logo.c:433:5: warning: no previous prototype for function 'fb_prepare_logo' [-Wmissing-prototypes] 433 | int fb_prepare_logo(struct fb_info *info, int rotate) | ^ drivers/video/fbdev/core/fb_logo.c:433:1: note: declare 'static' if the function is not intended to be used outside of this translation unit 433 | int fb_prepare_logo(struct fb_info *info, int rotate) | ^ | static >> drivers/video/fbdev/core/fb_logo.c:506:5: warning: no previous prototype for function 'fb_show_logo' [-Wmissing-prototypes] 506 | int fb_show_logo(struct fb_info *info, int rotate) | ^ drivers/video/fbdev/core/fb_logo.c:506:1: note: declare 'static' if the function is not intended to be used outside of this translation unit 506 | int fb_show_logo(struct fb_info *info, int rotate) | ^ | static 2 warnings generated. vim +/fb_prepare_logo +433 drivers/video/fbdev/core/fb_logo.c 432 > 433 int fb_prepare_logo(struct fb_info *info, int rotate) 434 { 435 int depth = fb_get_color_depth(&info->var, &info->fix); 436 unsigned int yres; 437 int height; 438 439 memset(&fb_logo, 0, sizeof(struct logo_data)); 440 441 if (info->flags & FBINFO_MISC_TILEBLITTING || 442 info->fbops->owner || !fb_logo_count) 443 return 0; 444 445 if (info->fix.visual == FB_VISUAL_DIRECTCOLOR) { 446 depth = info->var.blue.length; 447 if (info->var.red.length < depth) 448 depth = info->var.red.length; 449 if (info->var.green.length < depth) 450 depth = info->var.green.length; 451 } 452 453 if (info->fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR && depth > 4) { 454 /* assume console colormap */ 455 depth = 4; 456 } 457 458 /* Return if no suitable logo was found */ 459 fb_logo.logo = fb_find_logo(depth); 460 461 if (!fb_logo.logo) 462 return 0; 463 464 if (rotate == FB_ROTATE_UR || rotate == FB_ROTATE_UD) 465 yres = info->var.yres; 466 else 467 yres = info->var.xres; 468 469 if (fb_logo.logo->height > yres) { 470 fb_logo.logo = NULL; 471 return 0; 472 } 473 474 /* What depth we asked for might be different from what we get */ 475 if (fb_logo.logo->type == LINUX_LOGO_CLUT224) 476 fb_logo.depth = 8; 477 else if (fb_logo.logo->type == LINUX_LOGO_VGA16) 478 fb_logo.depth = 4; 479 else 480 fb_logo.depth = 1; 481 482 483 if (fb_logo.depth > 4 && depth > 4) { 484 switch (info->fix.visual) { 485 case FB_VISUAL_TRUECOLOR: 486 fb_logo.needs_truepalette = 1; 487 break; 488 case FB_VISUAL_DIRECTCOLOR: 489 fb_logo.needs_directpalette = 1; 490 fb_logo.needs_cmapreset = 1; 491 break; 492 case FB_VISUAL_PSEUDOCOLOR: 493 fb_logo.needs_cmapreset = 1; 494 break; 495 } 496 } 497 498 height = fb_logo.logo->height; 499 if (fb_center_logo) 500 height += (yres - fb_logo.logo->height) / 2; 501 502 return fb_prepare_extra_logos(info, height, yres); 503 } 504 EXPORT_SYMBOL(fb_prepare_logo); 505 > 506 int fb_show_logo(struct fb_info *info, int rotate) 507 { 508 unsigned int count; 509 int y; 510 511 if (!fb_logo_count) 512 return 0; 513 514 count = fb_logo_count < 0 ? num_online_cpus() : fb_logo_count; 515 y = fb_show_logo_line(info, rotate, fb_logo.logo, 0, count); 516 y = fb_show_extra_logos(info, y, rotate); 517 518 return y; 519 } 520 EXPORT_SYMBOL(fb_show_logo); 521 #else 522 int fb_prepare_logo(struct fb_info *info, int rotate) 523 { 524 return 0; 525 } 526 EXPORT_SYMBOL(fb_prepare_logo); 527 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 4/7] fbdev/core: Move logo functions into separate source file 2023-08-29 14:15 ` [PATCH 4/7] fbdev/core: Move logo functions into separate source file Thomas Zimmermann 2023-08-29 15:55 ` kernel test robot 2023-09-01 20:09 ` kernel test robot @ 2023-09-01 20:20 ` kernel test robot 2023-09-06 10:10 ` Javier Martinez Canillas 3 siblings, 0 replies; 23+ messages in thread From: kernel test robot @ 2023-09-01 20:20 UTC (permalink / raw) To: Thomas Zimmermann, deller, daniel, javierm, sam, linux-fbdev, dri-devel Cc: oe-kbuild-all, linux-kernel, Thomas Zimmermann Hi Thomas, kernel test robot noticed the following build warnings: [auto build test WARNING on drm-misc/drm-misc-next] [also build test WARNING on linus/master next-20230831] [cannot apply to v6.5] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Thomas-Zimmermann/fbdev-au1200fb-Do-not-display-boot-up-logo/20230829-222419 base: git://anongit.freedesktop.org/drm/drm-misc drm-misc-next patch link: https://lore.kernel.org/r/20230829142109.4521-5-tzimmermann%40suse.de patch subject: [PATCH 4/7] fbdev/core: Move logo functions into separate source file config: x86_64-buildonly-randconfig-001-20230902 (https://download.01.org/0day-ci/archive/20230902/202309020442.Ef28qbgO-lkp@intel.com/config) compiler: gcc-7 (Ubuntu 7.5.0-6ubuntu2) 7.5.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20230902/202309020442.Ef28qbgO-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202309020442.Ef28qbgO-lkp@intel.com/ All warnings (new ones prefixed by >>): >> drivers/video/fbdev/core/fb_logo.c:433:5: warning: no previous declaration for 'fb_prepare_logo' [-Wmissing-declarations] int fb_prepare_logo(struct fb_info *info, int rotate) ^~~~~~~~~~~~~~~ >> drivers/video/fbdev/core/fb_logo.c:506:5: warning: no previous declaration for 'fb_show_logo' [-Wmissing-declarations] int fb_show_logo(struct fb_info *info, int rotate) ^~~~~~~~~~~~ vim +/fb_prepare_logo +433 drivers/video/fbdev/core/fb_logo.c 432 > 433 int fb_prepare_logo(struct fb_info *info, int rotate) 434 { 435 int depth = fb_get_color_depth(&info->var, &info->fix); 436 unsigned int yres; 437 int height; 438 439 memset(&fb_logo, 0, sizeof(struct logo_data)); 440 441 if (info->flags & FBINFO_MISC_TILEBLITTING || 442 info->fbops->owner || !fb_logo_count) 443 return 0; 444 445 if (info->fix.visual == FB_VISUAL_DIRECTCOLOR) { 446 depth = info->var.blue.length; 447 if (info->var.red.length < depth) 448 depth = info->var.red.length; 449 if (info->var.green.length < depth) 450 depth = info->var.green.length; 451 } 452 453 if (info->fix.visual == FB_VISUAL_STATIC_PSEUDOCOLOR && depth > 4) { 454 /* assume console colormap */ 455 depth = 4; 456 } 457 458 /* Return if no suitable logo was found */ 459 fb_logo.logo = fb_find_logo(depth); 460 461 if (!fb_logo.logo) 462 return 0; 463 464 if (rotate == FB_ROTATE_UR || rotate == FB_ROTATE_UD) 465 yres = info->var.yres; 466 else 467 yres = info->var.xres; 468 469 if (fb_logo.logo->height > yres) { 470 fb_logo.logo = NULL; 471 return 0; 472 } 473 474 /* What depth we asked for might be different from what we get */ 475 if (fb_logo.logo->type == LINUX_LOGO_CLUT224) 476 fb_logo.depth = 8; 477 else if (fb_logo.logo->type == LINUX_LOGO_VGA16) 478 fb_logo.depth = 4; 479 else 480 fb_logo.depth = 1; 481 482 483 if (fb_logo.depth > 4 && depth > 4) { 484 switch (info->fix.visual) { 485 case FB_VISUAL_TRUECOLOR: 486 fb_logo.needs_truepalette = 1; 487 break; 488 case FB_VISUAL_DIRECTCOLOR: 489 fb_logo.needs_directpalette = 1; 490 fb_logo.needs_cmapreset = 1; 491 break; 492 case FB_VISUAL_PSEUDOCOLOR: 493 fb_logo.needs_cmapreset = 1; 494 break; 495 } 496 } 497 498 height = fb_logo.logo->height; 499 if (fb_center_logo) 500 height += (yres - fb_logo.logo->height) / 2; 501 502 return fb_prepare_extra_logos(info, height, yres); 503 } 504 EXPORT_SYMBOL(fb_prepare_logo); 505 > 506 int fb_show_logo(struct fb_info *info, int rotate) 507 { 508 unsigned int count; 509 int y; 510 511 if (!fb_logo_count) 512 return 0; 513 514 count = fb_logo_count < 0 ? num_online_cpus() : fb_logo_count; 515 y = fb_show_logo_line(info, rotate, fb_logo.logo, 0, count); 516 y = fb_show_extra_logos(info, y, rotate); 517 518 return y; 519 } 520 EXPORT_SYMBOL(fb_show_logo); 521 #else 522 int fb_prepare_logo(struct fb_info *info, int rotate) 523 { 524 return 0; 525 } 526 EXPORT_SYMBOL(fb_prepare_logo); 527 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 4/7] fbdev/core: Move logo functions into separate source file 2023-08-29 14:15 ` [PATCH 4/7] fbdev/core: Move logo functions into separate source file Thomas Zimmermann ` (2 preceding siblings ...) 2023-09-01 20:20 ` kernel test robot @ 2023-09-06 10:10 ` Javier Martinez Canillas 3 siblings, 0 replies; 23+ messages in thread From: Javier Martinez Canillas @ 2023-09-06 10:10 UTC (permalink / raw) To: Thomas Zimmermann, deller, daniel, sam, linux-fbdev, dri-devel Cc: linux-kernel, Thomas Zimmermann Thomas Zimmermann <tzimmermann@suse.de> writes: > Move the fbdev function for displaying boot-up logos into their > own file fb_logo.c. The file can later be build depending on the > state of CONFIG_LOGO. No functional changes. > > Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> > --- > drivers/video/fbdev/core/Makefile | 1 + > drivers/video/fbdev/core/fb_internal.h | 6 + > drivers/video/fbdev/core/fb_logo.c | 533 +++++++++++++++++++++++++ > drivers/video/fbdev/core/fbmem.c | 524 ------------------------ > include/linux/fb.h | 5 - > 5 files changed, 540 insertions(+), 529 deletions(-) > create mode 100644 drivers/video/fbdev/core/fb_logo.c > > diff --git a/drivers/video/fbdev/core/Makefile b/drivers/video/fbdev/core/Makefile > index edfde2948e5c..adce31155e92 100644 > --- a/drivers/video/fbdev/core/Makefile > +++ b/drivers/video/fbdev/core/Makefile > @@ -2,6 +2,7 @@ > obj-$(CONFIG_FB_NOTIFY) += fb_notify.o > obj-$(CONFIG_FB_CORE) += fb.o > fb-y := fb_info.o \ > + fb_logo.o \ Maybe instead of adding this unconditionally you could only add it when CONFIG_LOGO is enabled ? [...] > diff --git a/drivers/video/fbdev/core/fb_logo.c b/drivers/video/fbdev/core/fb_logo.c > new file mode 100644 > index 000000000000..76ba5a2bebae > --- /dev/null > +++ b/drivers/video/fbdev/core/fb_logo.c > @@ -0,0 +1,533 @@ > +// SPDX-License-Identifier: GPL-2.0 > + > +#include <linux/export.h> > +#include <linux/fb.h> > +#include <linux/linux_logo.h> > + > +bool fb_center_logo __read_mostly; > +int fb_logo_count __read_mostly = -1; > + > +#ifdef CONFIG_LOGO [...] > +#else > +int fb_prepare_logo(struct fb_info *info, int rotate) > +{ > + return 0; > +} > +EXPORT_SYMBOL(fb_prepare_logo); > + > +int fb_show_logo(struct fb_info *info, int rotate) > +{ > + return 0; > +} > +EXPORT_SYMBOL(fb_show_logo); I would move the CONFIG_LOGO #ifdefery to the header file and make these a static inline function, instead of having the stubs here and exporting symbols for functions that are a no-op. I think that will also fix the issues that the robot complained about. Other than that, the patch looks good to me. Acked-by: Javier Martinez Canillas <javierm@redhat.com> -- Best regards, Javier Martinez Canillas Core Platforms Red Hat ^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 5/7] fbdev/core: Build fb_logo iff CONFIG_LOGO has been selected 2023-08-29 14:15 [PATCH 0/7] fbdev: Split off code for boot-up logo Thomas Zimmermann ` (3 preceding siblings ...) 2023-08-29 14:15 ` [PATCH 4/7] fbdev/core: Move logo functions into separate source file Thomas Zimmermann @ 2023-08-29 14:15 ` Thomas Zimmermann 2023-09-01 8:22 ` Helge Deller 2023-09-06 10:12 ` Javier Martinez Canillas 2023-08-29 14:15 ` [PATCH 6/7] fbdev/core: Remove empty internal helpers from fb_logo.c Thomas Zimmermann 2023-08-29 14:15 ` [PATCH 7/7] fbdev/core: Clean up include statements in fbmem.c Thomas Zimmermann 6 siblings, 2 replies; 23+ messages in thread From: Thomas Zimmermann @ 2023-08-29 14:15 UTC (permalink / raw) To: deller, daniel, javierm, sam, linux-fbdev, dri-devel Cc: linux-kernel, Thomas Zimmermann Only build fb_logo.c if CONFIG_LOGO has been selected. Otherwise provide empty implementations of the contained interfaces and avoid using the exported variables. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> --- drivers/video/fbdev/core/Makefile | 3 ++- drivers/video/fbdev/core/fb_internal.h | 11 +++++++++++ drivers/video/fbdev/core/fb_logo.c | 14 -------------- drivers/video/fbdev/core/fbcon.c | 4 ++++ 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/drivers/video/fbdev/core/Makefile b/drivers/video/fbdev/core/Makefile index adce31155e92..36d3156dc759 100644 --- a/drivers/video/fbdev/core/Makefile +++ b/drivers/video/fbdev/core/Makefile @@ -2,7 +2,6 @@ obj-$(CONFIG_FB_NOTIFY) += fb_notify.o obj-$(CONFIG_FB_CORE) += fb.o fb-y := fb_info.o \ - fb_logo.o \ fbmem.o fbcmap.o \ modedb.o fbcvt.o fb_cmdline.o fb_io_fops.o ifdef CONFIG_FB @@ -24,6 +23,8 @@ fb-y += fbcon_rotate.o fbcon_cw.o fbcon_ud.o \ endif endif +fb-$(CONFIG_LOGO) += fb_logo.o + obj-$(CONFIG_FB_CFB_FILLRECT) += cfbfillrect.o obj-$(CONFIG_FB_CFB_COPYAREA) += cfbcopyarea.o obj-$(CONFIG_FB_CFB_IMAGEBLIT) += cfbimgblt.o diff --git a/drivers/video/fbdev/core/fb_internal.h b/drivers/video/fbdev/core/fb_internal.h index 79e57a5e6e7e..613832d335fe 100644 --- a/drivers/video/fbdev/core/fb_internal.h +++ b/drivers/video/fbdev/core/fb_internal.h @@ -21,10 +21,21 @@ static inline void fb_unregister_chrdev(void) #endif /* fb_logo.c */ +#if defined(CONFIG_LOGO) extern bool fb_center_logo; extern int fb_logo_count; int fb_prepare_logo(struct fb_info *fb_info, int rotate); int fb_show_logo(struct fb_info *fb_info, int rotate); +#else +static inline int fb_prepare_logo(struct fb_info *info, int rotate) +{ + return 0; +} +static inline int fb_show_logo(struct fb_info *info, int rotate) +{ + return 0; +} +#endif /* CONFIG_LOGO */ /* fbmem.c */ extern struct class *fb_class; diff --git a/drivers/video/fbdev/core/fb_logo.c b/drivers/video/fbdev/core/fb_logo.c index 76ba5a2bebae..cde0a330b2ad 100644 --- a/drivers/video/fbdev/core/fb_logo.c +++ b/drivers/video/fbdev/core/fb_logo.c @@ -7,7 +7,6 @@ bool fb_center_logo __read_mostly; int fb_logo_count __read_mostly = -1; -#ifdef CONFIG_LOGO static inline unsigned int safe_shift(unsigned int d, int n) { return n < 0 ? d >> -n : d << n; @@ -518,16 +517,3 @@ int fb_show_logo(struct fb_info *info, int rotate) return y; } EXPORT_SYMBOL(fb_show_logo); -#else -int fb_prepare_logo(struct fb_info *info, int rotate) -{ - return 0; -} -EXPORT_SYMBOL(fb_prepare_logo); - -int fb_show_logo(struct fb_info *info, int rotate) -{ - return 0; -} -EXPORT_SYMBOL(fb_show_logo); -#endif /* CONFIG_LOGO */ diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c index f157a5a1dffc..24b038510a71 100644 --- a/drivers/video/fbdev/core/fbcon.c +++ b/drivers/video/fbdev/core/fbcon.c @@ -474,15 +474,19 @@ static int __init fb_console_setup(char *this_opt) if (!strncmp(options, "logo-pos:", 9)) { options += 9; +#ifdef CONFIG_LOGO if (!strcmp(options, "center")) fb_center_logo = true; +#endif continue; } if (!strncmp(options, "logo-count:", 11)) { options += 11; +#ifdef CONFIG_LOGO if (*options) fb_logo_count = simple_strtol(options, &options, 0); +#endif continue; } } -- 2.41.0 ^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [PATCH 5/7] fbdev/core: Build fb_logo iff CONFIG_LOGO has been selected 2023-08-29 14:15 ` [PATCH 5/7] fbdev/core: Build fb_logo iff CONFIG_LOGO has been selected Thomas Zimmermann @ 2023-09-01 8:22 ` Helge Deller 2023-09-04 7:08 ` Thomas Zimmermann 2023-09-06 10:12 ` Javier Martinez Canillas 1 sibling, 1 reply; 23+ messages in thread From: Helge Deller @ 2023-09-01 8:22 UTC (permalink / raw) To: Thomas Zimmermann, daniel, javierm, sam, linux-fbdev, dri-devel Cc: linux-kernel On 8/29/23 16:15, Thomas Zimmermann wrote: > Only build fb_logo.c if CONFIG_LOGO has been selected. Otherwise > provide empty implementations of the contained interfaces and avoid > using the exported variables. > > Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> ... > diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c > index f157a5a1dffc..24b038510a71 100644 > --- a/drivers/video/fbdev/core/fbcon.c > +++ b/drivers/video/fbdev/core/fbcon.c > @@ -474,15 +474,19 @@ static int __init fb_console_setup(char *this_opt) > > if (!strncmp(options, "logo-pos:", 9)) { > options += 9; > +#ifdef CONFIG_LOGO > if (!strcmp(options, "center")) > fb_center_logo = true; > +#endif IMHO, *sometimes* it makes sense to not use #ifdef and code it instead like this: if (IS_ENABLED(CONFIG_LOGO) && !strcmp(options, "center")) ... That way the compiler will optimize that code away as well, but in addition it will compile-check that you have correct coding independend if CONFIG_LOGO is set or not. > continue; > } > > if (!strncmp(options, "logo-count:", 11)) { > options += 11; > +#ifdef CONFIG_LOGO > if (*options) > fb_logo_count = simple_strtol(options, &options, 0); > +#endif same here. Helge ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 5/7] fbdev/core: Build fb_logo iff CONFIG_LOGO has been selected 2023-09-01 8:22 ` Helge Deller @ 2023-09-04 7:08 ` Thomas Zimmermann 2023-09-07 8:06 ` Thomas Zimmermann 0 siblings, 1 reply; 23+ messages in thread From: Thomas Zimmermann @ 2023-09-04 7:08 UTC (permalink / raw) To: Helge Deller, daniel, javierm, sam, linux-fbdev, dri-devel; +Cc: linux-kernel [-- Attachment #1.1: Type: text/plain, Size: 2037 bytes --] Hi Am 01.09.23 um 10:22 schrieb Helge Deller: > On 8/29/23 16:15, Thomas Zimmermann wrote: >> Only build fb_logo.c if CONFIG_LOGO has been selected. Otherwise >> provide empty implementations of the contained interfaces and avoid >> using the exported variables. >> >> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> > ... >> diff --git a/drivers/video/fbdev/core/fbcon.c >> b/drivers/video/fbdev/core/fbcon.c >> index f157a5a1dffc..24b038510a71 100644 >> --- a/drivers/video/fbdev/core/fbcon.c >> +++ b/drivers/video/fbdev/core/fbcon.c >> @@ -474,15 +474,19 @@ static int __init fb_console_setup(char *this_opt) >> >> if (!strncmp(options, "logo-pos:", 9)) { >> options += 9; >> +#ifdef CONFIG_LOGO >> if (!strcmp(options, "center")) >> fb_center_logo = true; >> +#endif > > IMHO, *sometimes* it makes sense to not use #ifdef and code it instead > like this: > if (IS_ENABLED(CONFIG_LOGO) && > !strcmp(options, "center")) > ... > That way the compiler will optimize that code away as well, but in > addition it will compile-check that you have correct coding independend > if CONFIG_LOGO is set or not. Good idea. I'll change it. The IS_ENABLED code is also easier to read IMHO. Best regards Thomas > >> continue; >> } >> >> if (!strncmp(options, "logo-count:", 11)) { >> options += 11; >> +#ifdef CONFIG_LOGO >> if (*options) >> fb_logo_count = simple_strtol(options, &options, 0); >> +#endif > > same here. > > Helge -- Thomas Zimmermann Graphics Driver Developer SUSE Software Solutions Germany GmbH Frankenstrasse 146, 90461 Nuernberg, Germany GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman HRB 36809 (AG Nuernberg) [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 840 bytes --] ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 5/7] fbdev/core: Build fb_logo iff CONFIG_LOGO has been selected 2023-09-04 7:08 ` Thomas Zimmermann @ 2023-09-07 8:06 ` Thomas Zimmermann 0 siblings, 0 replies; 23+ messages in thread From: Thomas Zimmermann @ 2023-09-07 8:06 UTC (permalink / raw) To: Helge Deller, daniel, javierm, sam, linux-fbdev, dri-devel; +Cc: linux-kernel [-- Attachment #1.1: Type: text/plain, Size: 2214 bytes --] Am 04.09.23 um 09:08 schrieb Thomas Zimmermann: > Hi > > Am 01.09.23 um 10:22 schrieb Helge Deller: >> On 8/29/23 16:15, Thomas Zimmermann wrote: >>> Only build fb_logo.c if CONFIG_LOGO has been selected. Otherwise >>> provide empty implementations of the contained interfaces and avoid >>> using the exported variables. >>> >>> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> >> ... >>> diff --git a/drivers/video/fbdev/core/fbcon.c >>> b/drivers/video/fbdev/core/fbcon.c >>> index f157a5a1dffc..24b038510a71 100644 >>> --- a/drivers/video/fbdev/core/fbcon.c >>> +++ b/drivers/video/fbdev/core/fbcon.c >>> @@ -474,15 +474,19 @@ static int __init fb_console_setup(char *this_opt) >>> >>> if (!strncmp(options, "logo-pos:", 9)) { >>> options += 9; >>> +#ifdef CONFIG_LOGO >>> if (!strcmp(options, "center")) >>> fb_center_logo = true; >>> +#endif >> >> IMHO, *sometimes* it makes sense to not use #ifdef and code it instead >> like this: >> if (IS_ENABLED(CONFIG_LOGO) && >> !strcmp(options, "center")) >> ... >> That way the compiler will optimize that code away as well, but in >> addition it will compile-check that you have correct coding independend >> if CONFIG_LOGO is set or not. > > Good idea. I'll change it. The IS_ENABLED code is also easier to read IMHO. I'll keep the current approach, but in a simplified form. > > Best regards > Thomas > >> >>> continue; >>> } >>> >>> if (!strncmp(options, "logo-count:", 11)) { >>> options += 11; >>> +#ifdef CONFIG_LOGO >>> if (*options) >>> fb_logo_count = simple_strtol(options, &options, 0); >>> +#endif >> >> same here. >> >> Helge > -- Thomas Zimmermann Graphics Driver Developer SUSE Software Solutions Germany GmbH Frankenstrasse 146, 90461 Nuernberg, Germany GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman HRB 36809 (AG Nuernberg) [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 840 bytes --] ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 5/7] fbdev/core: Build fb_logo iff CONFIG_LOGO has been selected 2023-08-29 14:15 ` [PATCH 5/7] fbdev/core: Build fb_logo iff CONFIG_LOGO has been selected Thomas Zimmermann 2023-09-01 8:22 ` Helge Deller @ 2023-09-06 10:12 ` Javier Martinez Canillas 2023-09-07 8:07 ` Thomas Zimmermann 1 sibling, 1 reply; 23+ messages in thread From: Javier Martinez Canillas @ 2023-09-06 10:12 UTC (permalink / raw) To: Thomas Zimmermann, deller, daniel, sam, linux-fbdev, dri-devel Cc: linux-kernel, Thomas Zimmermann Thomas Zimmermann <tzimmermann@suse.de> writes: > Only build fb_logo.c if CONFIG_LOGO has been selected. Otherwise > provide empty implementations of the contained interfaces and avoid > using the exported variables. > > Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Ah! You are doing in this patch exactly what I mentioned in my previous email :) I would just squash this patch with #4, but up to you. Acked-by: Javier Martinez Canillas <javierm@redhat.com> -- Best regards, Javier Martinez Canillas Core Platforms Red Hat ^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 5/7] fbdev/core: Build fb_logo iff CONFIG_LOGO has been selected 2023-09-06 10:12 ` Javier Martinez Canillas @ 2023-09-07 8:07 ` Thomas Zimmermann 0 siblings, 0 replies; 23+ messages in thread From: Thomas Zimmermann @ 2023-09-07 8:07 UTC (permalink / raw) To: Javier Martinez Canillas, deller, daniel, sam, linux-fbdev, dri-devel Cc: linux-kernel [-- Attachment #1.1: Type: text/plain, Size: 947 bytes --] Am 06.09.23 um 12:12 schrieb Javier Martinez Canillas: > Thomas Zimmermann <tzimmermann@suse.de> writes: > >> Only build fb_logo.c if CONFIG_LOGO has been selected. Otherwise >> provide empty implementations of the contained interfaces and avoid >> using the exported variables. >> >> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> > > Ah! You are doing in this patch exactly what I mentioned in my previous > email :) > > I would just squash this patch with #4, but up to you. I'll refactor these patches slightly: The unexporting of the helpers goes into a new patch and the rest of patches 4 and 5 will be squashed. > > Acked-by: Javier Martinez Canillas <javierm@redhat.com> > -- Thomas Zimmermann Graphics Driver Developer SUSE Software Solutions Germany GmbH Frankenstrasse 146, 90461 Nuernberg, Germany GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman HRB 36809 (AG Nuernberg) [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 840 bytes --] ^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 6/7] fbdev/core: Remove empty internal helpers from fb_logo.c 2023-08-29 14:15 [PATCH 0/7] fbdev: Split off code for boot-up logo Thomas Zimmermann ` (4 preceding siblings ...) 2023-08-29 14:15 ` [PATCH 5/7] fbdev/core: Build fb_logo iff CONFIG_LOGO has been selected Thomas Zimmermann @ 2023-08-29 14:15 ` Thomas Zimmermann 2023-09-06 10:13 ` Javier Martinez Canillas 2023-08-29 14:15 ` [PATCH 7/7] fbdev/core: Clean up include statements in fbmem.c Thomas Zimmermann 6 siblings, 1 reply; 23+ messages in thread From: Thomas Zimmermann @ 2023-08-29 14:15 UTC (permalink / raw) To: deller, daniel, javierm, sam, linux-fbdev, dri-devel Cc: linux-kernel, Thomas Zimmermann Remove the two empty helpers for the case the CONFIG_FB_LOGO_EXTRA has not been set. They are internal functions and only called once. Providing empty replacements seems like overkill. Instead protect the call sites with a test for CONFIG_FB_LOGO_EXTRA. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> --- drivers/video/fbdev/core/fb_logo.c | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/drivers/video/fbdev/core/fb_logo.c b/drivers/video/fbdev/core/fb_logo.c index cde0a330b2ad..9cff78332858 100644 --- a/drivers/video/fbdev/core/fb_logo.c +++ b/drivers/video/fbdev/core/fb_logo.c @@ -412,21 +412,6 @@ static int fb_show_extra_logos(struct fb_info *info, int y, int rotate) return y; } - -#else /* !CONFIG_FB_LOGO_EXTRA */ - -static inline int fb_prepare_extra_logos(struct fb_info *info, - unsigned int height, - unsigned int yres) -{ - return height; -} - -static inline int fb_show_extra_logos(struct fb_info *info, int y, int rotate) -{ - return y; -} - #endif /* CONFIG_FB_LOGO_EXTRA */ int fb_prepare_logo(struct fb_info *info, int rotate) @@ -497,8 +482,11 @@ int fb_prepare_logo(struct fb_info *info, int rotate) height = fb_logo.logo->height; if (fb_center_logo) height += (yres - fb_logo.logo->height) / 2; +#ifdef CONFIG_FB_LOGO_EXTRA + height = fb_prepare_extra_logos(info, height, yres); +#endif - return fb_prepare_extra_logos(info, height, yres); + return height; } EXPORT_SYMBOL(fb_prepare_logo); @@ -512,7 +500,9 @@ int fb_show_logo(struct fb_info *info, int rotate) count = fb_logo_count < 0 ? num_online_cpus() : fb_logo_count; y = fb_show_logo_line(info, rotate, fb_logo.logo, 0, count); +#ifdef CONFIG_FB_LOGO_EXTRA y = fb_show_extra_logos(info, y, rotate); +#endif return y; } -- 2.41.0 ^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [PATCH 6/7] fbdev/core: Remove empty internal helpers from fb_logo.c 2023-08-29 14:15 ` [PATCH 6/7] fbdev/core: Remove empty internal helpers from fb_logo.c Thomas Zimmermann @ 2023-09-06 10:13 ` Javier Martinez Canillas 0 siblings, 0 replies; 23+ messages in thread From: Javier Martinez Canillas @ 2023-09-06 10:13 UTC (permalink / raw) To: Thomas Zimmermann, deller, daniel, sam, linux-fbdev, dri-devel Cc: linux-kernel, Thomas Zimmermann Thomas Zimmermann <tzimmermann@suse.de> writes: > Remove the two empty helpers for the case the CONFIG_FB_LOGO_EXTRA > has not been set. They are internal functions and only called once. > Providing empty replacements seems like overkill. Instead protect > the call sites with a test for CONFIG_FB_LOGO_EXTRA. > > Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> > --- Acked-by: Javier Martinez Canillas <javierm@redhat.com> -- Best regards, Javier Martinez Canillas Core Platforms Red Hat ^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 7/7] fbdev/core: Clean up include statements in fbmem.c 2023-08-29 14:15 [PATCH 0/7] fbdev: Split off code for boot-up logo Thomas Zimmermann ` (5 preceding siblings ...) 2023-08-29 14:15 ` [PATCH 6/7] fbdev/core: Remove empty internal helpers from fb_logo.c Thomas Zimmermann @ 2023-08-29 14:15 ` Thomas Zimmermann 2023-09-06 10:13 ` Javier Martinez Canillas 6 siblings, 1 reply; 23+ messages in thread From: Thomas Zimmermann @ 2023-08-29 14:15 UTC (permalink / raw) To: deller, daniel, javierm, sam, linux-fbdev, dri-devel Cc: linux-kernel, Thomas Zimmermann Remove all unnecessary include statements from fbmem.c. Most of them were for functionality that has meanwhile been moved into other files. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> --- drivers/video/fbdev/core/fbmem.c | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c index 1a662a606ba6..fc206755f5f6 100644 --- a/drivers/video/fbdev/core/fbmem.c +++ b/drivers/video/fbdev/core/fbmem.c @@ -11,29 +11,12 @@ * for more details. */ -#include <linux/module.h> - -#include <linux/types.h> -#include <linux/errno.h> -#include <linux/kernel.h> -#include <linux/slab.h> -#include <linux/mm.h> -#include <linux/mman.h> -#include <linux/vt.h> -#include <linux/init.h> -#include <linux/platform_device.h> #include <linux/console.h> -#include <linux/kmod.h> -#include <linux/err.h> -#include <linux/device.h> -#include <linux/efi.h> +#include <linux/export.h> #include <linux/fb.h> #include <linux/fbcon.h> -#include <linux/mem_encrypt.h> -#include <linux/pci.h> #include <video/nomodeset.h> -#include <video/vga.h> #include "fb_internal.h" -- 2.41.0 ^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [PATCH 7/7] fbdev/core: Clean up include statements in fbmem.c 2023-08-29 14:15 ` [PATCH 7/7] fbdev/core: Clean up include statements in fbmem.c Thomas Zimmermann @ 2023-09-06 10:13 ` Javier Martinez Canillas 0 siblings, 0 replies; 23+ messages in thread From: Javier Martinez Canillas @ 2023-09-06 10:13 UTC (permalink / raw) To: Thomas Zimmermann, deller, daniel, sam, linux-fbdev, dri-devel Cc: linux-kernel, Thomas Zimmermann Thomas Zimmermann <tzimmermann@suse.de> writes: > Remove all unnecessary include statements from fbmem.c. Most of > them were for functionality that has meanwhile been moved into > other files. > > Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> > --- Acked-by: Javier Martinez Canillas <javierm@redhat.com> -- Best regards, Javier Martinez Canillas Core Platforms Red Hat ^ permalink raw reply [flat|nested] 23+ messages in thread
end of thread, other threads:[~2023-09-07 18:41 UTC | newest] Thread overview: 23+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-08-29 14:15 [PATCH 0/7] fbdev: Split off code for boot-up logo Thomas Zimmermann 2023-08-29 14:15 ` [PATCH 1/7] fbdev/au1200fb: Do not display " Thomas Zimmermann 2023-09-06 9:45 ` Javier Martinez Canillas 2023-08-29 14:15 ` [PATCH 2/7] fbdev/mmp/mmpfb: " Thomas Zimmermann 2023-09-06 9:54 ` Javier Martinez Canillas 2023-09-07 6:56 ` Thomas Zimmermann 2023-08-29 14:15 ` [PATCH 3/7] fbdev/core: Fix style of code for " Thomas Zimmermann 2023-09-06 9:59 ` Javier Martinez Canillas 2023-08-29 14:15 ` [PATCH 4/7] fbdev/core: Move logo functions into separate source file Thomas Zimmermann 2023-08-29 15:55 ` kernel test robot 2023-09-01 20:09 ` kernel test robot 2023-09-01 20:20 ` kernel test robot 2023-09-06 10:10 ` Javier Martinez Canillas 2023-08-29 14:15 ` [PATCH 5/7] fbdev/core: Build fb_logo iff CONFIG_LOGO has been selected Thomas Zimmermann 2023-09-01 8:22 ` Helge Deller 2023-09-04 7:08 ` Thomas Zimmermann 2023-09-07 8:06 ` Thomas Zimmermann 2023-09-06 10:12 ` Javier Martinez Canillas 2023-09-07 8:07 ` Thomas Zimmermann 2023-08-29 14:15 ` [PATCH 6/7] fbdev/core: Remove empty internal helpers from fb_logo.c Thomas Zimmermann 2023-09-06 10:13 ` Javier Martinez Canillas 2023-08-29 14:15 ` [PATCH 7/7] fbdev/core: Clean up include statements in fbmem.c Thomas Zimmermann 2023-09-06 10:13 ` Javier Martinez Canillas
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).