USB: EHCI: work around bug in the Philips ISP1562 controller
authorAlan Stern <stern@rowland.harvard.edu>
Mon, 14 May 2012 17:48:16 +0000 (13:48 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 14 May 2012 19:50:22 +0000 (12:50 -0700)
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>
drivers/usb/host/ehci-hcd.c
drivers/usb/host/ehci-pci.c
drivers/usb/host/ehci.h

index 5cb775b1802d7aade70fe706cb384a225b1a1d10..f644ba9529edf93eb70a4c9bd187546d096565e7 100644 (file)
@@ -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;
index bc94d7bf072d822fb32da0867b6759dec223f69a..4baafa3e80b270854bf43bf7f0563025c79bdb12 100644 (file)
@@ -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 */
index 2694ed6558d2d954c03a4ba3b77eabdc64f9c7f6..2a6652fd54001fff43f0f13bac10eaf2d36f4d4d 100644 (file)
@@ -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)