diff options
Diffstat (limited to 'config/grub/xhci')
28 files changed, 295 insertions, 98 deletions
| diff --git a/config/grub/xhci/config/payload b/config/grub/xhci/config/payload index 6a0fc250..d1f81fd3 100644 --- a/config/grub/xhci/config/payload +++ b/config/grub/xhci/config/payload @@ -1,5 +1,5 @@  # SPDX-License-Identifier: GPL-3.0-or-later -# Copyright (C) 2014-2016,2020-2021,2023-2024 Leah Rowe <leah@libreboot.org> +# Copyright (C) 2014-2016,2020-2021,2023-2025 Leah Rowe <leah@libreboot.org>  # Copyright (C) 2015 Klemens Nanni <contact@autoboot.org>  set prefix=(memdisk)/boot/grub @@ -156,16 +156,12 @@ menuentry 'Load Operating System (incl. fully encrypted disks)  [o]' --hotkey='o  	# grub device enumeration is very slow, so checks are hardcoded -	# TODO: add more strings, based on what distros set up when -	# the user select auto-partitioning on those installers -	lvmvol="lvm/grubcrypt-bootvol lvm/grubcrypt-rootvol" -  	raidvol="md/0 md/1 md/2 md/3 md/4 md/5 md/6 md/7 md/8 md/9" -	# in practise, doing multiple redundant checks is perfectly fast and +	# in practise, doing multiple redundant checks is perfectly fast  	# TODO: optimize grub itself, and use */? here for everything -	for vol in ${lvmvol} ${raidvol} ; do +	for vol in ${raidvol} ; do  		try_bootcfg "${vol}"  	done @@ -187,23 +183,37 @@ menuentry 'Load Operating System (incl. fully encrypted disks)  [o]' --hotkey='o  	set pager=0  	echo -n "Attempting to unlock encrypted volumes" -	for dev in ${bootdev} ${lvmvol} ${raidvol}; do +	for dev in ${bootdev} ${raidvol}; do  		if cryptomount "${dev}" ; then break ; fi  	done  	set pager=1  	echo +	search_bootcfg crypto + +	lvmvol="" +  	# after cryptomount, lvm volumes might be available +	# using * is slow on some machines, but we use it here, +	# just once. in so doing, we find every lvm volume +	for vol in (*); do +		if regexp ^lvm/ $vol; then +			lvmvol="${lvmvol} ${vol}" +			try_bootcfg "${vol}" +		fi +	done + +	# user might have put luks inside lvm +	set pager=0 +	echo "Attempting to unlock encrypted LVMs"  	for vol in ${lvmvol}; do -		try_bootcfg "${vol}" +		cryptomount "$vol"  	done +	set pager=1 +	echo  	search_bootcfg crypto -	for vol in lvm/* ; do -		try_bootcfg "${vol}" -	done -  	true # Prevent pager requiring to accept each line instead of whole screen  } diff --git a/config/grub/xhci/patches/0001-mitigate-grub-s-missing-characters-for-borders-arrow.patch b/config/grub/xhci/patches/0001-mitigate-grub-s-missing-characters-for-borders-arrow.patch index 757c8e03..d1ddc352 100644 --- a/config/grub/xhci/patches/0001-mitigate-grub-s-missing-characters-for-borders-arrow.patch +++ b/config/grub/xhci/patches/0001-mitigate-grub-s-missing-characters-for-borders-arrow.patch @@ -1,7 +1,7 @@ -From c94b9ea258feb53773bab06bc2a6c6e66a44f867 Mon Sep 17 00:00:00 2001 +From 96e8baf58dcae1dbc016420ea1972d50f09f8f9b Mon Sep 17 00:00:00 2001  From: Leah Rowe <leah@libreboot.org>  Date: Sun, 31 Oct 2021 03:47:05 +0000 -Subject: [PATCH 01/22] mitigate grub's missing characters for borders/arrow +Subject: [PATCH 01/26] mitigate grub's missing characters for borders/arrow   characters  This cleans up the display on the main screen in GRUB. diff --git a/config/grub/xhci/patches/0002-say-the-name-libreboot-in-the-grub-menu.patch b/config/grub/xhci/patches/0002-say-the-name-libreboot-in-the-grub-menu.patch index 23f84212..74970882 100644 --- a/config/grub/xhci/patches/0002-say-the-name-libreboot-in-the-grub-menu.patch +++ b/config/grub/xhci/patches/0002-say-the-name-libreboot-in-the-grub-menu.patch @@ -1,14 +1,14 @@ -From da775eafbe79e3100ca2262bde49e3e65978e83f Mon Sep 17 00:00:00 2001 +From f23a77c22e61e466c081d2b81b968bac4812e6b6 Mon Sep 17 00:00:00 2001  From: Leah Rowe <leah@libreboot.org>  Date: Sat, 19 Nov 2022 16:30:24 +0000 -Subject: [PATCH 02/22] say the name libreboot, in the grub menu +Subject: [PATCH 02/26] say the name libreboot, in the grub menu  ---   grub-core/normal/main.c | 2 +-   1 file changed, 1 insertion(+), 1 deletion(-)  diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c -index bd4431000..ff16e0f2e 100644 +index 04d058f55..b1cc8f236 100644  --- a/grub-core/normal/main.c  +++ b/grub-core/normal/main.c  @@ -209,7 +209,7 @@ grub_normal_init_page (struct grub_term_output *term, diff --git a/config/grub/xhci/patches/0003-Add-CC0-license.patch b/config/grub/xhci/patches/0003-Add-CC0-license.patch index 44d27eb5..1903a465 100644 --- a/config/grub/xhci/patches/0003-Add-CC0-license.patch +++ b/config/grub/xhci/patches/0003-Add-CC0-license.patch @@ -1,7 +1,7 @@ -From b91e5cafa7863b5a61e97d483f98dcece374721a Mon Sep 17 00:00:00 2001 +From 4e2ba04266f006369dc10b981803ba3a237f2ad8 Mon Sep 17 00:00:00 2001  From: Ax333l <main@axelen.xyz>  Date: Thu, 17 Aug 2023 00:00:00 +0000 -Subject: [PATCH 03/22] Add CC0 license +Subject: [PATCH 03/26] Add CC0 license  Signed-off-by: Nicholas Johnson <nick@nicholasjohnson.ch>  --- @@ -10,10 +10,10 @@ Signed-off-by: Nicholas Johnson <nick@nicholasjohnson.ch>   2 files changed, 4 insertions(+), 2 deletions(-)  diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c -index 8ad015b07..9980bae90 100644 +index de8c3aa8d..4a3be8568 100644  --- a/grub-core/kern/dl.c  +++ b/grub-core/kern/dl.c -@@ -494,7 +494,8 @@ grub_dl_check_license (grub_dl_t mod, Elf_Ehdr *e) +@@ -495,7 +495,8 @@ grub_dl_check_license (grub_dl_t mod, Elf_Ehdr *e)     if (grub_strcmp ((char *) e + s->sh_offset, "LICENSE=GPLv3") == 0         || grub_strcmp ((char *) e + s->sh_offset, "LICENSE=GPLv3+") == 0 diff --git a/config/grub/xhci/patches/0004-Define-GRUB_UINT32_MAX.patch b/config/grub/xhci/patches/0004-Define-GRUB_UINT32_MAX.patch index 2d830d43..2adba78b 100644 --- a/config/grub/xhci/patches/0004-Define-GRUB_UINT32_MAX.patch +++ b/config/grub/xhci/patches/0004-Define-GRUB_UINT32_MAX.patch @@ -1,7 +1,7 @@ -From 58e0d7b7bcec2392b81dda613d070804f7c68cf5 Mon Sep 17 00:00:00 2001 +From c0b5c14042ee44e0e3ed814ebba3190b47514d82 Mon Sep 17 00:00:00 2001  From: Ax333l <main@axelen.xyz>  Date: Thu, 17 Aug 2023 00:00:00 +0000 -Subject: [PATCH 04/22] Define GRUB_UINT32_MAX +Subject: [PATCH 04/26] Define GRUB_UINT32_MAX  Signed-off-by: Nicholas Johnson <nick@nicholasjohnson.ch>  --- diff --git a/config/grub/xhci/patches/0005-Add-Argon2-algorithm.patch b/config/grub/xhci/patches/0005-Add-Argon2-algorithm.patch index ff2dc74e..0db13c60 100644 --- a/config/grub/xhci/patches/0005-Add-Argon2-algorithm.patch +++ b/config/grub/xhci/patches/0005-Add-Argon2-algorithm.patch @@ -1,7 +1,7 @@ -From 65a9b252b79d5d1fa022e3da9ef91459ad8efb94 Mon Sep 17 00:00:00 2001 +From 46aa2f307de53b305045f7706b38a4e0d198875e Mon Sep 17 00:00:00 2001  From: Ax333l <main@axelen.xyz>  Date: Thu, 17 Aug 2023 00:00:00 +0000 -Subject: [PATCH 05/22] Add Argon2 algorithm +Subject: [PATCH 05/26] Add Argon2 algorithm  Signed-off-by: Nicholas Johnson <nick@nicholasjohnson.ch>  --- diff --git a/config/grub/xhci/patches/0006-Error-on-missing-Argon2id-parameters.patch b/config/grub/xhci/patches/0006-Error-on-missing-Argon2id-parameters.patch index 22553006..b9da0bec 100644 --- a/config/grub/xhci/patches/0006-Error-on-missing-Argon2id-parameters.patch +++ b/config/grub/xhci/patches/0006-Error-on-missing-Argon2id-parameters.patch @@ -1,7 +1,7 @@ -From 809908898f9d67979885a651b295ca1fa066039c Mon Sep 17 00:00:00 2001 +From c3a68f158725a858206c1fc91407b4993142a4a5 Mon Sep 17 00:00:00 2001  From: Ax333l <main@axelen.xyz>  Date: Thu, 17 Aug 2023 00:00:00 +0000 -Subject: [PATCH 06/22] Error on missing Argon2id parameters +Subject: [PATCH 06/26] Error on missing Argon2id parameters  Signed-off-by: Nicholas Johnson <nick@nicholasjohnson.ch>  --- @@ -9,10 +9,10 @@ Signed-off-by: Nicholas Johnson <nick@nicholasjohnson.ch>   1 file changed, 8 insertions(+), 5 deletions(-)  diff --git a/grub-core/disk/luks2.c b/grub-core/disk/luks2.c -index d5106402f..bc818ea69 100644 +index 8036d76ff..efae8ac65 100644  --- a/grub-core/disk/luks2.c  +++ b/grub-core/disk/luks2.c -@@ -38,6 +38,7 @@ GRUB_MOD_LICENSE ("GPLv3+"); +@@ -39,6 +39,7 @@ GRUB_MOD_LICENSE ("GPLv3+");   enum grub_luks2_kdf_type   {     LUKS2_KDF_TYPE_ARGON2I, @@ -20,7 +20,7 @@ index d5106402f..bc818ea69 100644     LUKS2_KDF_TYPE_PBKDF2   };   typedef enum grub_luks2_kdf_type grub_luks2_kdf_type_t; -@@ -90,7 +91,7 @@ struct grub_luks2_keyslot +@@ -91,7 +92,7 @@ struct grub_luks2_keyslot   	grub_int64_t time;   	grub_int64_t memory;   	grub_int64_t cpus; @@ -29,7 +29,7 @@ index d5106402f..bc818ea69 100644         struct         {   	const char   *hash; -@@ -160,10 +161,11 @@ luks2_parse_keyslot (grub_luks2_keyslot_t *out, const grub_json_t *keyslot) +@@ -161,10 +162,11 @@ luks2_parse_keyslot (grub_luks2_keyslot_t *out, const grub_json_t *keyslot)       return grub_error (GRUB_ERR_BAD_ARGUMENT, "Missing or invalid KDF");     else if (!grub_strcmp (type, "argon2i") || !grub_strcmp (type, "argon2id"))       { @@ -45,7 +45,7 @@ index d5106402f..bc818ea69 100644   	return grub_error (GRUB_ERR_BAD_ARGUMENT, "Missing Argon2i parameters");       }     else if (!grub_strcmp (type, "pbkdf2")) -@@ -459,6 +461,7 @@ luks2_decrypt_key (grub_uint8_t *out_key, +@@ -460,6 +462,7 @@ luks2_decrypt_key (grub_uint8_t *out_key,     switch (k->kdf.type)       {         case LUKS2_KDF_TYPE_ARGON2I: diff --git a/config/grub/xhci/patches/0007-Compile-with-Argon2id-support.patch b/config/grub/xhci/patches/0007-Compile-with-Argon2id-support.patch index b77a5751..c6369367 100644 --- a/config/grub/xhci/patches/0007-Compile-with-Argon2id-support.patch +++ b/config/grub/xhci/patches/0007-Compile-with-Argon2id-support.patch @@ -1,7 +1,7 @@ -From 26ae5da9ed8382869b699a653988e6c8f32bd3d1 Mon Sep 17 00:00:00 2001 +From 13f149fa5fe4e2ae0e95b3055584335beb9bdee8 Mon Sep 17 00:00:00 2001  From: Ax333l <main@axelen.xyz>  Date: Thu, 17 Aug 2023 00:00:00 +0000 -Subject: [PATCH 07/22] Compile with Argon2id support +Subject: [PATCH 07/26] Compile with Argon2id support  Signed-off-by: Nicholas Johnson <nick@nicholasjohnson.ch>  --- @@ -48,18 +48,18 @@ index f5f9b040c..f1f38d8d3 100644   module = {  diff --git a/grub-core/disk/luks2.c b/grub-core/disk/luks2.c -index bc818ea69..5b9eaa599 100644 +index efae8ac65..2e742f5be 100644  --- a/grub-core/disk/luks2.c  +++ b/grub-core/disk/luks2.c -@@ -27,6 +27,7 @@ - #include <grub/partition.h> +@@ -28,6 +28,7 @@   #include <grub/i18n.h> + #include <grub/safemath.h>  +#include <argon2.h>   #include <base64.h>   #include <json.h> -@@ -462,8 +463,16 @@ luks2_decrypt_key (grub_uint8_t *out_key, +@@ -463,8 +464,16 @@ luks2_decrypt_key (grub_uint8_t *out_key,       {         case LUKS2_KDF_TYPE_ARGON2I:         case LUKS2_KDF_TYPE_ARGON2ID: diff --git a/config/grub/xhci/patches/0008-Make-grub-install-work-with-Argon2.patch b/config/grub/xhci/patches/0008-Make-grub-install-work-with-Argon2.patch index 00f94eef..b0e36f9e 100644 --- a/config/grub/xhci/patches/0008-Make-grub-install-work-with-Argon2.patch +++ b/config/grub/xhci/patches/0008-Make-grub-install-work-with-Argon2.patch @@ -1,7 +1,7 @@ -From 6ce0b0629aa1377237c19290f33008ff81969962 Mon Sep 17 00:00:00 2001 +From 068442a692ab28298eab6bfd89a286c1d2ab91e0 Mon Sep 17 00:00:00 2001  From: Ax333l <main@axelen.xyz>  Date: Thu, 17 Aug 2023 00:00:00 +0000 -Subject: [PATCH 08/22] Make grub-install work with Argon2 +Subject: [PATCH 08/26] Make grub-install work with Argon2  Signed-off-by: Nicholas Johnson <nick@nicholasjohnson.ch>  --- diff --git a/config/grub/xhci/patches/0009-at_keyboard-coreboot-force-scancodes2-translate.patch b/config/grub/xhci/patches/0009-at_keyboard-coreboot-force-scancodes2-translate.patch index 31798205..9d7a9387 100644 --- a/config/grub/xhci/patches/0009-at_keyboard-coreboot-force-scancodes2-translate.patch +++ b/config/grub/xhci/patches/0009-at_keyboard-coreboot-force-scancodes2-translate.patch @@ -1,7 +1,7 @@ -From 3f69e2c35ccf2a37fd35f1821c7b85cc6df07ca7 Mon Sep 17 00:00:00 2001 +From 063d8d5fe39d2addca7806ca0a7c6f0544affa8f Mon Sep 17 00:00:00 2001  From: Leah Rowe <leah@libreboot.org>  Date: Mon, 30 Oct 2023 22:19:21 +0000 -Subject: [PATCH 09/22] at_keyboard coreboot: force scancodes2+translate +Subject: [PATCH 09/26] at_keyboard coreboot: force scancodes2+translate  Scan code set 2 with translation should be assumed in  every case, as the default starting position. diff --git a/config/grub/xhci/patches/0010-keylayouts-don-t-print-Unknown-key-message.patch b/config/grub/xhci/patches/0010-keylayouts-don-t-print-Unknown-key-message.patch index 742aae38..b116ea52 100644 --- a/config/grub/xhci/patches/0010-keylayouts-don-t-print-Unknown-key-message.patch +++ b/config/grub/xhci/patches/0010-keylayouts-don-t-print-Unknown-key-message.patch @@ -1,7 +1,7 @@ -From 44befdaa1ee588591f46c13d057fdef56b87218c Mon Sep 17 00:00:00 2001 +From cb7d93059959eb921328bd285f18e363f0f44aec Mon Sep 17 00:00:00 2001  From: Leah Rowe <leah@libreboot.org>  Date: Tue, 31 Oct 2023 10:33:28 +0000 -Subject: [PATCH 10/22] keylayouts: don't print "Unknown key" message +Subject: [PATCH 10/26] keylayouts: don't print "Unknown key" message  on keyboards with stuck keys, this results in GRUB just  spewing it repeatedly, preventing use of GRUB. diff --git a/config/grub/xhci/patches/0011-don-t-print-missing-prefix-errors-on-the-screen.patch b/config/grub/xhci/patches/0011-don-t-print-missing-prefix-errors-on-the-screen.patch index 960c693d..655e0005 100644 --- a/config/grub/xhci/patches/0011-don-t-print-missing-prefix-errors-on-the-screen.patch +++ b/config/grub/xhci/patches/0011-don-t-print-missing-prefix-errors-on-the-screen.patch @@ -1,7 +1,7 @@ -From bfecf6d86ccf82fb85af93600931cee589891089 Mon Sep 17 00:00:00 2001 +From 2ca7390361d1ff8ea18399b41e38436c8d506d60 Mon Sep 17 00:00:00 2001  From: Leah Rowe <leah@libreboot.org>  Date: Sun, 5 Nov 2023 16:14:58 +0000 -Subject: [PATCH 11/22] don't print missing prefix errors on the screen +Subject: [PATCH 11/26] don't print missing prefix errors on the screen  we do actually set the prefix. this patch modifies  grub to still set grub_errno and return accordingly, @@ -85,10 +85,10 @@ index 18de52562..2a0fea6c8 100644   	    }   	  file = try_open_from_prefix (prefix, filename);  diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c -index 9980bae90..4457cad7c 100644 +index 4a3be8568..6ae3d73f8 100644  --- a/grub-core/kern/dl.c  +++ b/grub-core/kern/dl.c -@@ -871,7 +871,7 @@ grub_dl_load (const char *name) +@@ -881,7 +881,7 @@ grub_dl_load (const char *name)       return 0;     if (! grub_dl_dir) { diff --git a/config/grub/xhci/patches/0012-don-t-print-error-if-module-not-found.patch b/config/grub/xhci/patches/0012-don-t-print-error-if-module-not-found.patch index c098f7e8..589dd4d7 100644 --- a/config/grub/xhci/patches/0012-don-t-print-error-if-module-not-found.patch +++ b/config/grub/xhci/patches/0012-don-t-print-error-if-module-not-found.patch @@ -1,7 +1,7 @@ -From f44fc56f06559313841de2b53637020fbe139803 Mon Sep 17 00:00:00 2001 +From 51b439fc0aea4ef2c52c80fa765d9bda992a8ac2 Mon Sep 17 00:00:00 2001  From: Leah Rowe <leah@libreboot.org>  Date: Sun, 5 Nov 2023 16:36:22 +0000 -Subject: [PATCH 12/22] don't print error if module not found +Subject: [PATCH 12/26] don't print error if module not found  still set grub_errno accordingly, and otherwise  behave the same. in libreboot, we remove a lot of @@ -17,10 +17,10 @@ Signed-off-by: Leah Rowe <leah@libreboot.org>   1 file changed, 1 insertion(+), 1 deletion(-)  diff --git a/grub-core/kern/dl.c b/grub-core/kern/dl.c -index 4457cad7c..ea9fe8019 100644 +index 6ae3d73f8..4c15027fe 100644  --- a/grub-core/kern/dl.c  +++ b/grub-core/kern/dl.c -@@ -510,7 +510,7 @@ grub_dl_resolve_name (grub_dl_t mod, Elf_Ehdr *e) +@@ -511,7 +511,7 @@ grub_dl_resolve_name (grub_dl_t mod, Elf_Ehdr *e)     s = grub_dl_find_section (e, ".modname");     if (!s) diff --git a/config/grub/xhci/patches/0013-don-t-print-empty-error-messages.patch b/config/grub/xhci/patches/0013-don-t-print-empty-error-messages.patch index 23672773..7cd354e3 100644 --- a/config/grub/xhci/patches/0013-don-t-print-empty-error-messages.patch +++ b/config/grub/xhci/patches/0013-don-t-print-empty-error-messages.patch @@ -1,7 +1,7 @@ -From e459ed55902003644e7bcd76361cc43247231a99 Mon Sep 17 00:00:00 2001 +From 88c2d1618283c7f1c3b4adbce532789b0ca2447d Mon Sep 17 00:00:00 2001  From: Leah Rowe <leah@libreboot.org>  Date: Sun, 5 Nov 2023 17:25:20 +0000 -Subject: [PATCH 13/22] don't print empty error messages +Subject: [PATCH 13/26] don't print empty error messages  this is part two of the quest to kill the prefix  error message. after i disabled prefix-related diff --git a/config/grub/xhci/patches/0014-grub-core-bus-usb-Parse-SuperSpeed-companion-descrip.patch b/config/grub/xhci/patches/0014-grub-core-bus-usb-Parse-SuperSpeed-companion-descrip.patch index bc18cb13..a35a16e9 100644 --- a/config/grub/xhci/patches/0014-grub-core-bus-usb-Parse-SuperSpeed-companion-descrip.patch +++ b/config/grub/xhci/patches/0014-grub-core-bus-usb-Parse-SuperSpeed-companion-descrip.patch @@ -1,7 +1,7 @@ -From 85fdf29d37b58be96042d6df24f8bc08bba9906d Mon Sep 17 00:00:00 2001 +From 2472f3c2e465863c51a3cacf96ab910c015cfa8e Mon Sep 17 00:00:00 2001  From: Patrick Rudolph <patrick.rudolph@9elements.com>  Date: Sun, 15 Nov 2020 19:00:27 +0100 -Subject: [PATCH 14/22] grub-core/bus/usb: Parse SuperSpeed companion +Subject: [PATCH 14/26] grub-core/bus/usb: Parse SuperSpeed companion   descriptors  Parse the SS_ENDPOINT_COMPANION descriptor, which is only present on USB 3.0 diff --git a/config/grub/xhci/patches/0015-usb-Add-enum-for-xHCI.patch b/config/grub/xhci/patches/0015-usb-Add-enum-for-xHCI.patch index d8330e59..84b81df7 100644 --- a/config/grub/xhci/patches/0015-usb-Add-enum-for-xHCI.patch +++ b/config/grub/xhci/patches/0015-usb-Add-enum-for-xHCI.patch @@ -1,7 +1,7 @@ -From 26a5ed135c94b295b9a0037f5e7201eb5d38fde4 Mon Sep 17 00:00:00 2001 +From 681a247209c83451cdebf6fc02cee6737a1921b6 Mon Sep 17 00:00:00 2001  From: Patrick Rudolph <patrick.rudolph@9elements.com> -Date: Sun, 15 Nov 2020 19:47:06 +0100 -Subject: [PATCH 15/22] usb: Add enum for xHCI +Date: Mon, 7 Dec 2020 08:41:22 +0100 +Subject: [PATCH 15/26] usb: Add enum for xHCI  Will be used in future patches. diff --git a/config/grub/xhci/patches/0016-usbtrans-Set-default-maximum-packet-size.patch b/config/grub/xhci/patches/0016-usbtrans-Set-default-maximum-packet-size.patch index 27402534..611db609 100644 --- a/config/grub/xhci/patches/0016-usbtrans-Set-default-maximum-packet-size.patch +++ b/config/grub/xhci/patches/0016-usbtrans-Set-default-maximum-packet-size.patch @@ -1,7 +1,7 @@ -From 13bc84d9f43328ba47273cbcf87c517398dcfc93 Mon Sep 17 00:00:00 2001 +From 8af01b2548f61a9197b9f931831ca397a7e7c9b3 Mon Sep 17 00:00:00 2001  From: Patrick Rudolph <patrick.rudolph@9elements.com> -Date: Sun, 15 Nov 2020 19:48:03 +0100 -Subject: [PATCH 16/22] usbtrans: Set default maximum packet size +Date: Mon, 7 Dec 2020 08:41:23 +0100 +Subject: [PATCH 16/26] usbtrans: Set default maximum packet size  Set the maximum packet size to 512 for SuperSpeed devices. diff --git a/config/grub/xhci/patches/0017-grub-core-bus-usb-Add-function-pointer-for-attach-de.patch b/config/grub/xhci/patches/0017-grub-core-bus-usb-Add-function-pointer-for-attach-de.patch index eede3791..05540fa6 100644 --- a/config/grub/xhci/patches/0017-grub-core-bus-usb-Add-function-pointer-for-attach-de.patch +++ b/config/grub/xhci/patches/0017-grub-core-bus-usb-Add-function-pointer-for-attach-de.patch @@ -1,7 +1,7 @@ -From 1518589ff286b54a27d4b11f017cb43c90cbf566 Mon Sep 17 00:00:00 2001 +From 7a977001a1574c884c4f711686c2de01386b9230 Mon Sep 17 00:00:00 2001  From: Patrick Rudolph <patrick.rudolph@9elements.com>  Date: Sun, 15 Nov 2020 19:51:42 +0100 -Subject: [PATCH 17/22] grub-core/bus/usb: Add function pointer for +Subject: [PATCH 17/26] grub-core/bus/usb: Add function pointer for   attach/detach events  The xHCI code needs to be called for attaching or detaching a device. @@ -19,7 +19,7 @@ Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>   5 files changed, 29 insertions(+)  diff --git a/grub-core/bus/usb/ehci.c b/grub-core/bus/usb/ehci.c -index 9abebc6bd..953b851c0 100644 +index 2db07c7c0..1ee056015 100644  --- a/grub-core/bus/usb/ehci.c  +++ b/grub-core/bus/usb/ehci.c  @@ -1812,6 +1812,8 @@ static struct grub_usb_controller_dev usb_controller = { diff --git a/config/grub/xhci/patches/0018-grub-core-bus-usb-usbhub-Add-new-private-fields-for-.patch b/config/grub/xhci/patches/0018-grub-core-bus-usb-usbhub-Add-new-private-fields-for-.patch index 099ef79d..a3eaba15 100644 --- a/config/grub/xhci/patches/0018-grub-core-bus-usb-usbhub-Add-new-private-fields-for-.patch +++ b/config/grub/xhci/patches/0018-grub-core-bus-usb-usbhub-Add-new-private-fields-for-.patch @@ -1,7 +1,7 @@ -From 8dd981a95cc7731b63b2d79ce6f98ce2d6b5a993 Mon Sep 17 00:00:00 2001 +From e8a237ffb5bd3ba5258ce5c173b31424f3a39392 Mon Sep 17 00:00:00 2001  From: Patrick Rudolph <patrick.rudolph@9elements.com> -Date: Sun, 15 Nov 2020 19:54:40 +0100 -Subject: [PATCH 18/22] grub-core/bus/usb/usbhub: Add new private fields for +Date: Mon, 7 Dec 2020 08:41:25 +0100 +Subject: [PATCH 18/26] grub-core/bus/usb/usbhub: Add new private fields for   xHCI controller  Store the root port number, the route, consisting out of the port ID diff --git a/config/grub/xhci/patches/0019-grub-core-bus-usb-Add-xhci-support.patch b/config/grub/xhci/patches/0019-grub-core-bus-usb-Add-xhci-support.patch index aaabb3da..e6c0d474 100644 --- a/config/grub/xhci/patches/0019-grub-core-bus-usb-Add-xhci-support.patch +++ b/config/grub/xhci/patches/0019-grub-core-bus-usb-Add-xhci-support.patch @@ -1,7 +1,7 @@ -From dde187c07a8f2a1d3357aa362ffcc0fe8dab72d7 Mon Sep 17 00:00:00 2001 +From badcc0d5ff1d4b194c93a530344788c4231d8789 Mon Sep 17 00:00:00 2001  From: Patrick Rudolph <patrick.rudolph@9elements.com> -Date: Sun, 15 Nov 2020 19:59:25 +0100 -Subject: [PATCH 19/22] grub-core/bus/usb: Add xhci support +Date: Mon, 7 Dec 2020 08:41:26 +0100 +Subject: [PATCH 19/26] grub-core/bus/usb: Add xhci support  Add support for xHCI USB controllers.  The code is based on seabios implementation, but has been heavily @@ -41,13 +41,6 @@ TODO:    * Test on USB3 hubs    * Support for USB 3.1 and USB 3.2 controllers -Tested on qemu using coreboot and grub as payload: - -qemu-system-x86_64 -M q35 -bios $firmware -device qemu-xhci,id=xhci -accel kvm -m 1024M \ -	-device usb-storage,drive=thumbdrive,bus=xhci.0,port=3 \ -	-drive if=none,format=raw,id=thumbdrive,file=ubuntu-20.04.1-desktop-amd64.iso \ -	-device usb-kbd,bus=xhci.0 -  Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>  Signed-off-by: sylv <sylv@sylv.io>  --- diff --git a/config/grub/xhci/patches/0020-grub-core-bus-usb-usbhub-Add-xHCI-non-root-hub-suppo.patch b/config/grub/xhci/patches/0020-grub-core-bus-usb-usbhub-Add-xHCI-non-root-hub-suppo.patch index 6a3266b2..01d7d008 100644 --- a/config/grub/xhci/patches/0020-grub-core-bus-usb-usbhub-Add-xHCI-non-root-hub-suppo.patch +++ b/config/grub/xhci/patches/0020-grub-core-bus-usb-usbhub-Add-xHCI-non-root-hub-suppo.patch @@ -1,7 +1,7 @@ -From 28856bd0646e0396b3d5249a99b731f2743aec5a Mon Sep 17 00:00:00 2001 +From e4416b166e501777e53de387ac4329150483a160 Mon Sep 17 00:00:00 2001  From: Patrick Rudolph <patrick.rudolph@9elements.com> -Date: Thu, 3 Dec 2020 13:44:55 +0100 -Subject: [PATCH 20/22] grub-core/bus/usb/usbhub: Add xHCI non root hub support +Date: Mon, 7 Dec 2020 08:41:27 +0100 +Subject: [PATCH 20/26] grub-core/bus/usb/usbhub: Add xHCI non root hub support  Tested on Intel PCH C246, the USB3 hub can be configured by grub. diff --git a/config/grub/xhci/patches/0021-xHCI-also-accept-SBRN-0x31-and-0x32.patch b/config/grub/xhci/patches/0021-xHCI-also-accept-SBRN-0x31-and-0x32.patch new file mode 100644 index 00000000..d0874f85 --- /dev/null +++ b/config/grub/xhci/patches/0021-xHCI-also-accept-SBRN-0x31-and-0x32.patch @@ -0,0 +1,26 @@ +From 8e6d5b598b3e21c905023b438110d71f487a2289 Mon Sep 17 00:00:00 2001 +From: Sven Anderson <sven@anderson.de> +Date: Sat, 28 May 2022 21:39:23 +0200 +Subject: [PATCH 21/26] xHCI: also accept SBRN 0x31 and 0x32 + +Signed-off-by: Sven Anderson <sven@anderson.de> +--- + grub-core/bus/usb/xhci-pci.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/bus/usb/xhci-pci.c b/grub-core/bus/usb/xhci-pci.c +index a5bd3c97d..cde21f57a 100644 +--- a/grub-core/bus/usb/xhci-pci.c ++++ b/grub-core/bus/usb/xhci-pci.c +@@ -76,7 +76,7 @@ grub_xhci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid, +       /* Check Serial Bus Release Number */ +       addr = grub_pci_make_address (dev, GRUB_XHCI_PCI_SBRN_REG); +       release = grub_pci_read_byte (addr); +-      if (release != 0x30) ++      if (release != 0x30 && release != 0x31 &&release != 0x32) + 	{ + 	  grub_dprintf ("xhci", "XHCI grub_xhci_pci_iter: Wrong SBRN: %0x\n", + 			release); +--  +2.39.5 + diff --git a/config/grub/xhci/patches/0022-xhci-fix-port-indexing.patch b/config/grub/xhci/patches/0022-xhci-fix-port-indexing.patch new file mode 100644 index 00000000..7e0bcb74 --- /dev/null +++ b/config/grub/xhci/patches/0022-xhci-fix-port-indexing.patch @@ -0,0 +1,43 @@ +From 32c6d97e2a80c2e74dd9daf74281a89d1a05faaa Mon Sep 17 00:00:00 2001 +From: Sven Anderson <sven@anderson.de> +Date: Mon, 13 Jan 2025 19:51:41 +0100 +Subject: [PATCH 22/26] xhci: fix port indexing + +--- + grub-core/bus/usb/xhci.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/grub-core/bus/usb/xhci.c b/grub-core/bus/usb/xhci.c +index f4591ffb5..dc89b9619 100644 +--- a/grub-core/bus/usb/xhci.c ++++ b/grub-core/bus/usb/xhci.c +@@ -2250,7 +2250,7 @@ grub_xhci_detect_dev (grub_usb_controller_t dev, int port, int *changed) +  +   *changed = 0; +   grub_dprintf("xhci", "%s: dev=%p USB%d_%d port %d\n", __func__, dev, +-	       x->psids[port-1].major, x->psids[port-1].minor, port); ++	       x->psids[port].major, x->psids[port].minor, port); +  +   /* On shutdown advertise all ports as disconnected. This will trigger +    * a gracefull detatch. */ +@@ -2285,13 +2285,13 @@ grub_xhci_detect_dev (grub_usb_controller_t dev, int port, int *changed) +   if (!(portsc & GRUB_XHCI_PORTSC_CCS)) +     return GRUB_USB_SPEED_NONE; +  +-  for (grub_uint8_t i = 0; i < 16 && x->psids[port-1].psids[i].id > 0; i++) ++  for (grub_uint8_t i = 0; i < 16 && x->psids[port].psids[i].id > 0; i++) +     { +-      if (x->psids[port-1].psids[i].id == speed) ++      if (x->psids[port].psids[i].id == speed) +         { + 	  grub_dprintf("xhci", "%s: grub_usb_speed = %d\n", __func__, +-		       x->psids[port-1].psids[i].grub_usb_speed ); +-	  return x->psids[port-1].psids[i].grub_usb_speed; ++		       x->psids[port].psids[i].grub_usb_speed ); ++	  return x->psids[port].psids[i].grub_usb_speed; + 	} +     } +  +--  +2.39.5 + diff --git a/config/grub/xhci/patches/0023-xhci-workaround-z790-non-root-hub-speed-detection.patch b/config/grub/xhci/patches/0023-xhci-workaround-z790-non-root-hub-speed-detection.patch new file mode 100644 index 00000000..f07500fd --- /dev/null +++ b/config/grub/xhci/patches/0023-xhci-workaround-z790-non-root-hub-speed-detection.patch @@ -0,0 +1,28 @@ +From 70731c46da05311edb639ce1349bb6dd3279031e Mon Sep 17 00:00:00 2001 +From: Sven Anderson <sven@anderson.de> +Date: Mon, 13 Jan 2025 19:55:15 +0100 +Subject: [PATCH 23/26] xhci: workaround z790 non-root-hub speed detection + +--- + grub-core/bus/usb/xhci.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/grub-core/bus/usb/xhci.c b/grub-core/bus/usb/xhci.c +index dc89b9619..d13a7c39d 100644 +--- a/grub-core/bus/usb/xhci.c ++++ b/grub-core/bus/usb/xhci.c +@@ -2285,6 +2285,11 @@ grub_xhci_detect_dev (grub_usb_controller_t dev, int port, int *changed) +   if (!(portsc & GRUB_XHCI_PORTSC_CCS)) +     return GRUB_USB_SPEED_NONE; +  ++  if (port == 4 || port == 12 && speed < XHCI_USB_HIGHSPEED) { // inital hub speed detection on Z790 is too low ++    grub_dprintf("xhci", "%s: setting internal hub speed to high\n", __func__); ++    return GRUB_USB_SPEED_HIGH; ++  } ++ +   for (grub_uint8_t i = 0; i < 16 && x->psids[port].psids[i].id > 0; i++) +     { +       if (x->psids[port].psids[i].id == speed) +--  +2.39.5 + diff --git a/config/grub/xhci/patches/0024-xhci-configure-TT-for-non-root-hubs.patch b/config/grub/xhci/patches/0024-xhci-configure-TT-for-non-root-hubs.patch new file mode 100644 index 00000000..a605e210 --- /dev/null +++ b/config/grub/xhci/patches/0024-xhci-configure-TT-for-non-root-hubs.patch @@ -0,0 +1,98 @@ +From 233f7dd274ef2ccac7b1fc0f5cfdeb7c01aef58b Mon Sep 17 00:00:00 2001 +From: Sven Anderson <sven@anderson.de> +Date: Mon, 13 Jan 2025 20:26:32 +0100 +Subject: [PATCH 24/26] xhci: configure TT for non-root-hubs + +--- + grub-core/bus/usb/usbhub.c |  6 +++++ + grub-core/bus/usb/xhci.c   | 45 +++++++++++++++++++++++++++++++++----- + include/grub/usb.h         |  2 ++ + 3 files changed, 47 insertions(+), 6 deletions(-) + +diff --git a/grub-core/bus/usb/usbhub.c b/grub-core/bus/usb/usbhub.c +index e96505aa9..629b3ed53 100644 +--- a/grub-core/bus/usb/usbhub.c ++++ b/grub-core/bus/usb/usbhub.c +@@ -818,3 +818,9 @@ grub_usb_iterate (grub_usb_iterate_hook_t hook, void *hook_data) +  +   return 0; + } ++ ++grub_usb_device_t ++grub_usb_get_dev (int addr) ++{ ++  return grub_usb_devs[addr]; ++} +diff --git a/grub-core/bus/usb/xhci.c b/grub-core/bus/usb/xhci.c +index d13a7c39d..8ad2a10f9 100644 +--- a/grub-core/bus/usb/xhci.c ++++ b/grub-core/bus/usb/xhci.c +@@ -623,13 +623,46 @@ grub_xhci_alloc_inctx(struct grub_xhci *x, int maxepid, +       break; +   } +  +-  /* Route is greater zero on devices that are connected to a non root hub */ +-  if (dev->route) +-    { +-      /* FIXME: Implement this code for non SuperSpeed hub devices */ ++  /* Set routing string */ ++  slot->ctx[0] |= dev->route; ++ ++  /* Set root hub port number */ ++  slot->ctx[1] |= (dev->root_port + 1) << 16; ++ ++  if (dev->split_hubaddr && (dev->speed == GRUB_USB_SPEED_LOW || ++                            dev->speed == GRUB_USB_SPEED_FULL)) { ++ ++    grub_usb_device_t hubdev = grub_usb_get_dev(dev->split_hubaddr); ++ ++    if (!hubdev || hubdev->descdev.class != GRUB_USB_CLASS_HUB) { ++      grub_dprintf("xhci", "Invalid hub device at addr %d!\n", dev->split_hubaddr); ++      return NULL; ++    } ++ ++    struct grub_xhci_priv *hub_priv = hubdev->xhci_priv; ++    if (!hub_priv) { ++      grub_dprintf("xhci", "Hub has no xhci_priv!\n");  ++      return NULL; ++    } ++ ++    if (hubdev->speed == GRUB_USB_SPEED_HIGH) { ++      /* Direct connection to high-speed hub - set up TT */ ++      grub_dprintf("xhci", "Direct high-speed hub connection - configuring TT with " ++                   "hub slot %d port %d\n", hub_priv->slotid, dev->split_hubport); ++      slot->ctx[2] |= hub_priv->slotid; ++      slot->ctx[2] |= dev->split_hubport << 8; +     } +-  slot->ctx[0]    |= dev->route; +-  slot->ctx[1]    |= (dev->root_port+1) << 16; ++    else { ++      /* Hub is not high-speed, inherit TT settings from parent */ ++      volatile struct grub_xhci_slotctx *hubslot; ++      grub_dprintf("xhci", "Non high-speed hub - inheriting TT settings from parent\n"); ++      hubslot = grub_dma_phys2virt(x->devs[hub_priv->slotid].ptr_low, x->devs_dma); ++      slot->ctx[2] = hubslot->ctx[2]; ++    } ++  } ++ ++  grub_dprintf("xhci", "Slot context: ctx[0]=0x%08x ctx[1]=0x%08x ctx[2]=0x%08x\n", ++               slot->ctx[0], slot->ctx[1], slot->ctx[2]); +  +   grub_arch_sync_dma_caches(in, size); +  +diff --git a/include/grub/usb.h b/include/grub/usb.h +index eb71fa1c7..df97a60cc 100644 +--- a/include/grub/usb.h ++++ b/include/grub/usb.h +@@ -62,6 +62,8 @@ typedef int (*grub_usb_controller_iterate_hook_t) (grub_usb_controller_t dev, + /* Call HOOK with each device, until HOOK returns non-zero.  */ + int grub_usb_iterate (grub_usb_iterate_hook_t hook, void *hook_data); +  ++grub_usb_device_t grub_usb_get_dev (int addr); ++ + grub_usb_err_t grub_usb_device_initialize (grub_usb_device_t dev); +  + grub_usb_err_t grub_usb_get_descriptor (grub_usb_device_t dev, +--  +2.39.5 + diff --git a/config/grub/xhci/patches/0021-Fix-compilation-on-x86_64.patch b/config/grub/xhci/patches/0025-Fix-compilation-on-x86_64.patch index 8f80664c..e75cc5e9 100644 --- a/config/grub/xhci/patches/0021-Fix-compilation-on-x86_64.patch +++ b/config/grub/xhci/patches/0025-Fix-compilation-on-x86_64.patch @@ -1,7 +1,7 @@ -From 040942842dc05c9b94c9be21f01b08da3e25fe6d Mon Sep 17 00:00:00 2001 +From 0441e7eff7950bfd47fc2f5533ce2c64b785dc1d Mon Sep 17 00:00:00 2001  From: Patrick Rudolph <patrick.rudolph@9elements.com>  Date: Wed, 24 Feb 2021 08:25:41 +0100 -Subject: [PATCH 21/22] Fix compilation on x86_64 +Subject: [PATCH 25/26] Fix compilation on x86_64  Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>  --- @@ -9,7 +9,7 @@ Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>   1 file changed, 16 insertions(+), 8 deletions(-)  diff --git a/grub-core/bus/usb/xhci.c b/grub-core/bus/usb/xhci.c -index f4591ffb5..3495bb919 100644 +index 8ad2a10f9..ceb57c9b3 100644  --- a/grub-core/bus/usb/xhci.c  +++ b/grub-core/bus/usb/xhci.c  @@ -184,7 +184,7 @@ enum @@ -36,7 +36,7 @@ index f4591ffb5..3495bb919 100644   static inline grub_uint32_t   grub_xhci_port_read (struct grub_xhci *x, grub_uint32_t port)   { -@@ -664,7 +672,7 @@ static void xhci_process_events(struct grub_xhci *x) +@@ -697,7 +705,7 @@ static void xhci_process_events(struct grub_xhci *x)   	    case ER_TRANSFER:   	    case ER_COMMAND_COMPLETE:   	      { @@ -45,7 +45,7 @@ index f4591ffb5..3495bb919 100644   		struct grub_xhci_ring *ring = XHCI_RING(rtrb);   		volatile struct grub_xhci_trb  *evt = &ring->evt;   		grub_uint32_t eidx = rtrb - ring->ring + 1; -@@ -697,9 +705,9 @@ static void xhci_process_events(struct grub_xhci *x) +@@ -730,9 +738,9 @@ static void xhci_process_events(struct grub_xhci *x)   	  }   	grub_xhci_write32(&evts->nidx, nidx);   	volatile struct grub_xhci_ir *ir = x->ir; @@ -58,7 +58,7 @@ index f4591ffb5..3495bb919 100644       }   } -@@ -800,7 +808,7 @@ static void xhci_trb_queue(volatile struct grub_xhci_ring *ring, +@@ -833,7 +841,7 @@ static void xhci_trb_queue(volatile struct grub_xhci_ring *ring,   			   grub_uint32_t xferlen, grub_uint32_t flags)   {     grub_dprintf("xhci", "%s: ring %p data %llx len %d flags 0x%x remain 0x%x\n", __func__, @@ -67,7 +67,7 @@ index f4591ffb5..3495bb919 100644     if (xhci_ring_full(ring))       { -@@ -1907,7 +1915,7 @@ grub_xhci_setup_transfer (grub_usb_controller_t dev, +@@ -1940,7 +1948,7 @@ grub_xhci_setup_transfer (grub_usb_controller_t dev,     if (transfer->type == GRUB_USB_TRANSACTION_TYPE_CONTROL)     {       volatile struct grub_usb_packet_setup *setupdata; @@ -76,7 +76,7 @@ index f4591ffb5..3495bb919 100644       grub_dprintf("xhci", "%s: CONTROLL TRANS req %d\n", __func__, setupdata->request);       grub_dprintf("xhci", "%s: CONTROLL TRANS length %d\n", __func__, setupdata->length); -@@ -1974,7 +1982,7 @@ grub_xhci_setup_transfer (grub_usb_controller_t dev, +@@ -2007,7 +2015,7 @@ grub_xhci_setup_transfer (grub_usb_controller_t dev,   	/* Assume the ring has enough free space for all TRBs */   	if (flags & TRB_TR_IDT && tr->size <= (int)sizeof(inline_data))   	  { diff --git a/config/grub/xhci/patches/0022-Add-native-NVMe-driver-based-on-SeaBIOS.patch b/config/grub/xhci/patches/0026-Add-native-NVMe-driver-based-on-SeaBIOS.patch index c105dd19..36bbecd9 100644 --- a/config/grub/xhci/patches/0022-Add-native-NVMe-driver-based-on-SeaBIOS.patch +++ b/config/grub/xhci/patches/0026-Add-native-NVMe-driver-based-on-SeaBIOS.patch @@ -1,7 +1,7 @@ -From 2fb0de8881bd2fe637d05bec0ae887f380434b7d Mon Sep 17 00:00:00 2001 +From 4440b01a702368c81520f630aa16852de55bb808 Mon Sep 17 00:00:00 2001  From: Mate Kukri <km@mkukri.xyz>  Date: Mon, 20 May 2024 11:43:35 +0100 -Subject: [PATCH 22/22] Add native NVMe driver based on SeaBIOS +Subject: [PATCH 26/26] Add native NVMe driver based on SeaBIOS  Tested to successfully boot Debian on QEMU and OptiPlex 3050. @@ -31,20 +31,19 @@ index 65016f856..7bc0866ba 100644   endif  diff --git a/grub-core/Makefile.core.def b/grub-core/Makefile.core.def -index fda723f0c..27a707fda 100644 +index fda723f0c..367e4b5e6 100644  --- a/grub-core/Makefile.core.def  +++ b/grub-core/Makefile.core.def -@@ -2683,4 +2683,10 @@ module = { -   common = tests/asn1/asn1_test.c; +@@ -2684,3 +2684,9 @@ module = {     cflags = '-Wno-uninitialized';     cppflags = '-I$(srcdir)/lib/libtasn1-grub -I$(srcdir)/tests/asn1/'; -+}; + };  +  +module = {  +  name = nvme;  +  common = disk/nvme.c;  +  enable = pci; - }; ++};  diff --git a/grub-core/commands/nativedisk.c b/grub-core/commands/nativedisk.c  index 6806bff9c..fd68a513e 100644  --- a/grub-core/commands/nativedisk.c diff --git a/config/grub/xhci/target.cfg b/config/grub/xhci/target.cfg index 540f11f7..aca71fca 100644 --- a/config/grub/xhci/target.cfg +++ b/config/grub/xhci/target.cfg @@ -1,4 +1,4 @@  # SPDX-License-Identifier: GPL-3.0-or-later  tree="xhci" -rev="6811f6f09d61996a3acbc4fc0414e45964f0e2d9" +rev="4dc6166571645780c459dde2cdc1b001a5ec844c" | 
