usb: Enable support for 64bit EHCI host controllers in arm64.
authorLiviu Dudau <Liviu.Dudau@arm.com>
Mon, 10 Mar 2014 10:55:37 +0000 (10:55 +0000)
committerMark Brown <broonie@linaro.org>
Wed, 14 May 2014 17:35:48 +0000 (18:35 +0100)
arm64 architecture handles correctly 64bit DMAs and can enable
support for 64bit EHCI host controllers.

Signed-off-by: Liviu Dudau <Liviu.Dudau@arm.com>
Signed-off-by: Ryan Harkin <ryan.harkin@linaro.org>
Signed-off-by: Mark Brown <broonie@linaro.org>
drivers/usb/host/ehci-hcd.c

index 246e124e6ac55c3dc66ba822a9b3f8ba5bebdd6a..d387791f5ab8c1a3a95b1decc3eeb8667a441c3d 100644 (file)
@@ -591,11 +591,16 @@ static int ehci_run (struct usb_hcd *hcd)
         */
        hcc_params = ehci_readl(ehci, &ehci->caps->hcc_params);
        if (HCC_64BIT_ADDR(hcc_params)) {
-               ehci_writel(ehci, 0, &ehci->regs->segment);
-#if 0
-// this is deeply broken on almost all architectures
+#if CONFIG_ARM64
+               ehci_writel(ehci, ehci->periodic_dma >> 32, &ehci->regs->segment);
+               /*
+                * this is deeply broken on almost all architectures
+                * but arm64 can use it so enable it
+                */
                if (!dma_set_mask(hcd->self.controller, DMA_BIT_MASK(64)))
                        ehci_info(ehci, "enabled 64bit DMA\n");
+#else
+               ehci_writel(ehci, 0, &ehci->regs->segment);
 #endif
        }