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 <stern@rowland.harvard.edu> Cc: stable <stable@vger.kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
65b8e5cbdd
Коммит
1996e6c572
|
@ -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;
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче