USB: xhci: Set DMA mask for host.
Tell the USB core that we can do DMA directly (instead of needing it to memory-map the buffers for PIO). If the xHCI host supports 64-bit addresses, set the DMA mask accordingly. Otherwise indicate the host can handle 32-bit DMA addresses. This improves performance because the USB core doesn't have to spend time remapping buffers in high memory into the 32-bit address range. Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
ed3f245392
commit
006d5820b4
@ -53,6 +53,7 @@ static int xhci_pci_setup(struct usb_hcd *hcd)
|
||||
struct xhci_hcd *xhci = hcd_to_xhci(hcd);
|
||||
struct pci_dev *pdev = to_pci_dev(hcd->self.controller);
|
||||
int retval;
|
||||
u32 temp;
|
||||
|
||||
hcd->self.sg_tablesize = TRBS_PER_SEGMENT - 2;
|
||||
|
||||
@ -93,6 +94,14 @@ static int xhci_pci_setup(struct usb_hcd *hcd)
|
||||
return retval;
|
||||
xhci_dbg(xhci, "Reset complete\n");
|
||||
|
||||
temp = xhci_readl(xhci, &xhci->cap_regs->hcc_params);
|
||||
if (HCC_64BIT_ADDR(temp)) {
|
||||
xhci_dbg(xhci, "Enabling 64-bit DMA addresses.\n");
|
||||
dma_set_mask(hcd->self.controller, DMA_BIT_MASK(64));
|
||||
} else {
|
||||
dma_set_mask(hcd->self.controller, DMA_BIT_MASK(32));
|
||||
}
|
||||
|
||||
xhci_dbg(xhci, "Calling HCD init\n");
|
||||
/* Initialize HCD and host controller data structures. */
|
||||
retval = xhci_init(hcd);
|
||||
|
Loading…
Reference in New Issue
Block a user