grub/xhci: Add xHCI non-root-hub fixes from Nitrokey

See:
https://github.com/Nitrokey/nethsm-grub/commits/nethsm-z790?since=2025-01-13&until=2025-01-13

And more generally, see branch:
https://github.com/Nitrokey/nethsm-grub/commits/nethsm-z790

This brings in a few minor fixes, and also a not-so-minor fix:
Add TT (transaction translation) handling for non-SuperSpeed
devices in xhci.c

More generally, this patchset will improve non-root hub support
in the xHCI code. There is also a patch to work around a quirk
on the MSI Z790-P mainboard, which I'm planning to add to Libreboot
at a later date.

Signed-off-by: Leah Rowe <leah@libreboot.org>
master
Leah Rowe 2025-01-14 20:24:00 +00:00
parent a6c9ebd11f
commit 232f6b8610
26 changed files with 254 additions and 67 deletions

View File

@ -1,7 +1,7 @@
From c94b9ea258feb53773bab06bc2a6c6e66a44f867 Mon Sep 17 00:00:00 2001
From 98b66bcfe063a4035f851a542e57dc2c4bd51a57 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.

View File

@ -1,4 +1,4 @@
From da775eafbe79e3100ca2262bde49e3e65978e83f Mon Sep 17 00:00:00 2001
From 71b146159e0aad33b267d062885ca0635aa23283 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 canoeboot, in the grub menu
@ -8,7 +8,7 @@ Subject: [PATCH 02/22] say the name canoeboot, in the grub menu
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 bd4431000..74cfc49c0 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,

View File

@ -1,7 +1,7 @@
From b91e5cafa7863b5a61e97d483f98dcece374721a Mon Sep 17 00:00:00 2001
From ba1b693f60ab68af207d8f39a5d6e28f74872031 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>
---

View File

@ -1,7 +1,7 @@
From 58e0d7b7bcec2392b81dda613d070804f7c68cf5 Mon Sep 17 00:00:00 2001
From a3c13eb165cb375017a76b219f1de1604a9dc156 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>
---

View File

@ -1,7 +1,7 @@
From 65a9b252b79d5d1fa022e3da9ef91459ad8efb94 Mon Sep 17 00:00:00 2001
From 176751e11424f75155ce64311923acf48fc4ec3c 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>
---

View File

@ -1,7 +1,7 @@
From 809908898f9d67979885a651b295ca1fa066039c Mon Sep 17 00:00:00 2001
From a779f27023bee409d06f6b9023cd907d2f3b959d 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>
---

View File

@ -1,7 +1,7 @@
From 26ae5da9ed8382869b699a653988e6c8f32bd3d1 Mon Sep 17 00:00:00 2001
From 3ab4a66104c772241e42b1f4f42a5890f3059164 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>
---

View File

@ -1,7 +1,7 @@
From 6ce0b0629aa1377237c19290f33008ff81969962 Mon Sep 17 00:00:00 2001
From 94a89aea5118294173d29bdf49e41f7801e3df48 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>
---

View File

@ -1,7 +1,7 @@
From 3f69e2c35ccf2a37fd35f1821c7b85cc6df07ca7 Mon Sep 17 00:00:00 2001
From ddd9c783a8b6dec9e116930f2a8ccfac354d7e29 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.

View File

@ -1,7 +1,7 @@
From 44befdaa1ee588591f46c13d057fdef56b87218c Mon Sep 17 00:00:00 2001
From 1391cfd14088e90e01a477269e2892c89ba2536d 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.

View File

@ -1,7 +1,7 @@
From bfecf6d86ccf82fb85af93600931cee589891089 Mon Sep 17 00:00:00 2001
From 3f1eb3f472d2c92e5a2a14c7c3469154ae450df6 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,

View File

@ -1,7 +1,7 @@
From f44fc56f06559313841de2b53637020fbe139803 Mon Sep 17 00:00:00 2001
From 5a2700d29f8145d94886aa369e4c68d57295d44a 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

View File

@ -1,7 +1,7 @@
From e459ed55902003644e7bcd76361cc43247231a99 Mon Sep 17 00:00:00 2001
From 376f1dbf2c56623e9b9bda3a4079b4b970ab2ebd 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

View File

@ -1,7 +1,7 @@
From 85fdf29d37b58be96042d6df24f8bc08bba9906d Mon Sep 17 00:00:00 2001
From 8094d43abecf758617aec1d4f8c9b1099cb4e67e 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

View File

@ -1,7 +1,7 @@
From 26a5ed135c94b295b9a0037f5e7201eb5d38fde4 Mon Sep 17 00:00:00 2001
From fd92646af5b9a5cc027ce0bd6afa5cc7bc8f46a3 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.

View File

@ -1,7 +1,7 @@
From 13bc84d9f43328ba47273cbcf87c517398dcfc93 Mon Sep 17 00:00:00 2001
From f7c7c25e274b79a7c8e62250fa9bc49f81bd4456 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.

View File

@ -1,7 +1,7 @@
From 1518589ff286b54a27d4b11f017cb43c90cbf566 Mon Sep 17 00:00:00 2001
From c3d70163d472953b705ff1250e3c4bfec8cb52ad 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.

View File

@ -1,7 +1,7 @@
From 8dd981a95cc7731b63b2d79ce6f98ce2d6b5a993 Mon Sep 17 00:00:00 2001
From 4b21796042db28db773534d5f0cf83738a72b929 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

View File

@ -1,7 +1,7 @@
From dde187c07a8f2a1d3357aa362ffcc0fe8dab72d7 Mon Sep 17 00:00:00 2001
From 75b3d347ea5f3c51615f8ccb670b9f2033f8594f 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>
---

View File

@ -1,7 +1,7 @@
From 28856bd0646e0396b3d5249a99b731f2743aec5a Mon Sep 17 00:00:00 2001
From 6d05a393bf192bb5ae3ba1f7d653617b7ab9bb2e 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.

View File

@ -0,0 +1,26 @@
From 3fa33c091866b13c452b7a39ecee291e5901ff22 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

View File

@ -0,0 +1,43 @@
From c455091ce40ffd8218802aaadeacf2039fea5036 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

View File

@ -0,0 +1,28 @@
From b033ef3b4b2384df4165ae7829155cafd4ee3488 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

View File

@ -0,0 +1,98 @@
From 7748bcc0e7cef17dbf626f83cc03e56a17075330 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

View File

@ -1,7 +1,7 @@
From 040942842dc05c9b94c9be21f01b08da3e25fe6d Mon Sep 17 00:00:00 2001
From 915d9b148cb57e22bb58505f72bc81add2479a73 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))
{

View File

@ -1,7 +1,7 @@
From 2fb0de8881bd2fe637d05bec0ae887f380434b7d Mon Sep 17 00:00:00 2001
From a4e50d731ed687420850a10a84415b9cb9c6cf13 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