From: SangeethaRao <[email protected]>

incorrect ehci_regs struct member was being used in USB driver

Signed-off-by: SangeethaRao <[email protected]>
---
 drivers/usb/host/ehci-ci13612.c |   57 +++++++++++++++++++++++++++------------
 1 file changed, 40 insertions(+), 17 deletions(-)

diff --git a/drivers/usb/host/ehci-ci13612.c b/drivers/usb/host/ehci-ci13612.c
index b39dc0e..b20ec40 100644
--- a/drivers/usb/host/ehci-ci13612.c
+++ b/drivers/usb/host/ehci-ci13612.c
@@ -32,11 +32,13 @@
 #include "ehci-ci13612.h"
 
 
+static int ci13612_ehci_halt(struct ehci_hcd *ehci);
+
 #ifdef CONFIG_LSI_USB_SW_WORKAROUND
 static void ci13612_usb_setup(struct usb_hcd *hcd)
 {
        int USB_TXFIFOTHRES, VUSB_HS_TX_BURST;
-       u32 device_mode;
+       u32 devicemode;
        struct ehci_hcd *ehci = hcd_to_ehci(hcd);
        u32 txfulltuning = 0;
 
@@ -55,18 +57,18 @@ static void ci13612_usb_setup(struct usb_hcd *hcd)
         * Unspecified Length Bursts by setting SBUSCFG to 0x0, or use stream
         * disable mode by setting USBMODE.SDIS to 0x1.
         */
-       device_mode = ehci_readl(ehci, hcd->regs + 0x1A8);
+       devicemode = ehci_readl(ehci, hcd->regs + 0x1A8);
 
-       if ((device_mode & 0x3) == 0x2) {
+       if ((devicemode & 0x3) == 0x2) {
                /* device mode */
                writel(0x0, hcd->regs + 0x90);
-       } else if ((device_mode & 0x3) == 0x3) {
+       } else if ((devicemode & 0x3) == 0x3) {
                /* host mode */
                writel(0x6, hcd->regs + 0x90);
        }
 
-       pr_info("ehci-ci13612 (ci13612_usb_setup): VUSB_HS_TX_BURST = 0x%x,"
-               "USB_TXFIFOTHRES = 0x%x\n", VUSB_HS_TX_BURST, USB_TXFIFOTHRES);
+       pr_err("ehci-ci13612 (ci13612_usb_setup): VUSB_HS_TX_BURST = 
0x%x,USB_TXFIFOTHRES = 0x%x\n",
+                       VUSB_HS_TX_BURST, USB_TXFIFOTHRES);
        return;
 }
 #endif
@@ -102,7 +104,7 @@ static int ci13612_ehci_init(struct usb_hcd *hcd)
        ehci->sbrn = 0x20;
 
        /* Reset is only allowed on a stopped controller */
-       ehci_halt(ehci);
+       ci13612_ehci_halt(ehci);
 
        /* reset controller */
        ehci_reset(ehci);
@@ -136,8 +138,7 @@ ci13612_fixup_usbcmd_rs(struct ehci_hcd *ehci)
        port_status = ehci_readl(ehci, &ehci->regs->port_status[0]);
        pr_info("ehci-ci13612: port_status = 0x%x\n", port_status);
        if (port_status & 0x100) {
-               pr_err("ehci-ci13612: USB port is in reset status, "
-                      "not able to change HC status to run\n");
+               pr_err("ehci-ci13612: USB port is in reset status, not able to 
change HC status to run\n");
                return -EFAULT;
        }
        return 0;
@@ -169,7 +170,7 @@ ci13612_fixup_txpburst(struct ehci_hcd *ehci)
        ehci_writel(ehci, burst_size, &ehci->regs->reserved1[1]);
 }
 #else
-#define ci13612_fixup_txpburst(ehci) do { (void)ehci; } while (0)
+#define ci13612_fixup_txpburst(ehci) do { (void)ehci; } while(0)
 #endif
 
 static int ci13612_ehci_run(struct usb_hcd *hcd)
@@ -182,8 +183,11 @@ static int ci13612_ehci_run(struct usb_hcd *hcd)
        if (retval)
                return retval;
 
+
+#ifndef CONFIG_LSI_USB_SW_WORKAROUND
        /* Setup AMBA interface to force INCR16 busts when possible */
        writel(3, USB_SBUSCFG);
+#endif
 
        retval = ehci_run(hcd);
        if (retval)
@@ -191,10 +195,12 @@ static int ci13612_ehci_run(struct usb_hcd *hcd)
 
        ci13612_fixup_txpburst(ehci);
 
+#ifndef CONFIG_LSI_USB_SW_WORKAROUND
        /* Set ITC (bits [23:16]) to zero for interrupt on every micro-frame */
        tmp = ehci_readl(ehci, &ehci->regs->command);
        tmp &= 0xFFFF;
        ehci_writel(ehci, tmp & 0xFFFF, &ehci->regs->command);
+#endif
 
        return retval;
 }
