diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2008-01-24 12:47:11 -0800 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2008-01-24 12:47:11 -0800 |
| commit | 493642fb9f8089241b8392091fbd538932421bfe (patch) | |
| tree | a17070ba51ca3414c910d56b99dd36c726c27d0d /usb | |
| parent | 46700551b0622b695f4c582d390ec6ba2ecdd9a1 (diff) | |
| download | patches-493642fb9f8089241b8392091fbd538932421bfe.tar.gz | |
2 more usb patches
Diffstat (limited to 'usb')
| -rw-r--r-- | usb/usb-ehci-remove-false-clear-reset-path.patch | 45 | ||||
| -rw-r--r-- | usb/usb-ehci-should-use-u16-for-isochronous-intervals.patch | 40 |
2 files changed, 85 insertions, 0 deletions
diff --git a/usb/usb-ehci-remove-false-clear-reset-path.patch b/usb/usb-ehci-remove-false-clear-reset-path.patch new file mode 100644 index 00000000000000..2b71167da6abe1 --- /dev/null +++ b/usb/usb-ehci-remove-false-clear-reset-path.patch @@ -0,0 +1,45 @@ +From david-b@pacbell.net Thu Jan 24 12:45:59 2008 +From: David Brownell <david-b@pacbell.net> +Date: Thu, 24 Jan 2008 12:39:43 -0800 +Subject: usb: ehci, remove false clear-reset path +To: Greg KH <greg@kroah.com>, linux-usb@vger.kernel.org +Message-ID: <200801241239.43337.david-b@pacbell.net> +Content-Disposition: inline + + +Some of the "EHCI ports reset forever" problems may be explained by +code paths which wrongly flagged resets as complete. This removes +two such paths; the ehci_hub_status_data() path should be the only one +to have an effect, since it was already properly flagged on the other +path. (Issue noted by Minhyoung Kim <a9a9@lge.com>.) + +Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/host/ehci-hub.c | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) + +--- a/drivers/usb/host/ehci-hub.c ++++ b/drivers/usb/host/ehci-hub.c +@@ -411,10 +411,8 @@ static int check_reset_complete ( + u32 __iomem *status_reg, + int port_status + ) { +- if (!(port_status & PORT_CONNECT)) { +- ehci->reset_done [index] = 0; ++ if (!(port_status & PORT_CONNECT)) + return port_status; +- } + + /* if reset finished and it's still not enabled -- handoff */ + if (!(port_status & PORT_PE)) { +@@ -493,8 +491,6 @@ ehci_hub_status_data (struct usb_hcd *hc + * controller by the user. + */ + +- if (!(temp & PORT_CONNECT)) +- ehci->reset_done [i] = 0; + if ((temp & mask) != 0 + || ((temp & PORT_RESUME) != 0 + && time_after_eq(jiffies, diff --git a/usb/usb-ehci-should-use-u16-for-isochronous-intervals.patch b/usb/usb-ehci-should-use-u16-for-isochronous-intervals.patch new file mode 100644 index 00000000000000..fb4484ab50e20c --- /dev/null +++ b/usb/usb-ehci-should-use-u16-for-isochronous-intervals.patch @@ -0,0 +1,40 @@ +From david-b@pacbell.net Thu Jan 24 12:46:11 2008 +From: David Brownell <david-b@pacbell.net> +Date: Thu, 24 Jan 2008 12:30:34 -0800 +Subject: usb: ehci should use u16 for isochronous intervals +To: Greg KH <greg@kroah.com>, linux-usb@vger.kernel.org +Message-ID: <200801241230.35469.david-b@pacbell.net> +Content-Disposition: inline + + +While most isochronous endpoints have short polling intervals, the +EHCI driver won't necessarily handle larger ones correctly. + +This patch switches to use a "u16" to represent those periods, not +a u8, since it can always work: the largest expressible period +is 2^15 units ... not the previous too-short limit of 128 frames +(full or low speeds) or microframes (high speed, 32 frames). + +This bug is essentially theoretical, since the few ISO endpoints +I've seen which don't use one transfer per frame are high speed +ones using more than that (including high bandwidth, 24 KB/msec). + +Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> +Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> + +--- + drivers/usb/host/ehci.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/usb/host/ehci.h ++++ b/drivers/usb/host/ehci.h +@@ -550,8 +550,8 @@ struct ehci_iso_stream { + * trusting urb->interval == f(epdesc->bInterval) and + * including the extra info for hw_bufp[0..2] + */ +- u8 interval; + u8 usecs, c_usecs; ++ u16 interval; + u16 tt_usecs; + u16 maxp; + u16 raw_mask; |
