summaryrefslogtreecommitdiff
path: root/config/grub/xhci/patches/0023-xhci-configure-TT-for-non-root-hubs.patch
diff options
context:
space:
mode:
authorLeah Rowe <leah@libreboot.org>2025-10-02 23:47:31 +0100
committerLeah Rowe <leah@libreboot.org>2025-10-02 23:48:48 +0100
commitaf88a066d0e4fc5aaa63b2e7a4989d1f64b3f7b2 (patch)
tree070807dcf18f99f9bc3a070bbb55dddd23af199b /config/grub/xhci/patches/0023-xhci-configure-TT-for-non-root-hubs.patch
parentd90defeae3e4e7c91ba521e44071d962abb33d3f (diff)
grub/xhci: rename to grub/xhci_nvme
we have the "default" tree, then the "nvme" tree which adds nvme support. the "xhci" tree adds xhci patches, *and* nvme patches. riku suggested that i rename it accordingly, and his advice was quite correct, indeed wise. this will reduce confusion for contributors, including *myself*. Signed-off-by: Leah Rowe <leah@libreboot.org>
Diffstat (limited to 'config/grub/xhci/patches/0023-xhci-configure-TT-for-non-root-hubs.patch')
-rw-r--r--config/grub/xhci/patches/0023-xhci-configure-TT-for-non-root-hubs.patch98
1 files changed, 0 insertions, 98 deletions
diff --git a/config/grub/xhci/patches/0023-xhci-configure-TT-for-non-root-hubs.patch b/config/grub/xhci/patches/0023-xhci-configure-TT-for-non-root-hubs.patch
deleted file mode 100644
index b41db45f..00000000
--- a/config/grub/xhci/patches/0023-xhci-configure-TT-for-non-root-hubs.patch
+++ /dev/null
@@ -1,98 +0,0 @@
-From 0a669ef9815267de4fb14f3c329431ac531755c9 Mon Sep 17 00:00:00 2001
-From: Sven Anderson <sven@anderson.de>
-Date: Mon, 13 Jan 2025 20:26:32 +0100
-Subject: [PATCH 23/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 dc89b9619..88c9ac57f 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
-