[linux-yocto] [PATCH 09/87] drivers/usb/host/ehci-ci13612.c: fix a burst size issue

Bruce Ashfield bruce.ashfield at windriver.com
Mon May 27 11:02:38 PDT 2013


On 13-05-27 12:55 PM, Paul Butler wrote:
> Fix an issue that we found with the burst size on the AXI bus.

Typically we elaborate on issues .. what is the user visible symptom
that someone sees with this problem ? That should be in the commit log,
as well as an explanation of how this fixes the problem.

Also, if this is the driver introduced in patch 4/87, why are we
keeping this distinct ? As documentation of who did what work ? Or
something else ?

Cheers,

Bruce

>
> Signed-off-by: Paul Butler <paul.butler at windriver.com>
> ---
>   drivers/usb/host/ehci-ci13612.c | 37 +++++++++++++++++++++++++++----------
>   drivers/usb/host/ehci-ci13612.h |  3 +++
>   2 files changed, 30 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/usb/host/ehci-ci13612.c b/drivers/usb/host/ehci-ci13612.c
> index 151376c..8b7102f 100644
> --- a/drivers/usb/host/ehci-ci13612.c
> +++ b/drivers/usb/host/ehci-ci13612.c
> @@ -30,15 +30,32 @@
>   static void ci13612_usb_setup(struct usb_hcd *hcd)
>   {
>   	int USB_TXFIFOTHRES, VUSB_HS_TX_BURST;
> +	u32 deviceMode;
> +	struct ehci_hcd *ehci = hcd_to_ehci(hcd);
>
>   	/* Fix a HW erratum where the USB core may overrun its transmit FIFO. */
> -	/* Fix a HW erratum where the USB core may incorrectly fill its transmit FIFO. */
> +	/* Fix a HW erratum where the USB core may incorrectly fill its
> +	 * transmit FIFO.
> +	 */
>   	VUSB_HS_TX_BURST = inl(USB_HWTXBUF) & 0x0f;
>   	USB_TXFIFOTHRES = (inl(USB_TXFILLTUNING) & 0x3f0000) >> 16;
>
> -	printk(KERN_INFO "ehci-ci13612 (ci13612_usb_setup): "
> -			 "VUSB_HS_TX_BURST = 0x%x, USB_TXFIFOTHRES = 0x%x\n",
> -			 VUSB_HS_TX_BURST, USB_TXFIFOTHRES);
> +	/* Fix related to an issue that we found with the burst size on
> +	 * the AXI bus check if device or host mode
> +	 */
> +	deviceMode = ehci_readl(ehci, hcd->regs + 0x1A8);
> +
> +	if ((deviceMode & 0x3) == 0x2) {
> +		/* device mode */
> +		writel(0x0, hcd->regs + 0x90);
> +	} else if ((deviceMode & 0x3) == 0x3) {
> +		/* host mode */
> +		writel(0x6, hcd->regs + 0x90);
> +	}
> +
> +	printk(KERN_INFO
> +	       "ehci-ci13612 (ci13612_usb_setup): VUSB_HS_TX_BURST = 0x%x, USB_TXFIFOTHRES = 0x%x\n",
> +		VUSB_HS_TX_BURST, USB_TXFIFOTHRES);
>
>   	return;
>   }
> @@ -97,8 +114,8 @@ static int ehci_run_fix(struct usb_hcd *hcd)
>   	port_status = ehci_readl(ehci, &ehci->regs->port_status[0]);
>   	printk(KERN_INFO "ehci_run: port_status = 0x%x\n", port_status);
>   	if (port_status & 0x100) {
> -		printk(KERN_ERR "USB port is in reset status, not able to "
> -				"change host controller status to run\n");
> +		printk(KERN_ERR
> +		       "USB port is in reset status, not able to change host controller status to run\n");
>   		return -EFAULT;
>   	}
>
> @@ -187,13 +204,13 @@ static int ci13612_ehci_probe(struct platform_device *pdev)
>   	}
>
>   	/* FIXME: This reported error since we don't have a second register
> -         *  area defined in our dtb. Should we add it or stay backwards compatible ?
> -         */
> +	 * area defined in our dtb. Should we add it or stay backwards
> +	 * compatible ?
> +	 */
>   	gpreg_base = of_iomap(np, 1);
>   	if (!gpreg_base) {
>   		dev_warn(&pdev->dev, "of_iomap error can't map region 1\n");
> -	}
> -	else {
> +	} else {
>   		/* Setup GPREG for USB to enable the 6-bit address line */
>   		writel(0x0, gpreg_base + 0x8);
>
> diff --git a/drivers/usb/host/ehci-ci13612.h b/drivers/usb/host/ehci-ci13612.h
> index bbba3f4..9d296ce 100644
> --- a/drivers/usb/host/ehci-ci13612.h
> +++ b/drivers/usb/host/ehci-ci13612.h
> @@ -4,6 +4,9 @@
>   #define ci13612_PHY_ADDR	0x0020004A0000ULL
>   #define ci13162_PHY_ADDR_SIZE	0x20000
>
> +#define GPREG_PHY_ADDR		0x00200040C000ULL
> +#define GPREG_PHY_ADDR_SIZE	0x1000
> +
>   /*
>    * Host interface registers
>    */
>




More information about the linux-yocto mailing list