Hi!
The first patch fixes the fact that there are two items numbered "4" in the list of fbcon options. This bug is a teenager...
The second patch extends that list with a new option that allows the user to display any number of logos (that fits on the screen). I need it to limit the display to only one logo instead of one for each CPU core.
Changes since v2
- make -1 the default and make 0 disable the logo [Geert Uytterhoeven] - cpu -> CPU
Changes since v1
- do not needlessly export fb_logo_count [Matthew Wilcox] - added patch 3/3, which removes the export of fb_center_logo
Cheers, Peter
Peter Rosin (3): fbdev: fix numbering of fbcon options fbdev: fbmem: allow overriding the number of bootup logos fbdev: fbmem: avoid exporting fb_center_logo
Documentation/fb/fbcon.rst | 13 +++++++++---- drivers/video/fbdev/core/fbcon.c | 7 +++++++ drivers/video/fbdev/core/fbmem.c | 13 +++++++++---- include/linux/fb.h | 1 + 4 files changed, 26 insertions(+), 8 deletions(-)
Three shall be the number thou shalt count, and the number of the counting shall be three. Four shalt thou not count...
One! Two! Five!
Fixes: efb985f6b265 ("[PATCH] fbcon: Console Rotation - Add framebuffer console documentation") Signed-off-by: Peter Rosin peda@axentia.se --- Documentation/fb/fbcon.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/Documentation/fb/fbcon.rst b/Documentation/fb/fbcon.rst index ebca41785abe..65ba40255137 100644 --- a/Documentation/fb/fbcon.rst +++ b/Documentation/fb/fbcon.rst @@ -127,7 +127,7 @@ C. Boot options is typically located on the same video card. Thus, the consoles that are controlled by the VGA console will be garbled.
-4. fbcon=rotate:<n> +5. fbcon=rotate:<n>
This option changes the orientation angle of the console display. The value 'n' accepts the following: @@ -152,21 +152,21 @@ C. Boot options Actually, the underlying fb driver is totally ignorant of console rotation.
-5. fbcon=margin:<color> +6. fbcon=margin:<color>
This option specifies the color of the margins. The margins are the leftover area at the right and the bottom of the screen that are not used by text. By default, this area will be black. The 'color' value is an integer number that depends on the framebuffer driver being used.
-6. fbcon=nodefer +7. fbcon=nodefer
If the kernel is compiled with deferred fbcon takeover support, normally the framebuffer contents, left in place by the firmware/bootloader, will be preserved until there actually is some text is output to the console. This option causes fbcon to bind immediately to the fbdev device.
-7. fbcon=logo-pos:<location> +8. fbcon=logo-pos:<location>
The only possible 'location' is 'center' (without quotes), and when given, the bootup logo is moved from the default top-left corner
On Tue, Aug 27, 2019 at 1:09 PM Peter Rosin peda@axentia.se wrote:
Three shall be the number thou shalt count, and the number of the counting shall be three. Four shalt thou not count...
One! Two! Five!
Fixes: efb985f6b265 ("[PATCH] fbcon: Console Rotation - Add framebuffer console documentation") Signed-off-by: Peter Rosin peda@axentia.se
Reviewed-by: Geert Uytterhoeven geert@linux-m68k.org
Gr{oetje,eeting}s,
Geert
On 8/27/19 1:09 PM, Peter Rosin wrote:
Three shall be the number thou shalt count, and the number of the counting shall be three. Four shalt thou not count...
One! Two! Five!
Fixes: efb985f6b265 ("[PATCH] fbcon: Console Rotation - Add framebuffer console documentation") Signed-off-by: Peter Rosin peda@axentia.se
Thanks, patch queued for v5.6 (also sorry for the delay).
Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics
Documentation/fb/fbcon.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/Documentation/fb/fbcon.rst b/Documentation/fb/fbcon.rst index ebca41785abe..65ba40255137 100644 --- a/Documentation/fb/fbcon.rst +++ b/Documentation/fb/fbcon.rst @@ -127,7 +127,7 @@ C. Boot options is typically located on the same video card. Thus, the consoles that are controlled by the VGA console will be garbled.
-4. fbcon=rotate:<n> +5. fbcon=rotate:<n>
This option changes the orientation angle of the console display. The value 'n' accepts the following: @@ -152,21 +152,21 @@ C. Boot options Actually, the underlying fb driver is totally ignorant of console rotation.
-5. fbcon=margin:<color> +6. fbcon=margin:<color>
This option specifies the color of the margins. The margins are the leftover area at the right and the bottom of the screen that are not used by text. By default, this area will be black. The 'color' value is an integer number that depends on the framebuffer driver being used.
-6. fbcon=nodefer +7. fbcon=nodefer
If the kernel is compiled with deferred fbcon takeover support, normally the framebuffer contents, left in place by the firmware/bootloader, will be preserved until there actually is some text is output to the console. This option causes fbcon to bind immediately to the fbdev device.
-7. fbcon=logo-pos:<location> +8. fbcon=logo-pos:<location>
The only possible 'location' is 'center' (without quotes), and when given, the bootup logo is moved from the default top-left corner
Probably most useful if you want no logo at all, or if you only want one logo regardless of how many CPU cores you have.
Signed-off-by: Peter Rosin peda@axentia.se --- Documentation/fb/fbcon.rst | 5 +++++ drivers/video/fbdev/core/fbcon.c | 7 +++++++ drivers/video/fbdev/core/fbmem.c | 12 +++++++++--- include/linux/fb.h | 1 + 4 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/Documentation/fb/fbcon.rst b/Documentation/fb/fbcon.rst index 65ba40255137..e57a3d1d085a 100644 --- a/Documentation/fb/fbcon.rst +++ b/Documentation/fb/fbcon.rst @@ -174,6 +174,11 @@ C. Boot options displayed due to multiple CPUs, the collected line of logos is moved as a whole.
+9. fbcon=logo-count:<n> + + The value 'n' overrides the number of bootup logos. 0 disables the + logo, and -1 gives the default which is the number of online CPUs. + C. Attaching, Detaching and Unloading
Before going on to how to attach, detach and unload the framebuffer console, an diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c index c9235a2f42f8..bb6ae995c2e5 100644 --- a/drivers/video/fbdev/core/fbcon.c +++ b/drivers/video/fbdev/core/fbcon.c @@ -536,6 +536,13 @@ static int __init fb_console_setup(char *this_opt) fb_center_logo = true; continue; } + + if (!strncmp(options, "logo-count:", 11)) { + options += 11; + if (*options) + fb_logo_count = simple_strtol(options, &options, 0); + continue; + } } return 1; } diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c index 64dd732021d8..c7ddcb72025b 100644 --- a/drivers/video/fbdev/core/fbmem.c +++ b/drivers/video/fbdev/core/fbmem.c @@ -56,6 +56,8 @@ EXPORT_SYMBOL(num_registered_fb); bool fb_center_logo __read_mostly; EXPORT_SYMBOL(fb_center_logo);
+int fb_logo_count __read_mostly = -1; + static struct fb_info *get_fb_info(unsigned int idx) { struct fb_info *fb_info; @@ -620,7 +622,7 @@ int fb_prepare_logo(struct fb_info *info, int rotate) memset(&fb_logo, 0, sizeof(struct logo_data));
if (info->flags & FBINFO_MISC_TILEBLITTING || - info->fbops->owner) + info->fbops->owner || !fb_logo_count) return 0;
if (info->fix.visual == FB_VISUAL_DIRECTCOLOR) { @@ -686,10 +688,14 @@ int fb_prepare_logo(struct fb_info *info, int rotate)
int fb_show_logo(struct fb_info *info, int rotate) { + unsigned int count; int y;
- y = fb_show_logo_line(info, rotate, fb_logo.logo, 0, - num_online_cpus()); + 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; diff --git a/include/linux/fb.h b/include/linux/fb.h index 303771264644..e37f72b2efca 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h @@ -630,6 +630,7 @@ extern int fb_new_modelist(struct fb_info *info); extern struct fb_info *registered_fb[FB_MAX]; extern int num_registered_fb; extern bool fb_center_logo; +extern int fb_logo_count; extern struct class *fb_class;
#define for_each_registered_fb(i) \
On Tue, Aug 27, 2019 at 1:09 PM Peter Rosin peda@axentia.se wrote:
Probably most useful if you want no logo at all, or if you only want one logo regardless of how many CPU cores you have.
Signed-off-by: Peter Rosin peda@axentia.se
Reviewed-by: Geert Uytterhoeven geert@linux-m68k.org
Gr{oetje,eeting}s,
Geert
On 8/27/19 1:09 PM, Peter Rosin wrote:
Probably most useful if you want no logo at all, or if you only want one logo regardless of how many CPU cores you have.
Signed-off-by: Peter Rosin peda@axentia.se
Thanks, patch queued for v5.6 (also sorry for the delay).
Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics
Documentation/fb/fbcon.rst | 5 +++++ drivers/video/fbdev/core/fbcon.c | 7 +++++++ drivers/video/fbdev/core/fbmem.c | 12 +++++++++--- include/linux/fb.h | 1 + 4 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/Documentation/fb/fbcon.rst b/Documentation/fb/fbcon.rst index 65ba40255137..e57a3d1d085a 100644 --- a/Documentation/fb/fbcon.rst +++ b/Documentation/fb/fbcon.rst @@ -174,6 +174,11 @@ C. Boot options displayed due to multiple CPUs, the collected line of logos is moved as a whole.
+9. fbcon=logo-count:<n>
- The value 'n' overrides the number of bootup logos. 0 disables the
- logo, and -1 gives the default which is the number of online CPUs.
C. Attaching, Detaching and Unloading
Before going on to how to attach, detach and unload the framebuffer console, an diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c index c9235a2f42f8..bb6ae995c2e5 100644 --- a/drivers/video/fbdev/core/fbcon.c +++ b/drivers/video/fbdev/core/fbcon.c @@ -536,6 +536,13 @@ static int __init fb_console_setup(char *this_opt) fb_center_logo = true; continue; }
if (!strncmp(options, "logo-count:", 11)) {
options += 11;
if (*options)
fb_logo_count = simple_strtol(options, &options, 0);
continue;
} return 1;}
} diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c index 64dd732021d8..c7ddcb72025b 100644 --- a/drivers/video/fbdev/core/fbmem.c +++ b/drivers/video/fbdev/core/fbmem.c @@ -56,6 +56,8 @@ EXPORT_SYMBOL(num_registered_fb); bool fb_center_logo __read_mostly; EXPORT_SYMBOL(fb_center_logo);
+int fb_logo_count __read_mostly = -1;
static struct fb_info *get_fb_info(unsigned int idx) { struct fb_info *fb_info; @@ -620,7 +622,7 @@ int fb_prepare_logo(struct fb_info *info, int rotate) memset(&fb_logo, 0, sizeof(struct logo_data));
if (info->flags & FBINFO_MISC_TILEBLITTING ||
info->fbops->owner)
info->fbops->owner || !fb_logo_count)
return 0;
if (info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
@@ -686,10 +688,14 @@ int fb_prepare_logo(struct fb_info *info, int rotate)
int fb_show_logo(struct fb_info *info, int rotate) {
- unsigned int count; int y;
- y = fb_show_logo_line(info, rotate, fb_logo.logo, 0,
num_online_cpus());
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;
diff --git a/include/linux/fb.h b/include/linux/fb.h index 303771264644..e37f72b2efca 100644 --- a/include/linux/fb.h +++ b/include/linux/fb.h @@ -630,6 +630,7 @@ extern int fb_new_modelist(struct fb_info *info); extern struct fb_info *registered_fb[FB_MAX]; extern int num_registered_fb; extern bool fb_center_logo; +extern int fb_logo_count; extern struct class *fb_class;
#define for_each_registered_fb(i) \
The variable is only ever used from fbcon.c which is linked into the same module. Therefore, the export is not needed.
Signed-off-by: Peter Rosin peda@axentia.se --- drivers/video/fbdev/core/fbmem.c | 1 - 1 file changed, 1 deletion(-)
diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c index c7ddcb72025b..d45e59ac351b 100644 --- a/drivers/video/fbdev/core/fbmem.c +++ b/drivers/video/fbdev/core/fbmem.c @@ -54,7 +54,6 @@ int num_registered_fb __read_mostly; EXPORT_SYMBOL(num_registered_fb);
bool fb_center_logo __read_mostly; -EXPORT_SYMBOL(fb_center_logo);
int fb_logo_count __read_mostly = -1;
Hi Peter,
On Tue, Aug 27, 2019 at 1:09 PM Peter Rosin peda@axentia.se wrote:
The variable is only ever used from fbcon.c which is linked into the same module. Therefore, the export is not needed.
Signed-off-by: Peter Rosin peda@axentia.se
Reviewed-by: Geert Uytterhoeven geert@linux-m68k.org
But note that the same is true for fb_class, so perhaps it can be added (or better, removed ;-)?
Once drivers/staging/olpc_dcon/olpc_dcon.c stops abusing registered_fb[] and num_registered_fb, those can go, too.
Does anyone remembe why au1200fb calls fb_prepare_logo() and fb_show_logo() itself?
Gr{oetje,eeting}s,
Geert
-- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
On 2019-08-27 13:35, Geert Uytterhoeven wrote:
Hi Peter,
On Tue, Aug 27, 2019 at 1:09 PM Peter Rosin peda@axentia.se wrote:
The variable is only ever used from fbcon.c which is linked into the same module. Therefore, the export is not needed.
Signed-off-by: Peter Rosin peda@axentia.se
Reviewed-by: Geert Uytterhoeven geert@linux-m68k.org
But note that the same is true for fb_class, so perhaps it can be added (or better, removed ;-)?
Right. Someone please let me know if 3/3 needs to be extended. I'm also happy to just drop it...
Once drivers/staging/olpc_dcon/olpc_dcon.c stops abusing registered_fb[] and num_registered_fb, those can go, too.
Does anyone remembe why au1200fb calls fb_prepare_logo() and fb_show_logo() itself?
Maybe there should be a small drivers/video/fbdev/core/fbmem.h file (or something) with these "internal" declarations, to hide some clutter currently in include/linux/fb.h?
Feels like that could be done later, after these other cleanups you mention, so that the new file has a few more things to declare.
Cheers, Peter
On 8/29/19 9:08 AM, Peter Rosin wrote:
On 2019-08-27 13:35, Geert Uytterhoeven wrote:
Hi Peter,
On Tue, Aug 27, 2019 at 1:09 PM Peter Rosin peda@axentia.se wrote:
The variable is only ever used from fbcon.c which is linked into the same module. Therefore, the export is not needed.
Signed-off-by: Peter Rosin peda@axentia.se
Reviewed-by: Geert Uytterhoeven geert@linux-m68k.org
Thanks, patch queued for v5.6 (also sorry for the delay).
But note that the same is true for fb_class, so perhaps it can be added (or better, removed ;-)?
Right. Someone please let me know if 3/3 needs to be extended. I'm also happy to just drop it...
Please send incremental patch for fb_class.
Once drivers/staging/olpc_dcon/olpc_dcon.c stops abusing registered_fb[] and num_registered_fb, those can go, too.
Does anyone remembe why au1200fb calls fb_prepare_logo() and fb_show_logo() itself?
Maybe there should be a small drivers/video/fbdev/core/fbmem.h file (or something) with these "internal" declarations, to hide some clutter currently in include/linux/fb.h?
Sounds like a good idea.
Feels like that could be done later, after these other cleanups you mention, so that the new file has a few more things to declare.
Best regards, -- Bartlomiej Zolnierkiewicz Samsung R&D Institute Poland Samsung Electronics
dri-devel@lists.freedesktop.org