Skip site navigation (1)Skip section navigation (2)
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>