Re: xhci regression since "xhci: replace xhci_write_64() with writeq()" - devices not detected

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 30/01/2014 11:21 πμ, Rafał Miłecki wrote:
2014-01-29 Xenia Ragiadakou <burzalodowa@xxxxxxxxx>:
Rafał is it possible to send all the "bad" output with xhci debugging on?
Since your config file shows that dynamic debugging is on, that would be
easy to do by adding dyndbg='module xhci_hcd +p' or xhci_hcd.dyndbg=+p boot
option to your linux command line.
Also, I am interested in the lspci -v output related to your usb3
controllers.
Sure. I booted without any USB device connected and then with
04d8:00df connected to the USB 3.0 port.

I also attach full lspci output (with -nnv) just in case.


Thanks a lot! The following logs show that definitely something does not go well when you perform 64bit mmio transfers:

[snip]
[ 2.599818] xhci_hcd 0000:04:00.0: // Setting command ring address to 0x20 [ 2.649882] xhci_hcd 0000:04:00.0: // xHC command ring deq ptr low bits + flags = @ffffffff [ 2.649884] xhci_hcd 0000:04:00.0: // xHC command ring deq ptr high bits = @ffffffff
[snip]
[    2.850199] xhci_hcd 0000:04:00.0: ERST deq = 64'hfffffffffffffff0
[ 2.850202] xhci_hcd 0000:04:00.0: // Set the interrupt modulation register
[    2.850210] xhci_hcd 0000:04:00.0: // Enable interrupts, cmd = 0x4.
[ 2.850215] xhci_hcd 0000:04:00.0: // Enabling event ring interrupter ffffc900056f1020 by writing 0x2 to irq_pending
[    2.850221] xhci_hcd 0000:04:00.0:   ffffc900056f1020: ir_set[0]
[ 2.850223] xhci_hcd 0000:04:00.0: ffffc900056f1020: ir_set.pending = 0x2 [ 2.850227] xhci_hcd 0000:04:00.0: ffffc900056f1024: ir_set.control = 0xa0 [ 2.850232] xhci_hcd 0000:04:00.0: ffffc900056f1028: ir_set.erst_size = 0x1 [ 2.900268] xhci_hcd 0000:04:00.0: ffffc900056f1030: ir_set.erst_base = @ffffffffffffffff [ 2.950340] xhci_hcd 0000:04:00.0: ffffc900056f1038: ir_set.erst_dequeue = @ffffffffffffffff
[snip]

And since after reverting the writeq patch, everything works then for sure writeq does not seem to work as I expected. Probably the 64bit transaction on the bus is not atomic, but David seems to understand better what could be the reason for that problem.

Another thing is whether readq works correctly. According to xhci specs, the bits of the command ring control register when read should return always 0 (except from the bit 3). So, i wonder why readq returns 0xffffffffffffffff (xHC command ring deq ptr low bits + flags = @ffffffff, xHC command ring deq ptr high bits = @ffffffff).

Still I cannot understand though why ordered split transfers are necessary for 32bit capable usb3.0 host controllers. Maybe the ordered 32bit transfers its a requirement by some usb3.0 host controllers in order to read/write 64bit fields, regardless their addressing capability.

best regards,
ksenia
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux