From: Ard Biesheuvel <ardb@kernel.org>
To: linux-efi@vger.kernel.org, Ingo Molnar <mingo@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>
Cc: Ard Biesheuvel <ardb@kernel.org>,
linux-kernel@vger.kernel.org,
Arvind Sankar <nivedita@alum.mit.edu>,
Atish Patra <atish.patra@wdc.com>,
Palmer Dabbelt <palmerdabbelt@google.com>,
Zou Wei <zou_wei@huawei.com>
Subject: [PATCH 17/33] efi/gop: Allow specifying depth as well as resolution
Date: Fri, 24 Apr 2020 15:05:15 +0200 [thread overview]
Message-ID: <20200424130531.30518-18-ardb@kernel.org> (raw)
In-Reply-To: <20200424130531.30518-1-ardb@kernel.org>
From: Arvind Sankar <nivedita@alum.mit.edu>
Extend the video mode argument to handle an optional color depth
specification of the form
video=efifb:<xres>x<yres>[-(rgb|bgr|<bpp>)]
Signed-off-by: Arvind Sankar <nivedita@alum.mit.edu>
Link: https://lore.kernel.org/r/20200320020028.1936003-14-nivedita@alum.mit.edu
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
---
Documentation/fb/efifb.rst | 8 +++--
drivers/firmware/efi/libstub/gop.c | 48 ++++++++++++++++++++++++++----
2 files changed, 48 insertions(+), 8 deletions(-)
diff --git a/Documentation/fb/efifb.rst b/Documentation/fb/efifb.rst
index 635275071307..eca38466487a 100644
--- a/Documentation/fb/efifb.rst
+++ b/Documentation/fb/efifb.rst
@@ -50,9 +50,11 @@ mode=n
The EFI stub will set the mode of the display to mode number n if
possible.
-<xres>x<yres>
+<xres>x<yres>[-(rgb|bgr|<bpp>)]
The EFI stub will search for a display mode that matches the specified
- horizontal and vertical resolution, and set the mode of the display to
- it if one is found.
+ horizontal and vertical resolution, and optionally bit depth, and set
+ the mode of the display to it if one is found. The bit depth can either
+ "rgb" or "bgr" to match specifically those pixel formats, or a number
+ for a mode with matching bits per pixel.
Edgar Hucek <gimli@dark-green.com>
diff --git a/drivers/firmware/efi/libstub/gop.c b/drivers/firmware/efi/libstub/gop.c
index cc84e6a82f54..848cb605a9c4 100644
--- a/drivers/firmware/efi/libstub/gop.c
+++ b/drivers/firmware/efi/libstub/gop.c
@@ -27,6 +27,8 @@ static struct {
u32 mode;
struct {
u32 width, height;
+ int format;
+ u8 depth;
} res;
};
} cmdline __efistub_global = { .option = EFI_CMDLINE_NONE };
@@ -50,7 +52,8 @@ static bool parse_modenum(char *option, char **next)
static bool parse_res(char *option, char **next)
{
- u32 w, h;
+ u32 w, h, d = 0;
+ int pf = -1;
if (!isdigit(*option))
return false;
@@ -58,11 +61,26 @@ static bool parse_res(char *option, char **next)
if (*option++ != 'x' || !isdigit(*option))
return false;
h = simple_strtoull(option, &option, 10);
+ if (*option == '-') {
+ option++;
+ if (strstarts(option, "rgb")) {
+ option += strlen("rgb");
+ pf = PIXEL_RGB_RESERVED_8BIT_PER_COLOR;
+ } else if (strstarts(option, "bgr")) {
+ option += strlen("bgr");
+ pf = PIXEL_BGR_RESERVED_8BIT_PER_COLOR;
+ } else if (isdigit(*option))
+ d = simple_strtoull(option, &option, 10);
+ else
+ return false;
+ }
if (*option && *option++ != ',')
return false;
cmdline.option = EFI_CMDLINE_RES;
cmdline.res.width = w;
cmdline.res.height = h;
+ cmdline.res.format = pf;
+ cmdline.res.depth = d;
*next = option;
return true;
@@ -123,6 +141,18 @@ static u32 choose_mode_modenum(efi_graphics_output_protocol_t *gop)
return cmdline.mode;
}
+static u8 pixel_bpp(int pixel_format, efi_pixel_bitmask_t pixel_info)
+{
+ if (pixel_format == PIXEL_BIT_MASK) {
+ u32 mask = pixel_info.red_mask | pixel_info.green_mask |
+ pixel_info.blue_mask | pixel_info.reserved_mask;
+ if (!mask)
+ return 0;
+ return __fls(mask) - __ffs(mask) + 1;
+ } else
+ return 32;
+}
+
static u32 choose_mode_res(efi_graphics_output_protocol_t *gop)
{
efi_status_t status;
@@ -133,16 +163,21 @@ static u32 choose_mode_res(efi_graphics_output_protocol_t *gop)
u32 max_mode, cur_mode;
int pf;
+ efi_pixel_bitmask_t pi;
u32 m, w, h;
mode = efi_table_attr(gop, mode);
cur_mode = efi_table_attr(mode, mode);
info = efi_table_attr(mode, info);
- w = info->horizontal_resolution;
- h = info->vertical_resolution;
+ pf = info->pixel_format;
+ pi = info->pixel_information;
+ w = info->horizontal_resolution;
+ h = info->vertical_resolution;
- if (w == cmdline.res.width && h == cmdline.res.height)
+ if (w == cmdline.res.width && h == cmdline.res.height &&
+ (cmdline.res.format < 0 || cmdline.res.format == pf) &&
+ (!cmdline.res.depth || cmdline.res.depth == pixel_bpp(pf, pi)))
return cur_mode;
max_mode = efi_table_attr(mode, max_mode);
@@ -157,6 +192,7 @@ static u32 choose_mode_res(efi_graphics_output_protocol_t *gop)
continue;
pf = info->pixel_format;
+ pi = info->pixel_information;
w = info->horizontal_resolution;
h = info->vertical_resolution;
@@ -164,7 +200,9 @@ static u32 choose_mode_res(efi_graphics_output_protocol_t *gop)
if (pf == PIXEL_BLT_ONLY || pf >= PIXEL_FORMAT_MAX)
continue;
- if (w == cmdline.res.width && h == cmdline.res.height)
+ if (w == cmdline.res.width && h == cmdline.res.height &&
+ (cmdline.res.format < 0 || cmdline.res.format == pf) &&
+ (!cmdline.res.depth || cmdline.res.depth == pixel_bpp(pf, pi)))
return m;
}
--
2.17.1
next prev parent reply other threads:[~2020-04-24 13:08 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-24 13:04 [GIT PULL 00/33] EFI updates for v5.8 Ard Biesheuvel
2020-04-24 13:04 ` [PATCH 01/33] efi/libstub: Move arm-stub to a common file Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 02/33] efi/libstub: Make initrd file loader configurable Ard Biesheuvel
2020-04-24 13:15 ` Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 03/33] efi/libstub: Unify EFI call wrappers for non-x86 Ard Biesheuvel
2020-05-03 15:09 ` Guenter Roeck
2020-05-03 16:09 ` Arvind Sankar
2020-05-03 16:11 ` Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 04/33] efi/libstub/arm: Make install_memreserve_table static Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 05/33] efi/gop: Remove redundant current_fb_base Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 06/33] efi/gop: Move check for framebuffer before con_out Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 07/33] efi/gop: Get mode information outside the loop Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 08/33] efi/gop: Factor out locating the gop into a function Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 09/33] efi/gop: Slightly re-arrange logic of find_gop Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 10/33] efi/gop: Move variable declarations into loop block Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 11/33] efi/gop: Use helper macros for populating lfb_base Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 12/33] efi/gop: Use helper macros for find_bits Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 13/33] efi/gop: Remove unreachable code from setup_pixel_info Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 14/33] efi/gop: Add prototypes for query_mode and set_mode Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 15/33] efi/gop: Allow specifying mode number on command line Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 16/33] efi/gop: Allow specifying mode by <xres>x<yres> Ard Biesheuvel
2020-04-24 13:05 ` Ard Biesheuvel [this message]
2020-04-24 13:05 ` [PATCH 18/33] efi/gop: Allow automatically choosing the best mode Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 19/33] efi/libstub/random: Align allocate size to EFI_ALLOC_ALIGN Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 20/33] efi/libstub/random: Increase random alloc granularity Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 21/33] efi/libstub/arm64: Replace 'preferred' offset with alignment check Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 22/33] efi/libstub/arm64: Simplify randomized loading of kernel image Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 23/33] efi/libstub: Add API function to allocate aligned memory Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 24/33] efi/libstub/arm64: Switch to ordinary page allocator for kernel image Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 25/33] efi/libstub: Move efi_relocate_kernel() into separate source file Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 26/33] efi/arm: Remove __efistub_global annotation Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 27/33] efi/x86: Remove __efistub_global and add relocation check Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 28/33] efi: Kill __efistub_global Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 29/33] efi/libstub: Drop __pure getter for efi_system_table Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 30/33] efi/libstub: Drop __pure getters for EFI stub options Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 31/33] efi/libstub/x86: Avoid getter function for efi_is64 Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 32/33] efi: Clean up config table description arrays Ard Biesheuvel
2020-04-24 13:05 ` [PATCH 33/33] efi: Move arch_tables check to caller Ard Biesheuvel
2020-04-25 8:27 ` [GIT PULL 00/33] EFI updates for v5.8 Ingo Molnar
2020-04-25 9:57 ` Ard Biesheuvel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200424130531.30518-18-ardb@kernel.org \
--to=ardb@kernel.org \
--cc=atish.patra@wdc.com \
--cc=linux-efi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=nivedita@alum.mit.edu \
--cc=palmerdabbelt@google.com \
--cc=tglx@linutronix.de \
--cc=zou_wei@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.