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

Idwer Vollering vidwer at gmail.com
Tue Dec 24 02:09:17 CET 2013


2013/12/24 Kevin O'Connor <kevin at koconnor.net>:
> On Sun, Dec 22, 2013 at 09:54:02PM -0500, Kevin O'Connor wrote:
>> On Fri, Dec 13, 2013 at 02:25:39PM -0500, Kevin O'Connor wrote:
>> > 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.
>>
>> FYI, with the (incredibly ugly) patch from the previous mail and with
>> a USB3 flash drive I seem to get slightly further.
>
> FYI, it seems my USB3 controller really wants to see 64bit writes to
> pci registers.  With the change below (on top of the other changes) I
> can now boot my e350m1 from a USB3 flash drive.
>
> I'm still seeing failures on my keyboard/mouse though:
>
> 01.146: XHCI port #2: 0x00200a03, powered, enabled, pls 0, speed 2 [Low]
> 01.163: xhci_control: control xfer failed (cc 6)
>
> and on my USB2 flash drive:
>
> 01.132: XHCI port #1: 0x00200e03, powered, enabled, pls 0, speed 3 [High]
> 01.163: xhci_update_pipe: reconf ctl endpoint pkt size: 8 -> 64
> 01.168: xhci_alloc_pipe: configure endpoint: failed (cc 17)
> 01.169: xhci_alloc_pipe: configure endpoint: failed (cc 17)
> 01.169: Unable to configure USB MSC device.
>
> -Kevin
>
>
> diff --git a/src/hw/usb-xhci.c b/src/hw/usb-xhci.c
> index dc98e5d..d0df6ee 100644
> --- a/src/hw/usb-xhci.c
> +++ b/src/hw/usb-xhci.c
> @@ -379,6 +379,7 @@ static void xhci_process_events(struct usb_xhci_s *xhci)
>          u32 addr = (u32)(&ir->erdp_low);
>          u32 erdp = (u32)(evts->ring + nidx);
>          pci_writel(addr, erdp);
> +        pci_writel((u32)(&ir->erdp_high), 0);
>      }
>  }
>

This is captured on my f2a85-m, with CONFIG_DEBUG_LEVEL=7:

