[lkml]   [2010]   [Feb]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[PATCH 2.6.34] ehci-hcd: add option to enable 64-bit DMA support
    Add a module parameter to allow the user to enable 64-bit DMA support in EHCI,
    which has been forcibly disabled since 2003 - see:

    At that time the comment was "it'd only matter on a few big Intel boxes anyway",
    however the situation is much different today when many new machines have 4GB
    or more of RAM and IOMMU/SWIOTLB are thus needlessly required for USB transfers.
    For now, the support remains disabled by default and is controlled by an
    allow_64bit module parameter.

    Note that some USB device drivers may require updates to pass the DMA
    capabilities up to their higher layers to avoid unnecessary IOMMU or bounce-
    buffer use (i.e. networking layer NETIF_F_HIGHDMA). Some of these checks were
    disabled by the patch listed above, and more may be required again today.
    However, those previous checks were done incorrectly using dma_supported,
    which checks to see whether a device's DMA mask can be validly set to a given
    mask, not whether its previously set mask will accomodate the mask passed in.

    Signed-off-by: Robert Hancock <>

    diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
    index 1ec3857..f527e15 100644
    --- a/drivers/usb/host/ehci-hcd.c
    +++ b/drivers/usb/host/ehci-hcd.c
    @@ -101,6 +101,10 @@ static int ignore_oc = 0;
    module_param (ignore_oc, bool, S_IRUGO);
    MODULE_PARM_DESC (ignore_oc, "ignore bogus hardware overcurrent indications");

    +static int allow_64bit;
    +module_param(allow_64bit, bool, S_IRUGO);
    +MODULE_PARM_DESC(allow_64bit, "allow 64-bit DMA");

    @@ -644,11 +648,9 @@ 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 (!dma_set_mask(hcd->self.controller, DMA_BIT_MASK(64)))
    + if (allow_64bit &&
    + !dma_set_mask(hcd->self.controller, DMA_BIT_MASK(64)))
    ehci_info(ehci, "enabled 64bit DMA\n");

     \ /
      Last update: 2010-02-18 04:13    [W:0.021 / U:87.092 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site