usb: core: setup dma_pfn_offset for USB devices and, interfaces
[cascardo/linux.git] / drivers / usb / core / usb.c
index 5e80697..5921514 100644 (file)
@@ -440,7 +440,18 @@ struct usb_device *usb_alloc_dev(struct usb_device *parent,
        dev->dev.bus = &usb_bus_type;
        dev->dev.type = &usb_device_type;
        dev->dev.groups = usb_device_groups;
+       /*
+        * Fake a dma_mask/offset for the USB device:
+        * We cannot really use the dma-mapping API (dma_alloc_* and
+        * dma_map_*) for USB devices but instead need to use
+        * usb_alloc_coherent and pass data in 'urb's, but some subsystems
+        * manually look into the mask/offset pair to determine whether
+        * they need bounce buffers.
+        * Note: calling dma_set_mask() on a USB device would set the
+        * mask for the entire HCD, so don't do that.
+        */
        dev->dev.dma_mask = bus->controller->dma_mask;
+       dev->dev.dma_pfn_offset = bus->controller->dma_pfn_offset;
        set_dev_node(&dev->dev, dev_to_node(bus->controller));
        dev->state = USB_STATE_ATTACHED;
        dev->lpm_disable_count = 1;