SeaBIOS (version rel-1.7.4-0-g96917a8-dirty-20131224_014301-debian)
init usb
XHCI init on dev 00:10.0: regs @ 0xf01c8000, 4 ports, 32 slots
XHCI    extcap 0x1 @ f01c8500
XHCI    protocol USB  3.00, 2 ports (offset 1)
XHCI    protocol USB  2.00, 2 ports (offset 3)
configure_xhci: resetting
xhci_hub_detect port #1: 0x000002a0, powered, pls 5, speed 0 [ - ]
xhci_hub_detect port #2: 0x000002a0, powered, pls 5, speed 0 [ - ]
xhci_hub_detect port #3: 0x000002a0, powered, pls 5, speed 0 [ - ]
xhci_hub_detect port #4: 0x000002a0, powered, pls 5, speed 0 [ - ]
XHCI no devices found
XHCI init on dev 00:10.1: regs @ 0xf01ca000, 4 ports, 32 slots
XHCI    extcap 0x1 @ f01ca500
XHCI    protocol USB  3.00, 2 ports (offset 1)
XHCI    protocol USB  2.00, 2 ports (offset 3)
configure_xhci: resetting
xhci_hub_detect port #1: 0x000002a0, powered, pls 5, speed 0 [ - ]
xhci_hub_detect port #2: 0x000002a0, powered, pls 5, speed 0 [ - ]
xhci_hub_detect port #3: 0x000202e1, powered, pls 7, speed 0 [ - ]
xhci_hub_reset port #3: 0x000202e1, powered, pls 7, speed 0 [ - ]
XHCI port #3: 0x00200a03, powered, enabled, pls 0, speed 2 [Low]
set_address 0x000ee020
xhci_alloc_pipe: usbdev 0xbf102590, ring 0xbf11eb00, slotid 0, epid 1
xhci_cmd_enable_slot:
xhci_trb_queue: ring 0xbf11ed00 [nidx 1, len 0]
xhci_process_events: status change port #3
xhci_process_events: status change port #4
xhci_process_events: status change port #3
xhci_process_events: ring 0xbf11ed00 [trb 0xbf11ed00, evt 0xbf11ee00,
type 33, eidx 1, cc 1]
xhci_control: enable slot: got slotid 1
xhci_control: root port 3, route 0x0
xhci_cmd_address_device: slotid 1
xhci_trb_queue: ring 0xbf11ed00 [nidx 2, len 0]
xhci_process_events: ring 0xbf11ed00 [trb 0xbf11ed10, evt 0xbf11ee00,
type 33, eidx 2, cc 1]
xhci_update_pipe: usbdev 0xbf102590, ring 0xbf11eb00, slotid 1, epid 1
config_usb: 0xbf11ec20
xhci_trb_queue: ring 0xbf11eb00 [nidx 1, len 8]
xhci_trb_queue: ring 0xbf11eb00 [nidx 2, len 8]
xhci_trb_queue: ring 0xbf11eb00 [nidx 3, len 0]
xhci_xfer_kick: ring 0xbf11eb00, slotid 1, epid 1
WARNING - Timeout at xhci_event_wait:405!
xhci_control: control xfer failed (cc -1)
xhci_cmd_disable_slot: slotid 1
xhci_trb_queue: ring 0xbf11ed00 [nidx 3, len 0]
xhci_process_events: ring 0xbf11ed00 [trb 0xbf11ed20, evt 0xbf11ee00,
type 33, eidx 3, cc 1]
xhci_hub_detect port #4: 0x000202e1, powered, pls 7, speed 0 [ - ]
xhci_hub_reset port #4: 0x000202e1, powered, pls 7, speed 0 [ - ]
XHCI port #4: 0x00200e03, powered, enabled, pls 0, speed 3 [High]
set_address 0x000ee020
xhci_alloc_pipe: usbdev 0xbf102590, ring 0xbf11e900, slotid 0, epid 1
xhci_cmd_enable_slot:
xhci_trb_queue: ring 0xbf11ed00 [nidx 4, len 0]
xhci_process_events: status change port #4
xhci_process_events: ring 0xbf11ed00 [trb 0xbf11ed30, evt 0xbf11ee00,
type 33, eidx 4, cc 1]
xhci_control: enable slot: got slotid 1
xhci_control: root port 4, route 0x0
xhci_cmd_address_device: slotid 1
xhci_trb_queue: ring 0xbf11ed00 [nidx 5, len 0]
xhci_process_events: ring 0xbf11ed00 [trb 0xbf11ed40, evt 0xbf11ee00,
type 33, eidx 5, cc 1]
xhci_update_pipe: usbdev 0xbf102590, ring 0xbf11e900, slotid 1, epid 1
config_usb: 0xbf11ea20
xhci_trb_queue: ring 0xbf11e900 [nidx 1, len 8]
xhci_trb_queue: ring 0xbf11e900 [nidx 2, len 8]
xhci_trb_queue: ring 0xbf11e900 [nidx 3, len 0]
xhci_xfer_kick: ring 0xbf11e900, slotid 1, epid 1
xhci_process_events: ring 0xbf11e900 [trb 0xbf11e920, evt 0xbf11ea00,
type 32, eidx 3, cc 6]
xhci_control: control xfer failed (cc 6)
xhci_cmd_disable_slot: slotid 1
xhci_trb_queue: ring 0xbf11ed00 [nidx 6, len 0]
xhci_process_events: ring 0xbf11ed00 [trb 0xbf11ed50, evt 0xbf11ee00,
type 33, eidx 6, cc 1]
XHCI no devices found

An USB keyboard is attached to port #3 and some Kingston USB flash
drive to port #4 - neither are responsive or show up in the boot menu.

Idwer



More information about the SeaBIOS mailing list