• X
    xhci: fix dma mask setup in xhci.c · c10cf118
    Xenia Ragiadakou 提交于
    The function dma_set_mask() tests internally whether the dma_mask pointer
    for the device is initialized and fails if the dma_mask pointer is NULL.
    On pci platforms, the device dma_mask pointer is initialized, when pci
    devices are enumerated, to point to the pci_dev->dma_mask which is 0xffffffff.
    However, for non-pci platforms, the dma_mask pointer may not be initialized
    and in that case dma_set_mask() will fail.
    
    This patch initializes the dma_mask and the coherent_dma_mask to 32bits
    in xhci_plat_probe(), before the call to usb_create_hcd() that sets the
    "uses_dma" flag for the usb bus and the call to usb_add_hcd() that creates
    coherent dma pools for the usb hcd.
    
    Moreover, a call to dma_set_mask() does not set the device coherent_dma_mask.
    Since the xhci-hcd driver calls dma_alloc_coherent() and dma_pool_alloc()
    to allocate consistent DMA memory blocks, the coherent DMA address mask
    has to be set explicitly.
    
    This patch sets the coherent_dma_mask to 64bits in xhci_gen_setup() when
    the xHC is capable for 64-bit DMA addressing.
    
    If dma_set_mask() succeeds, for a given bitmask, it is guaranteed that
    the given bitmask is also supported for consistent DMA mappings.
    
    Other changes introduced in this patch are:
    
    - The return value of dma_set_mask() is checked to ensure that the required
      dma bitmask conforms with the host system's addressing capabilities.
    
    - The dma_mask setup code for the non-primary hcd was removed since both
      primary and non-primary hcd refer to the same generic device whose
      dma_mask and coherent_dma_mask are already set during the setup of
      the primary hcd.
    
    - The code for reading the HCCPARAMS register to find out the addressing
      capabilities of xHC was removed since its value is already cached in
      xhci->hccparams.
    
    - hcd->self.controller was replaced with the dev variable since it is
      already available.
    Signed-off-by: NXenia Ragiadakou <burzalodowa@gmail.com>
    Signed-off-by: NSarah Sharp <sarah.a.sharp@linux.intel.com>
    c10cf118
xhci-plat.c 5.8 KB