[SeaBIOS] [PATCH] xhci: allocate scratch pad buffers

Kevin O'Connor kevin at koconnor.net
Fri Dec 13 20:25:39 CET 2013


On Fri, Dec 13, 2013 at 01:27:45PM -0500, Kevin O'Connor wrote:
> 01.342: xhci hcc=40050af hcs=4000440
> 
> I think this means that Context Size (CSZ) == 64 bytes and the
> controller isn't compatible with the seabios driver?

FYI, with the (incredibly ugly) patch below, I get a little further.

01.341: Start bios (version rel-1.7.3-129-gda38e55-dirty-20131213_140637-morn.localdomain)
[...]
01.345: xhci hcc=40050af hcs=4000440
01.345: XHCI init on dev 04:00.0: regs @ 0xf0000000, 4 ports, 64 slots
01.345: XHCI    extcap 0x1 @ f0001000
01.345: XHCI    protocol USB  2.00, 2 ports (offset 1)
01.345: XHCI    protocol USB  3.00, 2 ports (offset 3)
[...]
01.446: /c7fba000\ Start thread
01.446: |c7fba000| xhci_hub_detect port #2: 0x000202e1, powered, pls 7, speed 0 [ - ]
01.446: |c7fba000| xhci_hub_reset port #2: 0x000202e1, powered, pls 7, speed 0 [ - ]
01.447: |c7fba000| _free 0xc7fb6000 (detail=0xc7fb8a50)
01.447: |c7fba000| XHCI port #2: 0x00200a03, powered, enabled, pls 0, speed 2 [Low]
01.447: |c7fba000| set_address 0x000ed9b0
01.447: |c7fba000| _malloc zone=0xc7fcfedf handle=ffffffff size=316 align=100 ret=0xc7fde700 (detail=0xc7fb8aa0)
01.447: |c7fba000| _malloc zone=0xc7fcfee3 handle=ffffffff size=4180 align=40 ret=0x000ebf80 (detail=0xc7fb8a70)
01.447: |c7fba000| xhci_alloc_pipe: usbdev 0xc7fc3690, ring 0xc7fde700, slotid 0, epid 1
01.447: |c7fba000| _free 0xc7fb4000 (detail=0xc7fbffd0)
01.447: |c7fba000| xhci_cmd_enable_slot:
01.447: |c7fba000| xhci_trb_queue: ring 0xc7fde900 [nidx 1, len 0]
01.447: |c7fba000| xhci_process_events: status change port #2
01.447: |c7fba000| xhci_process_events: status change port #2
01.447: |c7fba000| xhci_process_events: ring 0xc7fde900 [trb 0xc7fde900, evt 0xc7fdea00, type 33, eidx 1, cc 1]
01.447: |c7fba000| xhci_control: enable slot: got slotid 1
01.447: |c7fba000| xhci_control: root port 2, route 0x0
01.447: |c7fba000| xhci_cmd_address_device: slotid 1
01.447: |c7fba000| xhci_trb_queue: ring 0xc7fde900 [nidx 2, len 0]
01.447: |c7fba000| xhci_process_events: ring 0xc7fde900 [trb 0xc7fde910, evt 0xc7fdea00, type 33, eidx 2, cc 1]
01.448: |c7fba000| xhci_update_pipe: usbdev 0xc7fc3690, ring 0xc7fde700, slotid 1, epid 1
01.448: |c7fba000| config_usb: 0xc7fde820
01.448: |c7fba000| xhci_trb_queue: ring 0xc7fde700 [nidx 1, len 8]
01.448: |c7fba000| xhci_trb_queue: ring 0xc7fde700 [nidx 2, len 8]
01.448: |c7fba000| xhci_trb_queue: ring 0xc7fde700 [nidx 3, len 0]
01.448: |c7fba000| xhci_xfer_kick: ring 0xc7fde700, slotid 1, epid 1
01.448: |c7fba000| xhci_process_events: ring 0xc7fde700 [trb 0xc7fde720, evt 0xc7fde800, type 32, eidx 3, cc 6]
01.448: |c7fba000| xhci_control: control xfer failed (cc 6)
01.448: |c7fba000| xhci_cmd_disable_slot: slotid 1
01.448: |c7fba000| xhci_trb_queue: ring 0xc7fde900 [nidx 3, len 0]
01.448: |c7fba000| xhci_process_events: ring 0xc7fde900 [trb 0xc7fde920, evt 0xc7fdea00, type 33, eidx 3, cc 1]
01.448: |c7fba000| _free 0xc7fc3690 (detail=0xc7fc36b0)
01.448: \c7fba000/ End thread

Looks like a device stall report.

-Kevin


diff --git a/src/hw/usb-xhci.h b/src/hw/usb-xhci.h
index 64ee82c..6bbe127 100644
--- a/src/hw/usb-xhci.h
+++ b/src/hw/usb-xhci.h
@@ -89,10 +89,15 @@ struct xhci_ir {
 // --------------------------------------------------------------
 // memory data structs
 
+#define CONFIG_XHCI_CONTEXT64 1
+
 // slot context
 struct xhci_slotctx {
     u32 ctx[4];
     u32 reserved_01[4];
+#if CONFIG_XHCI_CONTEXT64
+    u32 reserved_02[8];
+#endif
 } PACKED;
 
 // endpoint context
@@ -102,6 +107,9 @@ struct xhci_epctx {
     u32 deq_high;
     u32 length;
     u32 reserved_01[3];
+#if CONFIG_XHCI_CONTEXT64
+    u32 reserved_02[8];
+#endif
 } PACKED;
 
 // device context
@@ -121,6 +129,9 @@ struct xhci_inctx {
     u32 del;
     u32 add;
     u32 reserved_01[6];
+#if CONFIG_XHCI_CONTEXT64
+    u32 reserved_02[8];
+#endif
     struct xhci_slotctx slot;
     struct xhci_epctx   ep[31];
 } PACKED;



More information about the SeaBIOS mailing list