[PATCH] fbcon: Increase maximum font width x height to 64 x 64
From: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date: 2024-03-13 16:59:36
Also in:
dri-devel, lkml
Subsystem:
framebuffer console, framebuffer core, framebuffer layer, the rest · Maintainers:
Helge Deller, Thomas Zimmermann, Simona Vetter, Linus Torvalds
This remains relatively simple by just enlarging integers. It wouldn't be that simple to get to the console's 64x128 maximum, as it would require 128b integers. Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org> --- drivers/video/fbdev/core/fbcon.c | 17 ++++++++++------- include/linux/fb.h | 10 +++++----- 2 files changed, 15 insertions(+), 12 deletions(-)
diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c
index 46823c2e2ba1..849562f92bd5 100644
--- a/drivers/video/fbdev/core/fbcon.c
+++ b/drivers/video/fbdev/core/fbcon.c@@ -101,6 +101,9 @@ enum { FBCON_LOGO_DONTSHOW = -3 /* do not show the logo */ }; +#define FBCON_MAX_FONT_WIDTH (sizeof(((struct fb_pixmap *) 0)->blit_x) * 8) +#define FBCON_MAX_FONT_HEIGHT (sizeof(((struct fb_pixmap *) 0)->blit_y) * 8) + static struct fbcon_display fb_display[MAX_NR_CONSOLES]; static struct fb_info *fbcon_registered_fb[FB_MAX];
@@ -2483,12 +2486,12 @@ static int fbcon_set_font(struct vc_data *vc, struct console_font *font, h > FBCON_SWAP(info->var.rotate, info->var.yres, info->var.xres)) return -EINVAL; - if (font->width > 32 || font->height > 32) + if (font->width > FBCON_MAX_FONT_WIDTH || font->height > FBCON_MAX_FONT_HEIGHT) return -EINVAL; /* Make sure drawing engine can handle the font */ - if (!(info->pixmap.blit_x & BIT(font->width - 1)) || - !(info->pixmap.blit_y & BIT(font->height - 1))) + if (!(info->pixmap.blit_x & BIT_ULL(font->width - 1)) || + !(info->pixmap.blit_y & BIT_ULL(font->height - 1))) return -EINVAL; /* Make sure driver can handle the font length */
@@ -3082,8 +3085,8 @@ void fbcon_get_requirement(struct fb_info *info, vc = vc_cons[i].d; if (vc && vc->vc_mode == KD_TEXT && info->node == con2fb_map[i]) { - caps->x |= 1 << (vc->vc_font.width - 1); - caps->y |= 1 << (vc->vc_font.height - 1); + caps->x |= 1ULL << (vc->vc_font.width - 1); + caps->y |= 1ULL << (vc->vc_font.height - 1); charcnt = vc->vc_font.charcount; if (caps->len < charcnt) caps->len = charcnt;
@@ -3094,8 +3097,8 @@ void fbcon_get_requirement(struct fb_info *info, if (vc && vc->vc_mode == KD_TEXT && info->node == con2fb_map[fg_console]) { - caps->x = 1 << (vc->vc_font.width - 1); - caps->y = 1 << (vc->vc_font.height - 1); + caps->x = 1ULL << (vc->vc_font.width - 1); + caps->y = 1ULL << (vc->vc_font.height - 1); caps->len = vc->vc_font.charcount; } }
diff --git a/include/linux/fb.h b/include/linux/fb.h
index 05dc9624897d..2bac166cd3f2 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h@@ -144,8 +144,8 @@ struct fb_event { }; struct fb_blit_caps { - u32 x; - u32 y; + u64 x; + u64 y; u32 len; u32 flags; };
@@ -192,10 +192,10 @@ struct fb_pixmap { u32 scan_align; /* alignment per scanline */ u32 access_align; /* alignment per read/write (bits) */ u32 flags; /* see FB_PIXMAP_* */ - u32 blit_x; /* supported bit block dimensions (1-32)*/ - u32 blit_y; /* Format: blit_x = 1 << (width - 1) */ + u64 blit_x; /* supported bit block dimensions (1-64)*/ + u64 blit_y; /* Format: blit_x = 1 << (width - 1) */ /* blit_y = 1 << (height - 1) */ - /* if 0, will be set to 0xffffffff (all)*/ + /* if 0, will be set to ~0ull (all) */ /* access methods */ void (*writeio)(struct fb_info *info, void __iomem *dst, void *src, unsigned int size); void (*readio) (struct fb_info *info, void *dst, void __iomem *src, unsigned int size);
--
2.39.2