Date: Sun, 21 Jul 2013 21:32:46 +0200 From: Hans Petter Selasky <hps@bitfrost.no> To: "freebsd-usb@freebsd.org" <freebsd-usb@freebsd.org>, bsd.gaijin@gmail.com Subject: Re: usb/180726: XHCI umass support breaks between r248085 and r252560 on 9-STABLE Message-ID: <51EC375E.2030404@bitfrost.no> In-Reply-To: <201307211906.r6LJ6BU7024335@oldred.freebsd.org> References: <201307211906.r6LJ6BU7024335@oldred.freebsd.org>
index | next in thread | previous in thread | raw e-mail
[-- Attachment #1 --]
On 07/21/13 21:06, Alexandre Kovalenko wrote:
>
>> Number: 180726
>> Category: usb
>> Synopsis: XHCI umass support breaks between r248085 and r252560 on 9-STABLE
>> Confidential: no
>> Severity: non-critical
>> Priority: low
>> Responsible: freebsd-usb
>> State: open
>> Quarter:
>> Keywords:
>> Date-Required:
>> Class: sw-bug
>> Submitter-Id: current-users
>> Arrival-Date: Sun Jul 21 19:10:00 UTC 2013
>> Closed-Date:
>> Last-Modified:
>> Originator: Alexandre Kovalenko
>> Release: 9-STABLE
>> Organization:
>> Environment:
> FreeBSD twinhead 9.2-BETA1 FreeBSD 9.2-BETA1 #11 r248085:253503: Sun Jul 21 14:29:42 EDT 2013 root@twinhead:/usr/obj/usr/src/sys/TWINHEAD amd64
>> Description:
>
> Three different external hard drives (Seagate, Western Digital and noname USB 3.0 enclosure) refused to be recognized as the umass devices. Reverting /usr/src/sys/dev/bsd/controller to r248085, building and loading just xhci module makes drives appear again. Below are snippets from the log in both cases:
>
Can you try:
1) Attached patch.
2) Non ASMedia USB 3.0 controller
--HPS
[-- Attachment #2 --]
diff --git a/sys/dev/usb/controller/xhci.c b/sys/dev/usb/controller/xhci.c
index e6d5865..7070ef7 100644
--- a/sys/dev/usb/controller/xhci.c
+++ b/sys/dev/usb/controller/xhci.c
@@ -1654,7 +1654,7 @@ restart:
/* fill out buffer pointers */
if (average == 0) {
- npkt = 0;
+ npkt = 1;
memset(&buf_res, 0, sizeof(buf_res));
} else {
usbd_get_page(temp->pc, temp->offset +
@@ -1691,9 +1691,7 @@ restart:
switch (temp->trb_type) {
case XHCI_TRB_TYPE_ISOCH:
- /* BEI: Interrupts are inhibited until EOT */
dword = XHCI_TRB_3_CHAIN_BIT | XHCI_TRB_3_CYCLE_BIT |
- XHCI_TRB_3_BEI_BIT |
XHCI_TRB_3_TBC_SET(temp->tbc) |
XHCI_TRB_3_TLBPC_SET(temp->tlbpc);
if (td != td_first) {
@@ -1728,10 +1726,8 @@ restart:
dword |= XHCI_TRB_3_DIR_IN;
break;
default: /* XHCI_TRB_TYPE_NORMAL */
- /* BEI: Interrupts are inhibited until EOT */
dword = XHCI_TRB_3_CHAIN_BIT | XHCI_TRB_3_CYCLE_BIT |
XHCI_TRB_3_TYPE_SET(XHCI_TRB_TYPE_NORMAL) |
- XHCI_TRB_3_BEI_BIT |
XHCI_TRB_3_TBC_SET(temp->tbc) |
XHCI_TRB_3_TLBPC_SET(temp->tlbpc);
if (temp->direction == UE_DIR_IN)
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?51EC375E.2030404>
