From: SangeethaRao <sangeetha....@lsi.com>

Fixed the DTS to have correct entries and updated USB driver
to exclude 55xx relevant code from PPC build

drivers/usb: added a new ehci halt function

New halt function halts the EHCI controller.
This is to be called during startup since spinlocks are not
initialized at that point.

Signed-off-by: SangeethaRao <sangeetha....@lsi.com>
---
 arch/powerpc/boot/dts/acp342x.dts |    7 ++++---
 drivers/usb/host/ehci-ci13612.c   |   30 +++++++++++++++++++++++++++++-
 2 files changed, 33 insertions(+), 4 deletions(-)

diff --git a/arch/powerpc/boot/dts/acp342x.dts 
b/arch/powerpc/boot/dts/acp342x.dts
index 4db67df..8e400e3 100644
--- a/arch/powerpc/boot/dts/acp342x.dts
+++ b/arch/powerpc/boot/dts/acp342x.dts
@@ -112,9 +112,10 @@
                         };
                         USB0: usb@004a4000 {
                                 device_type = "usb";
-                                compatible = "acp-usb";
-                                enabled = <0>;
-                                reg = <0x004a4000 0x00020000>;
+                                compatible = "lsi,acp-usb";
+                                enabled = <1>;
+                               reg = <0x20 0x004A0000 0x0 0020000>,
+                               <0x20 0x0040C000 0x0 0001000>;
                                 interrupt-parent = <&MPIC>;
                                 interrupts = <31>;
                         };
diff --git a/drivers/usb/host/ehci-ci13612.c b/drivers/usb/host/ehci-ci13612.c
index b995a32..3badbd8 100644
--- a/drivers/usb/host/ehci-ci13612.c
+++ b/drivers/usb/host/ehci-ci13612.c
@@ -32,6 +32,8 @@
 #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)
 {
@@ -104,7 +106,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);
@@ -183,8 +185,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)
@@ -192,10 +197,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;
 }
@@ -238,6 +245,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;
        }
@@ -255,9 +263,12 @@ 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));
@@ -316,6 +327,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[] = {
@@ -323,6 +346,10 @@ static struct of_device_id ci13612_match[] = {
                .type   = "usb",
                .compatible = "lsi,acp-usb",
        },
+       {
+               .type   = "usb",
+               .compatible = "acp-usb",
+       },
        {},
 };
 
@@ -333,4 +360,5 @@ static struct platform_driver ci13612_ehci_driver = {
                .name = "ci13612-ehci",
                .of_match_table = ci13612_match,
        },
+
 };
-- 
1.7.9.5

-- 
_______________________________________________
linux-yocto mailing list
linux-yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to