@@ -227,9 +233,7 @@ static int ci13612_ehci_probe(struct platform_device *pdev)
 {
        struct device_node *np = pdev->dev.of_node;
        struct usb_hcd *hcd;
-#ifdef CONFIG_ARM
        void __iomem *gpreg_base;
-#endif
        int irq;
        int retval;
        struct resource *res;
@@ -239,6 +243,7 @@ static int ci13612_ehci_probe(struct platform_device *pdev)
 
        irq = platform_get_irq(pdev, 0);
        if (irq < 0) {
+               dev_dbg(&pdev->dev, "error getting irq number\n");
                retval = irq;
                goto fail_create_hcd;
        }
@@ -256,12 +261,15 @@ static int ci13612_ehci_probe(struct platform_device 
*pdev)
                return -ENODEV;
        }
 
+
+#ifndef CONFIG_LSI_USB_SW_WORKAROUND
        /* Device using 32-bit addressing */
        pdev->dev.coherent_dma_mask = DMA_BIT_MASK(32);
        pdev->dev.dma_mask = &pdev->dev.coherent_dma_mask;
+#endif
 
-       hcd = usb_create_hcd(&ci13612_hc_driver, &pdev->dev,
-                            dev_name(&pdev->dev));
+       hcd = usb_create_hcd(&ci13612_hc_driver,
+                       &pdev->dev, dev_name(&pdev->dev));
        if (!hcd) {
                retval = -ENOMEM;
                goto fail_create_hcd;
@@ -277,7 +285,6 @@ static int ci13612_ehci_probe(struct platform_device *pdev)
                goto fail_put_hcd;
        }
 
-#ifdef CONFIG_ARM
        gpreg_base = of_iomap(np, 1);
        if (!gpreg_base) {
                dev_warn(&pdev->dev, "of_iomap error can't map region 1\n");
@@ -286,9 +293,12 @@ static int ci13612_ehci_probe(struct platform_device *pdev)
        } else {
                /* Set address bits [39:32] to zero */
                writel(0x0, gpreg_base + 0x8);
+#ifndef CONFIG_LSI_USB_SW_WORKAROUND
+               /* hprot cachable and bufferable */
+               writel(0xc, gpreg_base + 0x74);
+#endif
                iounmap(gpreg_base);
        }
-#endif
 
        retval = usb_add_hcd(hcd, irq, 0);
        if (retval == 0) {
@@ -315,6 +325,18 @@ static int ci13612_ehci_remove(struct platform_device 
*pdev)
        return 0;
 }
 
+static int ci13612_ehci_halt(struct ehci_hcd *ehci)
+{
+       u32     temp;
+
+       temp = ehci_readl(ehci, &ehci->regs->command);
+       temp &= ~CMD_RUN;
+       ehci_writel(ehci, temp, &ehci->regs->command);
+
+       return handshake(ehci, &ehci->regs->status,
+               STS_HALT, STS_HALT, 16 * 125);
+}
+
 MODULE_ALIAS("platform:ci13612-ehci");
 
 static struct of_device_id ci13612_match[] = {
@@ -326,7 +348,7 @@ static struct of_device_id ci13612_match[] = {
                .type   = "usb",
                .compatible = "acp-usb",
        },
-       { /* end of list */ },
+       {},
 };
 
 static struct platform_driver ci13612_ehci_driver = {
@@ -336,4 +358,5 @@ static struct platform_driver ci13612_ehci_driver = {
                .name = "ci13612-ehci",
                .of_match_table = ci13612_match,
        },
+
 };
-- 
1.7.9.5

_______________________________________________
linux-yocto mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to