Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
08e971f
drivers/usbhost: Attach the xHCI interrupt after the controller starts.
Fishwaldo Aug 16, 2026
ca6502a
drivers/usbhost: Do not disable an xHCI port while probing it.
Fishwaldo Aug 16, 2026
7c27394
drivers/usbhost: Acknowledge xHCI events before walking the ring.
Fishwaldo Aug 16, 2026
1d1d21c
drivers/usbhost: Silence the xHCI interrupter until its worker has run.
Fishwaldo Aug 16, 2026
e6d1f6c
drivers/usbhost: Set the xHCI interrupter moderation interval.
Fishwaldo Aug 16, 2026
8c427cb
drivers/usbhost: Flush the xHCI rings and structures by address.
Fishwaldo Aug 16, 2026
3827a0c
drivers/usbhost: Chain xHCI TRBs across a 64K boundary.
Fishwaldo Aug 16, 2026
2c52f90
drivers/usbhost: Maintain the cache over xHCI data buffers.
Fishwaldo Aug 16, 2026
042f20c
drivers/usbhost: Read xHCI HCIVERSION with an aligned access.
Fishwaldo Aug 16, 2026
84653a3
drivers/usbhost: Report which xHCI command was rejected.
Fishwaldo Aug 16, 2026
66dfbf4
drivers/usbhost: Compute the event ring segment count at full width.
Fishwaldo Aug 16, 2026
4246bb3
drivers/usbhost: Describe devices to an xHCI controller correctly.
Fishwaldo Aug 16, 2026
28858db
drivers/usbhost: Carry the xHCI transfer chain across the ring join.
Fishwaldo Aug 16, 2026
ddabfb1
drivers/usbhost: Announce what an xHCI port has attached.
Fishwaldo Aug 16, 2026
843d5ac
drivers/usbhost: Copy an xHCI stand-in buffer in the caller's context.
Fishwaldo Aug 16, 2026
67d796d
drivers/usbhost: Convert the xHCI endpoint interval from the descriptor.
Fishwaldo Aug 16, 2026
6682b21
drivers/usbhost: Check for the device before allocating an endpoint.
Fishwaldo Aug 16, 2026
b0d9bb9
drivers/usbhost: Make xHCI asynchronous transfers deliver their data.
Fishwaldo Aug 5, 2026
1e65485
drivers/usbhost: Serialise xHCI transfers per endpoint.
Fishwaldo Aug 8, 2026
471a04c
drivers/usbhost: Release the xHCI slot when enumeration fails.
Fishwaldo Aug 8, 2026
5e77cd2
drivers/usbhost: Stop retrying an xHCI port that will not enumerate.
Fishwaldo Aug 8, 2026
407881e
drivers/usbhost: Key an xHCI device by its port, not by the root port.
Fishwaldo Aug 8, 2026
047a5a0
usbhost: Report what a hub is on the port it occupies.
Fishwaldo Aug 8, 2026
baef606
drivers/usbhost: Describe a device behind a hub to the xHCI controller.
Fishwaldo Aug 8, 2026
0f90af5
drivers/usbhost: Support USB hubs on xHCI.
Fishwaldo Aug 8, 2026
25e387f
drivers/usbhost: Tell the host stack which controller a port belongs to.
Fishwaldo Aug 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions drivers/usbhost/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -832,6 +832,22 @@ config USBHOST_XHCI_MAX_DEVS
---help---
How many USB devices will be supported by xHCI driver.

config USBHOST_XHCI_ENUM_RETRIES
int "xHCI enumeration attempts per port"
default 3
range 1 255
---help---
How many times to attempt enumeration of a newly connected device
before leaving the port alone until the device is unplugged.

A device whose descriptors cannot be read, or that no class driver
claims, fails enumeration every time. Each failure marks the port
disconnected so the attempt repeats, so without a limit such a
device is retried for as long as it stays plugged in, logging and
taking a device slot on every pass.

The count is per root hub port and is cleared by a new connection.

endif # USBHOST_XHCI

menuconfig USBHOST_XHCI_PCI
Expand Down
11 changes: 11 additions & 0 deletions drivers/usbhost/usbhost_hub.c
Original file line number Diff line number Diff line change
Expand Up @@ -578,6 +578,17 @@ static inline int usbhost_hubdesc(FAR struct usbhost_class_s *hubclass)
priv->pwrondelay = (2 * hubdesc->pwrondelay);
priv->ctrlcurrent = hubdesc->ctrlcurrent;

/* Publish what describes this hub as a hub, rather than as a device, on
* the port it occupies. A host controller that has to be told about the
* hubs in a topology reads it from there when it sets up a device behind
* this one. This runs before any downstream port is activated, so it is
* in place before there is anything behind it to set up.
*/

hport->nports = hubdesc->nports;
hport->ttt = (hubchar & USBHUB_CHAR_TTTT_MASK) >>
USBHUB_CHAR_TTTT_SHIFT;

uinfo("Hub Descriptor:\n");
uinfo(" bDescLength: %d\n", hubdesc->len);
uinfo(" bDescriptorType: 0x%02x\n", hubdesc->type);
Expand Down
Loading
Loading