aboutsummaryrefslogtreecommitdiff
path: root/stand/common
diff options
context:
space:
mode:
authorToomas Soome <tsoome@FreeBSD.org>2025-02-20 19:50:20 +0000
committerToomas Soome <tsoome@FreeBSD.org>2025-02-20 19:50:20 +0000
commit21b5b8b38b1c606fb8f6b1b0e3549072b3c1d44d (patch)
treea612ea1ce2e4c7d49e68b342b4e6f56aa4d9c785 /stand/common
parent8dcdffdb086103e9ce36bfa82fc1179c88ebc31b (diff)
loader.efi: add "gop blt <on|off>" command
Some systems have very slow console output and it may be about either wrong memory attributes are set or gop->Blt() implementation is bad. We do not have good way to set memory attributes, but we can choose which Blt() to use (or we can set "gop off" to fall back on use of SimpleTextOutput protocol). This update adds argument for "gop" command to switch gop->Blt() use. Note, this update does not fix the problem, but allows us to try to understand the possible cause. PR: 254381 Reported by: Michael Galassi Reviewed by: manu, imp Differential Revision: https://reviews.freebsd.org/D49073
Diffstat (limited to 'stand/common')
-rw-r--r--stand/common/gfx_fb.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/stand/common/gfx_fb.c b/stand/common/gfx_fb.c
index 63036f3c07f6..395332af9990 100644
--- a/stand/common/gfx_fb.c
+++ b/stand/common/gfx_fb.c
@@ -161,6 +161,14 @@ static const int vga_to_cons_colors[NCOLORS] = {
8, 9, 10, 11, 12, 13, 14, 15
};
+/*
+ * It is reported very slow console draw in some systems.
+ * in order to exclude buggy gop->Blt(), we want option
+ * to use direct draw to framebuffer and avoid gop->Blt.
+ * Can be toggled with "gop" command.
+ */
+bool ignore_gop_blt = false;
+
struct text_pixel *screen_buffer;
#if defined(EFI)
static EFI_GRAPHICS_OUTPUT_BLT_PIXEL *GlyphBuffer;
@@ -795,7 +803,7 @@ gfxfb_blt(void *BltBuffer, GFXFB_BLT_OPERATION BltOperation,
* done as they are provided by protocols that disappear when exit
* boot services.
*/
- if (gop != NULL && boot_services_active) {
+ if (!ignore_gop_blt && gop != NULL && boot_services_active) {
tpl = BS->RaiseTPL(TPL_NOTIFY);
switch (BltOperation) {
case GfxFbBltVideoFill: