This is a note to let you know that I've just added the patch titled

    USB: EHCI: work around bug in the Philips ISP1562 controller

to my usb git tree which can be found at
    git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
in the usb-next branch.

The patch will show up in the next release of the linux-next tree
(usually sometime within the next 24 hours during the week.)

The patch will also will be merged in the next major kernel release
during the merge window.

If you have any questions about this process, please let me know.


>From 1996e6c572969a8cf6d7fa97eef621219acd94a9 Mon Sep 17 00:00:00 2001
From: Alan Stern <[email protected]>
Date: Mon, 14 May 2012 13:48:16 -0400
Subject: USB: EHCI: work around bug in the Philips ISP1562 controller

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 <[email protected]>
Cc: stable <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
 drivers/usb/host/ehci-hcd.c |    2 +-
 drivers/usb/host/ehci-pci.c |    7 +++++++
 drivers/usb/host/ehci.h     |    1 +
 3 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 5cb775b..f644ba9 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -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;
diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c
index bc94d7b..4baafa3 100644
--- a/drivers/usb/host/ehci-pci.c
+++ b/drivers/usb/host/ehci-pci.c
@@ -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 */
diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h
index 2694ed6..2a6652f 100644
--- a/drivers/usb/host/ehci.h
+++ b/drivers/usb/host/ehci.h
@@ -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)
-- 
1.7.10.1.362.g242cab3


--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to