Skip to content

Commit

Permalink
USB: EHCI: work around bug in the Philips ISP1562 controller
Browse files Browse the repository at this point in the history
This patch (as1556) works around a bug in the Philips ISP1562 EHCI
controller.  Although the controller claims to support frame-list
lengths smaller than the default of 1024 for its periodic schedule, in
fact smaller values don't work.  A new quirk flag is added to indicate
when the bug is present, and if it is then the schedule size is left
at the default value.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Alan Stern authored and Greg Kroah-Hartman committed May 14, 2012
1 parent 65b8e5c commit 1996e6c
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 1 deletion.
2 changes: 1 addition & 1 deletion drivers/usb/host/ehci-hcd.c
Original file line number Diff line number Diff line change
Expand Up @@ -639,7 +639,7 @@ static int ehci_init(struct usb_hcd *hcd)
INIT_LIST_HEAD(&ehci->cached_itd_list);
INIT_LIST_HEAD(&ehci->cached_sitd_list);

if (HCC_PGM_FRAMELISTLEN(hcc_params)) {
if (HCC_PGM_FRAMELISTLEN(hcc_params) && !ehci->sched_size_bug) {
/* periodic schedule size can be smaller than default */
switch (EHCI_TUNE_FLS) {
case 0: ehci->periodic_size = 1024; break;
Expand Down
7 changes: 7 additions & 0 deletions drivers/usb/host/ehci-pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,13 @@ static int ehci_pci_setup(struct usb_hcd *hcd)
break;
}
break;

case PCI_VENDOR_ID_PHILIPS:
/*
* Philips controllers set HCC_PGM_FRAMELISTLEN, but
* they don't implement schedule sizes shorter than 1024.
*/
ehci->sched_size_bug = 1;
}

/* cache this readonly data; minimize chip reads */
Expand Down
1 change: 1 addition & 0 deletions drivers/usb/host/ehci.h
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ struct ehci_hcd { /* one per controller */
unsigned use_dummy_qh:1; /* AMD Frame List table quirk*/
unsigned has_synopsys_hc_bug:1; /* Synopsys HC */
unsigned frame_index_bug:1; /* MosChip (AKA NetMos) */
unsigned sched_size_bug:1; /* Philips */

/* required for usb32 quirk */
#define OHCI_CTRL_HCFS (3 << 6)
Expand Down

0 comments on commit 1996e6c

Please sign in to comment.