summaryrefslogtreecommitdiff
path: root/config/grub/patches/0005-xhci/0007-grub-core-bus-usb-usbhub-Add-xHCI-non-root-hub-suppo.patch
diff options
context:
space:
mode:
Diffstat (limited to 'config/grub/patches/0005-xhci/0007-grub-core-bus-usb-usbhub-Add-xHCI-non-root-hub-suppo.patch')
-rw-r--r--config/grub/patches/0005-xhci/0007-grub-core-bus-usb-usbhub-Add-xHCI-non-root-hub-suppo.patch127
1 files changed, 0 insertions, 127 deletions
diff --git a/config/grub/patches/0005-xhci/0007-grub-core-bus-usb-usbhub-Add-xHCI-non-root-hub-suppo.patch b/config/grub/patches/0005-xhci/0007-grub-core-bus-usb-usbhub-Add-xHCI-non-root-hub-suppo.patch
deleted file mode 100644
index a37bbd6b..00000000
--- a/config/grub/patches/0005-xhci/0007-grub-core-bus-usb-usbhub-Add-xHCI-non-root-hub-suppo.patch
+++ /dev/null
@@ -1,127 +0,0 @@
-From 2a2c64f6ea62337c1263a70f6ca9a9bade66b78b 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 7/8] grub-core/bus/usb/usbhub: Add xHCI non root hub support
-
-Tested on Intel PCH C246, the USB3 hub can be configured by grub.
-
-Issues:
-* USB3 devices connected behind that hub are sometimes not detected.
-
-Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
----
- grub-core/bus/usb/usbhub.c | 38 +++++++++++++++++++++++++++++++++-----
- include/grub/usbdesc.h | 1 +
- include/grub/usbtrans.h | 4 ++++
- 3 files changed, 38 insertions(+), 5 deletions(-)
-
-diff --git a/grub-core/bus/usb/usbhub.c b/grub-core/bus/usb/usbhub.c
-index b4b3a1a61..e96505aa9 100644
---- a/grub-core/bus/usb/usbhub.c
-+++ b/grub-core/bus/usb/usbhub.c
-@@ -148,19 +148,32 @@ grub_usb_hub_add_dev (grub_usb_controller_t controller,
- return dev;
- }
-
--
-+static grub_usb_err_t
-+grub_usb_set_hub_depth(grub_usb_device_t dev, grub_uint8_t depth)
-+{
-+ return grub_usb_control_msg (dev, (GRUB_USB_REQTYPE_OUT
-+ | GRUB_USB_REQTYPE_CLASS
-+ | GRUB_USB_REQTYPE_TARGET_DEV),
-+ GRUB_USB_HUB_REQ_SET_HUB_DEPTH, depth,
-+ 0, 0, NULL);
-+}
-+
- static grub_usb_err_t
- grub_usb_add_hub (grub_usb_device_t dev)
- {
- struct grub_usb_usb_hubdesc hubdesc;
- grub_usb_err_t err;
-+ grub_uint16_t req;
- int i;
-
-+ req = (dev->speed == GRUB_USB_SPEED_SUPER) ? GRUB_USB_DESCRIPTOR_SS_HUB :
-+ GRUB_USB_DESCRIPTOR_HUB;
-+
- err = grub_usb_control_msg (dev, (GRUB_USB_REQTYPE_IN
- | GRUB_USB_REQTYPE_CLASS
- | GRUB_USB_REQTYPE_TARGET_DEV),
-- GRUB_USB_REQ_GET_DESCRIPTOR,
-- (GRUB_USB_DESCRIPTOR_HUB << 8) | 0,
-+ GRUB_USB_REQ_GET_DESCRIPTOR,
-+ (req << 8) | 0,
- 0, sizeof (hubdesc), (char *) &hubdesc);
- if (err)
- return err;
-@@ -183,6 +196,19 @@ grub_usb_add_hub (grub_usb_device_t dev)
- return GRUB_USB_ERR_INTERNAL;
- }
-
-+ if (dev->speed == GRUB_USB_SPEED_SUPER)
-+ {
-+ grub_uint8_t depth;
-+ grub_uint32_t route;
-+ /* Depth maximum value is 5, but root hubs doesn't count */
-+ for (depth = 0, route = dev->route; (route & 0xf) > 0; route >>= 4)
-+ depth++;
-+
-+ err = grub_usb_set_hub_depth(dev, depth);
-+ if (err)
-+ return err;
-+ }
-+
- /* Power on all Hub ports. */
- for (i = 1; i <= hubdesc.portcnt; i++)
- {
-@@ -637,7 +663,9 @@ poll_nonroot_hub (grub_usb_device_t dev)
- int split_hubaddr = 0;
-
- /* Determine the device speed. */
-- if (status & GRUB_USB_HUB_STATUS_PORT_LOWSPEED)
-+ if (dev->speed == GRUB_USB_SPEED_SUPER)
-+ speed = GRUB_USB_SPEED_SUPER;
-+ else if (status & GRUB_USB_HUB_STATUS_PORT_LOWSPEED)
- speed = GRUB_USB_SPEED_LOW;
- else
- {
-@@ -651,7 +679,7 @@ poll_nonroot_hub (grub_usb_device_t dev)
- grub_millisleep (10);
-
- /* Find correct values for SPLIT hubport and hubaddr */
-- if (speed == GRUB_USB_SPEED_HIGH)
-+ if (speed == GRUB_USB_SPEED_HIGH || speed == GRUB_USB_SPEED_SUPER)
- {
- /* HIGH speed device needs not transaction translation */
- split_hubport = 0;
-diff --git a/include/grub/usbdesc.h b/include/grub/usbdesc.h
-index bb2ab2e27..1697aa465 100644
---- a/include/grub/usbdesc.h
-+++ b/include/grub/usbdesc.h
-@@ -30,6 +30,7 @@ typedef enum {
- GRUB_USB_DESCRIPTOR_ENDPOINT,
- GRUB_USB_DESCRIPTOR_DEBUG = 10,
- GRUB_USB_DESCRIPTOR_HUB = 0x29,
-+ GRUB_USB_DESCRIPTOR_SS_HUB = 0x2a,
- GRUB_USB_DESCRIPTOR_SS_ENDPOINT_COMPANION = 0x30
- } grub_usb_descriptor_t;
-
-diff --git a/include/grub/usbtrans.h b/include/grub/usbtrans.h
-index 039ebed65..d6c3f71dc 100644
---- a/include/grub/usbtrans.h
-+++ b/include/grub/usbtrans.h
-@@ -110,6 +110,10 @@ enum
- GRUB_USB_REQ_SET_INTERFACE = 0x0B,
- GRUB_USB_REQ_SYNC_FRAME = 0x0C
- };
-+enum
-+ {
-+ GRUB_USB_HUB_REQ_SET_HUB_DEPTH = 0x0C,
-+ };
-
- #define GRUB_USB_FEATURE_ENDP_HALT 0x00
- #define GRUB_USB_FEATURE_DEV_REMOTE_WU 0x01
---
-2.39.2
-