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@xxxxxxxxxxxxxxxxxxx> --- 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(-) Index: usb-3.4/drivers/usb/host/ehci.h =================================================================== --- usb-3.4.orig/drivers/usb/host/ehci.h +++ usb-3.4/drivers/usb/host/ehci.h @@ -149,6 +149,7 @@ struct ehci_hcd { /* one per controlle 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) Index: usb-3.4/drivers/usb/host/ehci-hcd.c =================================================================== --- usb-3.4.orig/drivers/usb/host/ehci-hcd.c +++ usb-3.4/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; Index: usb-3.4/drivers/usb/host/ehci-pci.c =================================================================== --- usb-3.4.orig/drivers/usb/host/ehci-pci.c +++ usb-3.4/drivers/usb/host/ehci-pci.c @@ -97,6 +97,13 @@ static int ehci_pci_setup(struct usb_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 */ -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html