From nobody Thu Feb 20 19:51:49 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4YzP6G16Bsz5pLTS; Thu, 20 Feb 2025 19:51:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4YzP6G0V6mz3LyT; Thu, 20 Feb 2025 19:51:50 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1740081110; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=j0BREnkEHh8W7jnAxpwjnUwpMn3oOhVLTS2t3A6OQ3E=; b=b7pCJtj+QRoIii/qo8SX5M72YK4r2y6ptMkEw90jNslKRGanMyzAkr8t3+qoj7r8wabBC5 L1gi2kMkSlbCuHDD2sAjVwAIjd76P78/xyL8ZdCFPovcC2HzXiqw78YFUEKpdSm5Vx3771 Fe6j6AYFMUoILm/1ZrC9OYSrUcUA4ihYDvU9WNc6mmqoQDPxkcvpZMrDM7FwFfCLlaJaCH xnvYgFNQ8pXasNs5fL3E9GSMDamc3kZYqk4Csacw2oDn7gjiDRxXBsG5HxmoWeSUxq9klK bSze0HD0EZJrXRmCVIiBvjv3KJKB/wanmp/yd1lMfQyV8yEji7fpDNKu83Pc1Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1740081110; a=rsa-sha256; cv=none; b=HzQesMeTU70L71paWxYFh29wsEpRV5qN1IyBRbOU9MTNXmX1l260gp5dwhis6KyiL7eIdg xgOX6N9EqpMjFjDJR2J9HMgy+3CLZb2vV9QvrpHAX6UTPwj2ouSWpp4/6h0DJKLS7lWmf8 973vZnRyBfxN4OlIlSpo9u86iv4aywQOJZZFoQ4TW9Ef7/1y2wTJMx4dlFuIXqnKV9wlQ3 6/SqqE+V46qHvm3hKakP3FQATTnRw/2TJoltMzkNVuEo0WBmeT1qLRIqfXpD7PDGgSTTm0 zZJcCyZfXtw23m4FM3N7L+XgI2pwkDGr+z5fCZI+JM9MNgIr02ZOu4YnkaPScw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1740081110; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=j0BREnkEHh8W7jnAxpwjnUwpMn3oOhVLTS2t3A6OQ3E=; b=pIJNLWFhvEQHu6pjokxdN29Y1fdQk8hSm6kECGs2XUfXGosu7ykYe7uRGWTnfGYdgZ1INL v9cNaHoq+Tk+50dyuyHRzgY4DOZR2aR8yVs6nFFPeGN8WyjcwHh3mtNd3Ittv0i8uQjJXa rfZf+YDZN7BW1nD9Bo/mBySLKLM78LRNk5NTajuELJK4HApSlmdiCx9UMhEFhSbSyLXZIF KZwdthlur/I4NaNiaNhT7KC16FSN+ifjAfLnFS7MWbWc8lSMwpRQf96IWqzdDftpUhRPgL QT+YTGsWG9zA+4/domH9OOWmGP2KxGejRBnYm03NH8UZXc+Ga+faheCB7KCWyA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4YzP6G047Rz15nG; Thu, 20 Feb 2025 19:51:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 51KJpnLG089685; Thu, 20 Feb 2025 19:51:49 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 51KJpn85089682; Thu, 20 Feb 2025 19:51:49 GMT (envelope-from git) Date: Thu, 20 Feb 2025 19:51:49 GMT Message-Id: <202502201951.51KJpn85089682@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Toomas Soome Subject: git: 21b5b8b38b1c - main - loader.efi: add "gop blt " command List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: tsoome X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 21b5b8b38b1c606fb8f6b1b0e3549072b3c1d44d Auto-Submitted: auto-generated The branch main has been updated by tsoome: URL: https://cgit.FreeBSD.org/src/commit/?id=21b5b8b38b1c606fb8f6b1b0e3549072b3c1d44d commit 21b5b8b38b1c606fb8f6b1b0e3549072b3c1d44d Author: Toomas Soome AuthorDate: 2025-02-20 19:50:20 +0000 Commit: Toomas Soome CommitDate: 2025-02-20 19:50:20 +0000 loader.efi: add "gop blt " 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 --- stand/common/gfx_fb.c | 10 +++++++++- stand/efi/loader/framebuffer.c | 26 +++++++++++++++++++++++--- 2 files changed, 32 insertions(+), 4 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: diff --git a/stand/efi/loader/framebuffer.c b/stand/efi/loader/framebuffer.c index ea4131b751c8..141a29305f7c 100644 --- a/stand/efi/loader/framebuffer.c +++ b/stand/efi/loader/framebuffer.c @@ -856,6 +856,7 @@ command_gop(int argc, char *argv[]) struct efi_fb efifb; EFI_STATUS status; u_int mode; + extern bool ignore_gop_blt; if (gop == NULL) { snprintf(command_errbuf, sizeof(command_errbuf), @@ -866,7 +867,7 @@ command_gop(int argc, char *argv[]) if (argc < 2) goto usage; - if (!strcmp(argv[1], "set")) { + if (strcmp(argv[1], "set") == 0) { char *cp; if (argc != 3) @@ -884,7 +885,26 @@ command_gop(int argc, char *argv[]) return (CMD_ERROR); } (void) cons_update_mode(true); + } else if (strcmp(argv[1], "blt") == 0) { + /* + * "blt on" does allow gop->Blt() to be used (default). + * "blt off" does block gop->Blt() to be used and use + * software rendering instead. + */ + if (argc != 3) + goto usage; + if (strcmp(argv[2], "on") == 0) + ignore_gop_blt = false; + else if (strcmp(argv[2], "off") == 0) + ignore_gop_blt = true; + else + goto usage; } else if (strcmp(argv[1], "off") == 0) { + /* + * Tell console to use SimpleTextOutput protocol. + * This means that we do not render the glyphs, but rely on + * UEFI firmware to draw on ConsOut device(s). + */ (void) cons_update_mode(false); } else if (strcmp(argv[1], "get") == 0) { edid_res_list_t res; @@ -908,7 +928,7 @@ command_gop(int argc, char *argv[]) } print_efifb(gop->Mode->Mode, &efifb, 1); printf("\n"); - } else if (!strcmp(argv[1], "list")) { + } else if (strcmp(argv[1], "list") == 0) { EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *info; UINTN infosz; @@ -931,7 +951,7 @@ command_gop(int argc, char *argv[]) usage: snprintf(command_errbuf, sizeof(command_errbuf), - "usage: %s [list | get | set | off]", argv[0]); + "usage: %s [list | get | set | off | blt ]", argv[0]); return (CMD_ERROR); }