USB: host: Introduce flag to enable use of 64-bit dma_mask for ehci-platform
authorAndreas Herrmann <andreas.herrmann@caviumnetworks.com>
Mon, 12 Jan 2015 15:05:52 +0000 (16:05 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 25 Jan 2015 12:48:28 +0000 (20:48 +0800)
ehci-octeon driver used a 64-bit dma_mask. With removal of ehci-octeon
and usage of ehci-platform ehci dma_mask is now limited to 32 bits
(coerced in ehci_platform_probe).

Provide a flag in ehci platform data to allow use of 64 bits for
dma_mask.

Cc: David Daney <david.daney@cavium.com>
Cc: Alex Smith <alex.smith@imgtec.com>
Signed-off-by: Andreas Herrmann <andreas.herrmann@caviumnetworks.com>
Tested-by: Aaro Koskinen <aaro.koskinen@iki.fi>
Acked-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/mips/cavium-octeon/octeon-platform.c
drivers/usb/host/ehci-platform.c
include/linux/usb/ehci_pdriver.h

index eea60b6..12410a2 100644 (file)
@@ -310,6 +310,7 @@ static struct usb_ehci_pdata octeon_ehci_pdata = {
 #ifdef __BIG_ENDIAN
        .big_endian_mmio        = 1,
 #endif
+       .dma_mask_64    = 1,
        .power_on       = octeon_ehci_power_on,
        .power_off      = octeon_ehci_power_off,
 };
@@ -331,8 +332,6 @@ static void __init octeon_ehci_hw_start(struct device *dev)
        octeon2_usb_clocks_stop();
 }
 
-static u64 octeon_ehci_dma_mask = DMA_BIT_MASK(64);
-
 static int __init octeon_ehci_device_init(void)
 {
        struct platform_device *pd;
@@ -347,7 +346,6 @@ static int __init octeon_ehci_device_init(void)
        if (!pd)
                return 0;
 
-       pd->dev.dma_mask = &octeon_ehci_dma_mask;
        pd->dev.platform_data = &octeon_ehci_pdata;
        octeon_ehci_hw_start(&pd->dev);
 
index 28aae64..63f2622 100644 (file)
@@ -155,7 +155,8 @@ static int ehci_platform_probe(struct platform_device *dev)
        if (!pdata)
                pdata = &ehci_platform_defaults;
 
-       err = dma_coerce_mask_and_coherent(&dev->dev, DMA_BIT_MASK(32));
+       err = dma_coerce_mask_and_coherent(&dev->dev,
+               pdata->dma_mask_64 ? DMA_BIT_MASK(64) : DMA_BIT_MASK(32));
        if (err)
                return err;
 
index 6287b39..db0431b 100644 (file)
@@ -48,6 +48,7 @@ struct usb_ehci_pdata {
        unsigned        big_endian_mmio:1;
        unsigned        no_io_watchdog:1;
        unsigned        reset_on_resume:1;
+       unsigned        dma_mask_64:1;
 
        /* Turn on all power and clocks */
        int (*power_on)(struct platform_device *pdev);