Re: [PATCH] EHCI: work around bug in the Philips ISP1562 controller

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Mon, May 14, 2012 at 01:48:16PM -0400, Alan Stern wrote:
> 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 */

Unrelated to $SUBJECT, but all those quirks could be passed through
driver_data from pci ID table. That will remove the need for the switch
statement. My 2 cents

-- 
balbi

Attachment: signature.asc
Description: Digital signature


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux