* [PATCH 0/1] Fixes to the USB 3.0 detection as 2.0 on AMD platform
@ 2014-07-11 6:22 Gavin Guo
2014-07-11 6:22 ` [PATCH 1/1] usb: Check if port status is equal to RxDetect Gavin Guo
2014-07-11 23:32 ` [PATCH 0/1] Fixes to the USB 3.0 detection as 2.0 on AMD platform Gavin Guo
0 siblings, 2 replies; 7+ messages in thread
From: Gavin Guo @ 2014-07-11 6:22 UTC (permalink / raw)
To: sarah.a.sharp, mathias.nyman, linux-usb, linux-kernel
Cc: yk, anthony.wong, gerald.yang
Hi Sarah and Mathias,
As the discussion in http://comments.gmane.org/gmane.linux.usb.general/107011,
I found that [AMD] FCH USB XHCI Controller [1022:7814] the USB 3.0 disk
can't work in SuperSpeed after several times of hotplug. After doing some
experiments and bisection, I found the bug is caused by
41e7e056cdc662f704fa9262e5c6e213b4ab45dd (USB: Allow USB 3.0 ports to be
disabled.). And the bug can be fixed by not executing the
hub_usb3_port_disable() function. I also found that the port status is
already in RxDetect before setting the port to Disabled in
hub_usb3_port_disable() function. So, there are 2 ways to fix the bug:
1) Check if the Vendor/Device id is [1022:7814] at the beginning of
hub_usb3_port_disable() function. If yes, return without executing the
remaining code.
2) Check if the port status is already in RxDetect, if yes, return without
executing the remaining code.
The second method seems more reasonable, so the patch is the implementation
of the second one. But it will affect more platforms and I don't know if
there'll be any negative result. Otherwise, if the first one is correct,
I can reimplement a new one.
I'm appreciated if you can give me some advice, or if there is any thing I missed.
Thanks,
Gavin
Gavin Guo (1):
usb: Check if port status is equal to RxDetect
drivers/usb/core/hub.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
--
2.0.0
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/1] usb: Check if port status is equal to RxDetect
2014-07-11 6:22 [PATCH 0/1] Fixes to the USB 3.0 detection as 2.0 on AMD platform Gavin Guo
@ 2014-07-11 6:22 ` Gavin Guo
2014-07-11 23:33 ` Gavin Guo
2014-07-15 14:24 ` Alan Stern
2014-07-11 23:32 ` [PATCH 0/1] Fixes to the USB 3.0 detection as 2.0 on AMD platform Gavin Guo
1 sibling, 2 replies; 7+ messages in thread
From: Gavin Guo @ 2014-07-11 6:22 UTC (permalink / raw)
To: sarah.a.sharp, mathias.nyman, linux-usb, linux-kernel
Cc: yk, anthony.wong, gerald.yang
When using USB 3.0 pen drive with the [AMD] FCH USB XHCI Controller
[1022:7814], the second hotplugging will experience the USB 3.0 pen
drive is recognized as high-speed device. After bisecting the kernel,
I found the commit number 41e7e056cdc662f704fa9262e5c6e213b4ab45dd
(USB: Allow USB 3.0 ports to be disabled.) causes the bug. After doing
some experiments, the bug can be fixed by avoiding executing the function
hub_usb3_port_disable(). Because the port status with [AMD] FCH USB
XHCI Controlleris [1022:7814] is already in RxDetect
(I tried printing out the port status before setting to Disabled state),
it's reasonable to check the port status before really executing
hub_usb3_port_disable().
Fixes: 41e7e056cdc6 (USB: Allow USB 3.0 ports to be disabled.)
Signed-off-by: Gavin Guo <gavin.guo@canonical.com>
---
drivers/usb/core/hub.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index 21b99b4..e02ab62 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -889,6 +889,25 @@ static int hub_usb3_port_disable(struct usb_hub *hub, int port1)
if (!hub_is_superspeed(hub->hdev))
return -EINVAL;
+ ret = hub_port_status(hub, port1, &portstatus, &portchange);
+ if (ret < 0)
+ return ret;
+
+ /*
+ * USB controller Advanced Micro Devices,
+ * Inc. [AMD] FCH USB XHCI Controller [1022:7814] will have spurious result
+ * making the following usb 3.0 device hotplugging route to the 2.0 root hub
+ * and recognized as high-speed device if we set the usb 3.0 port link state
+ * to Disabled. Since it's already in USB_SS_PORT_LS_RX_DETECT state, we
+ * check the state here to avoid the bug.
+ */
+ if ((portstatus & USB_PORT_STAT_LINK_STATE) ==
+ USB_SS_PORT_LS_RX_DETECT) {
+ dev_dbg(&hub->ports[port1 - 1]->dev,
+ "The link state is already in USB_SS_PORT_LS_RX_DETECT\n");
+ return ret;
+ }
+
ret = hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_SS_DISABLED);
if (ret)
return ret;
--
2.0.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 0/1] Fixes to the USB 3.0 detection as 2.0 on AMD platform
2014-07-11 6:22 [PATCH 0/1] Fixes to the USB 3.0 detection as 2.0 on AMD platform Gavin Guo
2014-07-11 6:22 ` [PATCH 1/1] usb: Check if port status is equal to RxDetect Gavin Guo
@ 2014-07-11 23:32 ` Gavin Guo
2014-07-12 0:04 ` Greg KH
1 sibling, 1 reply; 7+ messages in thread
From: Gavin Guo @ 2014-07-11 23:32 UTC (permalink / raw)
To: Sarah Sharp, Nyman, Mathias, linux-usb, linux-kernel, gregkh
Cc: YK, Anthony Wong, Gerald Yang
Hi all,
On Fri, Jul 11, 2014 at 2:22 PM, Gavin Guo <gavin.guo@canonical.com> wrote:
> Hi Sarah and Mathias,
>
> As the discussion in http://comments.gmane.org/gmane.linux.usb.general/107011,
> I found that [AMD] FCH USB XHCI Controller [1022:7814] the USB 3.0 disk
> can't work in SuperSpeed after several times of hotplug. After doing some
> experiments and bisection, I found the bug is caused by
> 41e7e056cdc662f704fa9262e5c6e213b4ab45dd (USB: Allow USB 3.0 ports to be
> disabled.). And the bug can be fixed by not executing the
> hub_usb3_port_disable() function. I also found that the port status is
> already in RxDetect before setting the port to Disabled in
> hub_usb3_port_disable() function. So, there are 2 ways to fix the bug:
>
> 1) Check if the Vendor/Device id is [1022:7814] at the beginning of
> hub_usb3_port_disable() function. If yes, return without executing the
> remaining code.
>
> 2) Check if the port status is already in RxDetect, if yes, return without
> executing the remaining code.
>
> The second method seems more reasonable, so the patch is the implementation
> of the second one. But it will affect more platforms and I don't know if
> there'll be any negative result. Otherwise, if the first one is correct,
> I can reimplement a new one.
>
> I'm appreciated if you can give me some advice, or if there is any thing I missed.
>
> Thanks,
> Gavin
>
> Gavin Guo (1):
> usb: Check if port status is equal to RxDetect
>
> drivers/usb/core/hub.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> --
> 2.0.0
>
Add Greg k-h to the list.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/1] usb: Check if port status is equal to RxDetect
2014-07-11 6:22 ` [PATCH 1/1] usb: Check if port status is equal to RxDetect Gavin Guo
@ 2014-07-11 23:33 ` Gavin Guo
2014-07-15 14:24 ` Alan Stern
1 sibling, 0 replies; 7+ messages in thread
From: Gavin Guo @ 2014-07-11 23:33 UTC (permalink / raw)
To: Sarah Sharp, Nyman, Mathias, linux-usb, linux-kernel, gregkh
Cc: YK, Anthony Wong, Gerald Yang
Hi all,
On Fri, Jul 11, 2014 at 2:22 PM, Gavin Guo <gavin.guo@canonical.com> wrote:
> When using USB 3.0 pen drive with the [AMD] FCH USB XHCI Controller
> [1022:7814], the second hotplugging will experience the USB 3.0 pen
> drive is recognized as high-speed device. After bisecting the kernel,
> I found the commit number 41e7e056cdc662f704fa9262e5c6e213b4ab45dd
> (USB: Allow USB 3.0 ports to be disabled.) causes the bug. After doing
> some experiments, the bug can be fixed by avoiding executing the function
> hub_usb3_port_disable(). Because the port status with [AMD] FCH USB
> XHCI Controlleris [1022:7814] is already in RxDetect
> (I tried printing out the port status before setting to Disabled state),
> it's reasonable to check the port status before really executing
> hub_usb3_port_disable().
>
> Fixes: 41e7e056cdc6 (USB: Allow USB 3.0 ports to be disabled.)
> Signed-off-by: Gavin Guo <gavin.guo@canonical.com>
> ---
> drivers/usb/core/hub.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
> index 21b99b4..e02ab62 100644
> --- a/drivers/usb/core/hub.c
> +++ b/drivers/usb/core/hub.c
> @@ -889,6 +889,25 @@ static int hub_usb3_port_disable(struct usb_hub *hub, int port1)
> if (!hub_is_superspeed(hub->hdev))
> return -EINVAL;
>
> + ret = hub_port_status(hub, port1, &portstatus, &portchange);
> + if (ret < 0)
> + return ret;
> +
> + /*
> + * USB controller Advanced Micro Devices,
> + * Inc. [AMD] FCH USB XHCI Controller [1022:7814] will have spurious result
> + * making the following usb 3.0 device hotplugging route to the 2.0 root hub
> + * and recognized as high-speed device if we set the usb 3.0 port link state
> + * to Disabled. Since it's already in USB_SS_PORT_LS_RX_DETECT state, we
> + * check the state here to avoid the bug.
> + */
> + if ((portstatus & USB_PORT_STAT_LINK_STATE) ==
> + USB_SS_PORT_LS_RX_DETECT) {
> + dev_dbg(&hub->ports[port1 - 1]->dev,
> + "The link state is already in USB_SS_PORT_LS_RX_DETECT\n");
> + return ret;
> + }
> +
> ret = hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_SS_DISABLED);
> if (ret)
> return ret;
> --
> 2.0.0
>
Add Greg k-h to the list.
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/1] Fixes to the USB 3.0 detection as 2.0 on AMD platform
2014-07-11 23:32 ` [PATCH 0/1] Fixes to the USB 3.0 detection as 2.0 on AMD platform Gavin Guo
@ 2014-07-12 0:04 ` Greg KH
2014-07-12 0:28 ` Gavin Guo
0 siblings, 1 reply; 7+ messages in thread
From: Greg KH @ 2014-07-12 0:04 UTC (permalink / raw)
To: Gavin Guo
Cc: Sarah Sharp, Nyman, Mathias, linux-usb, linux-kernel, YK,
Anthony Wong, Gerald Yang
On Sat, Jul 12, 2014 at 07:32:34AM +0800, Gavin Guo wrote:
> Hi all,
>
> On Fri, Jul 11, 2014 at 2:22 PM, Gavin Guo <gavin.guo@canonical.com> wrote:
> > Hi Sarah and Mathias,
> >
> > As the discussion in http://comments.gmane.org/gmane.linux.usb.general/107011,
> > I found that [AMD] FCH USB XHCI Controller [1022:7814] the USB 3.0 disk
> > can't work in SuperSpeed after several times of hotplug. After doing some
> > experiments and bisection, I found the bug is caused by
> > 41e7e056cdc662f704fa9262e5c6e213b4ab45dd (USB: Allow USB 3.0 ports to be
> > disabled.). And the bug can be fixed by not executing the
> > hub_usb3_port_disable() function. I also found that the port status is
> > already in RxDetect before setting the port to Disabled in
> > hub_usb3_port_disable() function. So, there are 2 ways to fix the bug:
> >
> > 1) Check if the Vendor/Device id is [1022:7814] at the beginning of
> > hub_usb3_port_disable() function. If yes, return without executing the
> > remaining code.
> >
> > 2) Check if the port status is already in RxDetect, if yes, return without
> > executing the remaining code.
> >
> > The second method seems more reasonable, so the patch is the implementation
> > of the second one. But it will affect more platforms and I don't know if
> > there'll be any negative result. Otherwise, if the first one is correct,
> > I can reimplement a new one.
> >
> > I'm appreciated if you can give me some advice, or if there is any thing I missed.
> >
> > Thanks,
> > Gavin
> >
> > Gavin Guo (1):
> > usb: Check if port status is equal to RxDetect
> >
> > drivers/usb/core/hub.c | 19 +++++++++++++++++++
> > 1 file changed, 19 insertions(+)
> >
> > --
> > 2.0.0
> >
>
> Add Greg k-h to the list.
Why? Mathias can handle this just fine, right?
And I read all linux-usb@vger email anyway...
greg k-h
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 0/1] Fixes to the USB 3.0 detection as 2.0 on AMD platform
2014-07-12 0:04 ` Greg KH
@ 2014-07-12 0:28 ` Gavin Guo
0 siblings, 0 replies; 7+ messages in thread
From: Gavin Guo @ 2014-07-12 0:28 UTC (permalink / raw)
To: Greg KH
Cc: Sarah Sharp, Nyman, Mathias, linux-usb, linux-kernel, YK,
Anthony Wong, Gerald Yang
Hi Greg,
On Sat, Jul 12, 2014 at 8:04 AM, Greg KH <gregkh@linuxfoundation.org> wrote:
> On Sat, Jul 12, 2014 at 07:32:34AM +0800, Gavin Guo wrote:
>> Hi all,
>>
>> On Fri, Jul 11, 2014 at 2:22 PM, Gavin Guo <gavin.guo@canonical.com> wrote:
>> > Hi Sarah and Mathias,
>> >
>> > As the discussion in http://comments.gmane.org/gmane.linux.usb.general/107011,
>> > I found that [AMD] FCH USB XHCI Controller [1022:7814] the USB 3.0 disk
>> > can't work in SuperSpeed after several times of hotplug. After doing some
>> > experiments and bisection, I found the bug is caused by
>> > 41e7e056cdc662f704fa9262e5c6e213b4ab45dd (USB: Allow USB 3.0 ports to be
>> > disabled.). And the bug can be fixed by not executing the
>> > hub_usb3_port_disable() function. I also found that the port status is
>> > already in RxDetect before setting the port to Disabled in
>> > hub_usb3_port_disable() function. So, there are 2 ways to fix the bug:
>> >
>> > 1) Check if the Vendor/Device id is [1022:7814] at the beginning of
>> > hub_usb3_port_disable() function. If yes, return without executing the
>> > remaining code.
>> >
>> > 2) Check if the port status is already in RxDetect, if yes, return without
>> > executing the remaining code.
>> >
>> > The second method seems more reasonable, so the patch is the implementation
>> > of the second one. But it will affect more platforms and I don't know if
>> > there'll be any negative result. Otherwise, if the first one is correct,
>> > I can reimplement a new one.
>> >
>> > I'm appreciated if you can give me some advice, or if there is any thing I missed.
>> >
>> > Thanks,
>> > Gavin
>> >
>> > Gavin Guo (1):
>> > usb: Check if port status is equal to RxDetect
>> >
>> > drivers/usb/core/hub.c | 19 +++++++++++++++++++
>> > 1 file changed, 19 insertions(+)
>> >
>> > --
>> > 2.0.0
>> >
>>
>> Add Greg k-h to the list.
>
> Why? Mathias can handle this just fine, right?
>
> And I read all linux-usb@vger email anyway...
>
> greg k-h
I'm sorry if there is any misunderstanding. Because the code is under
drivers/usb/core/hub.c, I found that in MAINTAINERS you are the
maintainer of drivers/usb/*. so I think it's better to let you know
the change.
Thanks,
Gavin Guo
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/1] usb: Check if port status is equal to RxDetect
2014-07-11 6:22 ` [PATCH 1/1] usb: Check if port status is equal to RxDetect Gavin Guo
2014-07-11 23:33 ` Gavin Guo
@ 2014-07-15 14:24 ` Alan Stern
1 sibling, 0 replies; 7+ messages in thread
From: Alan Stern @ 2014-07-15 14:24 UTC (permalink / raw)
To: Gavin Guo
Cc: sarah.a.sharp, mathias.nyman, linux-usb, linux-kernel, yk,
anthony.wong, gerald.yang
On Fri, 11 Jul 2014, Gavin Guo wrote:
> When using USB 3.0 pen drive with the [AMD] FCH USB XHCI Controller
> [1022:7814], the second hotplugging will experience the USB 3.0 pen
> drive is recognized as high-speed device. After bisecting the kernel,
> I found the commit number 41e7e056cdc662f704fa9262e5c6e213b4ab45dd
> (USB: Allow USB 3.0 ports to be disabled.) causes the bug. After doing
> some experiments, the bug can be fixed by avoiding executing the function
> hub_usb3_port_disable(). Because the port status with [AMD] FCH USB
> XHCI Controlleris [1022:7814] is already in RxDetect
> (I tried printing out the port status before setting to Disabled state),
> it's reasonable to check the port status before really executing
> hub_usb3_port_disable().
This seems like a race. Even if the port isn't in RxDetect when you
check it, it could switch to RxDetect before the kernel sets it to
Disabled.
But maybe this is the best we can do.
> Fixes: 41e7e056cdc6 (USB: Allow USB 3.0 ports to be disabled.)
> Signed-off-by: Gavin Guo <gavin.guo@canonical.com>
> ---
> drivers/usb/core/hub.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
> diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
> index 21b99b4..e02ab62 100644
> --- a/drivers/usb/core/hub.c
> +++ b/drivers/usb/core/hub.c
> @@ -889,6 +889,25 @@ static int hub_usb3_port_disable(struct usb_hub *hub, int port1)
> if (!hub_is_superspeed(hub->hdev))
> return -EINVAL;
>
> + ret = hub_port_status(hub, port1, &portstatus, &portchange);
> + if (ret < 0)
> + return ret;
> +
> + /*
> + * USB controller Advanced Micro Devices,
> + * Inc. [AMD] FCH USB XHCI Controller [1022:7814] will have spurious result
> + * making the following usb 3.0 device hotplugging route to the 2.0 root hub
> + * and recognized as high-speed device if we set the usb 3.0 port link state
> + * to Disabled. Since it's already in USB_SS_PORT_LS_RX_DETECT state, we
> + * check the state here to avoid the bug.
> + */
Comments should not extend beyond column 80. And there should be only
one space, not two, after the '*' in the 6th and 7th lines.
> + if ((portstatus & USB_PORT_STAT_LINK_STATE) ==
> + USB_SS_PORT_LS_RX_DETECT) {
> + dev_dbg(&hub->ports[port1 - 1]->dev,
> + "The link state is already in USB_SS_PORT_LS_RX_DETECT\n");
This message does not explain what has happened. It should say
something like "Not disabling port; link state is RxDetect".
> + return ret;
> + }
> +
> ret = hub_set_port_link_state(hub, port1, USB_SS_PORT_LS_SS_DISABLED);
> if (ret)
> return ret;
Alan Stern
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2014-07-15 14:24 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-07-11 6:22 [PATCH 0/1] Fixes to the USB 3.0 detection as 2.0 on AMD platform Gavin Guo
2014-07-11 6:22 ` [PATCH 1/1] usb: Check if port status is equal to RxDetect Gavin Guo
2014-07-11 23:33 ` Gavin Guo
2014-07-15 14:24 ` Alan Stern
2014-07-11 23:32 ` [PATCH 0/1] Fixes to the USB 3.0 detection as 2.0 on AMD platform Gavin Guo
2014-07-12 0:04 ` Greg KH
2014-07-12 0:28 ` Gavin Guo
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.