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;