* [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
* [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
* [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
* [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
* [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
* [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
* [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 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 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 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 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 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
* 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 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
* 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
* 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 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
* 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
* 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
* 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-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
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).