hi Alan:
2014-04-04 8:48 GMT+08:00 Alan Stern <[email protected]>:
> On Thu, 3 Apr 2014, vichy wrote:
>
>> I add more description.
>> in Below #1, since connect status is zero, handshake will fail with
>> return -ETIMEDOUT.
>> Then go to #2 error label.
>> and finally hub_port_status get -32, -EPIPE.
>>
>> 1. Platform-ehci Platform-ehci.0: port 1 reset error -110
>> the -110 is due to below handshake timeout.
>> retval = handshake(ehci, status_reg,
>> PORT_RESET, 0, 1000);
>> if (retval != 0) {
>> ehci_err (ehci, "port %d reset error %d\n",
>> wIndex + 1, retval);
>> goto error;
>> }
>
> Right -- although the handshake shouldn't time out. That's a bug in
> the hardware.
if there is no connection, it is reasonable have return value as timeout.
Why you think it is a bug in hardware?
>
>> 2. hub 4-0:1.0: hub_port_status failed (err = -32)
>> the -32 is due to below error label we set retval = -EPIPE
>> error:
>> /* "stall" on error */
>> retval = -EPIPE;
>
> But... This will happen only the first time we get the port status.
> After that, ehci->reset_done[wIndex] will be 0 and so handshake() won't
> get called.
>
> hub_port_status() calls get_port_status(), which performs the operation
> up to 3 times. The first time it will fail with -EPIPE, but what about
> the second time?
>
in hub_port_reset, there PORT_RESET_TRIES, 5 in right now definition
to reset port.
and ehci->reset_done[wIndex] will refilled the (jiffies + 50ms) when
set port reset.
if in all PORT_RESET_TRIES loops, there is no device connected.
We will get -EPIPE all the time, right?
for (i = 0; i < PORT_RESET_TRIES; i++) {
status = set_port_feature(hub->hdev, port1, (warm ?
USB_PORT_FEAT_BH_PORT_RESET :
USB_PORT_FEAT_RESET));
if (status) {
dev_err(hub->intfdev,
"cannot %sreset port %d (err = %d)\n",
warm ? "warm " : "", port1, status);
} else {
status = hub_port_wait_reset(hub, port1, udev, delay,
warm);
if (status && status != -ENOTCONN)
dev_dbg(hub->intfdev,
"port_wait_reset: err = %d\n",
status);
}
........................
........................
}
appreciate your kind explanation,
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html