Commit 2d7a3dc3 authored by Laurentiu Tudor's avatar Laurentiu Tudor Committed by Christoph Hellwig

USB: drop HCD_LOCAL_MEM flag

With the addition of the local memory allocator, the HCD_LOCAL_MEM
flag can be dropped and the checks against it replaced with a check
for the localmem_pool ptr being initialized.
Signed-off-by: default avatarLaurentiu Tudor <laurentiu.tudor@nxp.com>
Tested-by: default avatarFredrik Noring <noring@nocrew.org>
Reviewed-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent 7d995329
...@@ -68,7 +68,7 @@ int hcd_buffer_create(struct usb_hcd *hcd) ...@@ -68,7 +68,7 @@ int hcd_buffer_create(struct usb_hcd *hcd)
if (!IS_ENABLED(CONFIG_HAS_DMA) || if (!IS_ENABLED(CONFIG_HAS_DMA) ||
(!is_device_dma_capable(hcd->self.sysdev) && (!is_device_dma_capable(hcd->self.sysdev) &&
!(hcd->driver->flags & HCD_LOCAL_MEM))) !hcd->localmem_pool))
return 0; return 0;
for (i = 0; i < HCD_BUFFER_POOLS; i++) { for (i = 0; i < HCD_BUFFER_POOLS; i++) {
...@@ -130,8 +130,7 @@ void *hcd_buffer_alloc( ...@@ -130,8 +130,7 @@ void *hcd_buffer_alloc(
/* some USB hosts just use PIO */ /* some USB hosts just use PIO */
if (!IS_ENABLED(CONFIG_HAS_DMA) || if (!IS_ENABLED(CONFIG_HAS_DMA) ||
(!is_device_dma_capable(bus->sysdev) && !is_device_dma_capable(bus->sysdev)) {
!(hcd->driver->flags & HCD_LOCAL_MEM))) {
*dma = ~(dma_addr_t) 0; *dma = ~(dma_addr_t) 0;
return kmalloc(size, mem_flags); return kmalloc(size, mem_flags);
} }
...@@ -162,8 +161,7 @@ void hcd_buffer_free( ...@@ -162,8 +161,7 @@ void hcd_buffer_free(
} }
if (!IS_ENABLED(CONFIG_HAS_DMA) || if (!IS_ENABLED(CONFIG_HAS_DMA) ||
(!is_device_dma_capable(bus->sysdev) && !is_device_dma_capable(bus->sysdev)) {
!(hcd->driver->flags & HCD_LOCAL_MEM))) {
kfree(addr); kfree(addr);
return; return;
} }
......
...@@ -1347,14 +1347,14 @@ EXPORT_SYMBOL_GPL(usb_hcd_unlink_urb_from_ep); ...@@ -1347,14 +1347,14 @@ EXPORT_SYMBOL_GPL(usb_hcd_unlink_urb_from_ep);
* using regular system memory - like pci devices doing bus mastering. * using regular system memory - like pci devices doing bus mastering.
* *
* To support host controllers with limited dma capabilities we provide dma * To support host controllers with limited dma capabilities we provide dma
* bounce buffers. This feature can be enabled using the HCD_LOCAL_MEM flag. * bounce buffers. This feature can be enabled by initializing
* hcd->localmem_pool using usb_hcd_setup_local_mem().
* For this to work properly the host controller code must first use the * For this to work properly the host controller code must first use the
* function dma_declare_coherent_memory() to point out which memory area * function dma_declare_coherent_memory() to point out which memory area
* that should be used for dma allocations. * that should be used for dma allocations.
* *
* The HCD_LOCAL_MEM flag then tells the usb code to allocate all data for * The initialized hcd->localmem_pool then tells the usb code to allocate all
* dma using dma_alloc_coherent() which in turn allocates from the memory * data for dma using the genalloc API.
* area pointed out with dma_declare_coherent_memory().
* *
* So, to summarize... * So, to summarize...
* *
...@@ -1364,9 +1364,6 @@ EXPORT_SYMBOL_GPL(usb_hcd_unlink_urb_from_ep); ...@@ -1364,9 +1364,6 @@ EXPORT_SYMBOL_GPL(usb_hcd_unlink_urb_from_ep);
* (a) "normal" kernel memory is no good, and * (a) "normal" kernel memory is no good, and
* (b) there's not enough to share * (b) there's not enough to share
* *
* - The only *portable* hook for such stuff in the
* DMA framework is dma_declare_coherent_memory()
*
* - So we use that, even though the primary requirement * - So we use that, even though the primary requirement
* is that the memory be "local" (hence addressable * is that the memory be "local" (hence addressable
* by that device), not "coherent". * by that device), not "coherent".
...@@ -1533,7 +1530,7 @@ int usb_hcd_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb, ...@@ -1533,7 +1530,7 @@ int usb_hcd_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
urb->setup_dma)) urb->setup_dma))
return -EAGAIN; return -EAGAIN;
urb->transfer_flags |= URB_SETUP_MAP_SINGLE; urb->transfer_flags |= URB_SETUP_MAP_SINGLE;
} else if (hcd->driver->flags & HCD_LOCAL_MEM) { } else if (hcd->localmem_pool) {
ret = hcd_alloc_coherent( ret = hcd_alloc_coherent(
urb->dev->bus, mem_flags, urb->dev->bus, mem_flags,
&urb->setup_dma, &urb->setup_dma,
...@@ -1603,7 +1600,7 @@ int usb_hcd_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb, ...@@ -1603,7 +1600,7 @@ int usb_hcd_map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
else else
urb->transfer_flags |= URB_DMA_MAP_SINGLE; urb->transfer_flags |= URB_DMA_MAP_SINGLE;
} }
} else if (hcd->driver->flags & HCD_LOCAL_MEM) { } else if (hcd->localmem_pool) {
ret = hcd_alloc_coherent( ret = hcd_alloc_coherent(
urb->dev->bus, mem_flags, urb->dev->bus, mem_flags,
&urb->transfer_dma, &urb->transfer_dma,
......
...@@ -559,7 +559,7 @@ static int ehci_init(struct usb_hcd *hcd) ...@@ -559,7 +559,7 @@ static int ehci_init(struct usb_hcd *hcd)
ehci->command = temp; ehci->command = temp;
/* Accept arbitrarily long scatter-gather lists */ /* Accept arbitrarily long scatter-gather lists */
if (!(hcd->driver->flags & HCD_LOCAL_MEM)) if (!hcd->localmem_pool)
hcd->self.sg_tablesize = ~0; hcd->self.sg_tablesize = ~0;
/* Prepare for unlinking active QHs */ /* Prepare for unlinking active QHs */
......
...@@ -4995,7 +4995,7 @@ static int hcd_fotg210_init(struct usb_hcd *hcd) ...@@ -4995,7 +4995,7 @@ static int hcd_fotg210_init(struct usb_hcd *hcd)
fotg210->command = temp; fotg210->command = temp;
/* Accept arbitrarily long scatter-gather lists */ /* Accept arbitrarily long scatter-gather lists */
if (!(hcd->driver->flags & HCD_LOCAL_MEM)) if (!hcd->localmem_pool)
hcd->self.sg_tablesize = ~0; hcd->self.sg_tablesize = ~0;
return 0; return 0;
} }
......
...@@ -448,7 +448,7 @@ static int ohci_init (struct ohci_hcd *ohci) ...@@ -448,7 +448,7 @@ static int ohci_init (struct ohci_hcd *ohci)
struct usb_hcd *hcd = ohci_to_hcd(ohci); struct usb_hcd *hcd = ohci_to_hcd(ohci);
/* Accept arbitrarily long scatter-gather lists */ /* Accept arbitrarily long scatter-gather lists */
if (!(hcd->driver->flags & HCD_LOCAL_MEM)) if (!hcd->localmem_pool)
hcd->self.sg_tablesize = ~0; hcd->self.sg_tablesize = ~0;
if (distrust_firmware) if (distrust_firmware)
......
...@@ -49,7 +49,7 @@ static const struct hc_driver ohci_sm501_hc_driver = { ...@@ -49,7 +49,7 @@ static const struct hc_driver ohci_sm501_hc_driver = {
* generic hardware linkage * generic hardware linkage
*/ */
.irq = ohci_irq, .irq = ohci_irq,
.flags = HCD_USB11 | HCD_MEMORY | HCD_LOCAL_MEM, .flags = HCD_USB11 | HCD_MEMORY,
/* /*
* basic lifecycle operations * basic lifecycle operations
...@@ -153,7 +153,8 @@ static int ohci_hcd_sm501_drv_probe(struct platform_device *pdev) ...@@ -153,7 +153,8 @@ static int ohci_hcd_sm501_drv_probe(struct platform_device *pdev)
* fine. This is however not always the case - buffers may be allocated * fine. This is however not always the case - buffers may be allocated
* using kmalloc() - so the usb core needs to be told that it must copy * using kmalloc() - so the usb core needs to be told that it must copy
* data into our local memory if the buffers happen to be placed in * data into our local memory if the buffers happen to be placed in
* regular memory. The HCD_LOCAL_MEM flag does just that. * regular memory. A non-null hcd->localmem_pool initialized by the
* the call to usb_hcd_setup_local_mem() below does just that.
*/ */
if (usb_hcd_setup_local_mem(hcd, mem->start, if (usb_hcd_setup_local_mem(hcd, mem->start,
......
...@@ -153,7 +153,7 @@ static const struct hc_driver ohci_tmio_hc_driver = { ...@@ -153,7 +153,7 @@ static const struct hc_driver ohci_tmio_hc_driver = {
/* generic hardware linkage */ /* generic hardware linkage */
.irq = ohci_irq, .irq = ohci_irq,
.flags = HCD_USB11 | HCD_MEMORY | HCD_LOCAL_MEM, .flags = HCD_USB11 | HCD_MEMORY,
/* basic lifecycle operations */ /* basic lifecycle operations */
.start = ohci_tmio_start, .start = ohci_tmio_start,
......
...@@ -581,7 +581,7 @@ static int uhci_start(struct usb_hcd *hcd) ...@@ -581,7 +581,7 @@ static int uhci_start(struct usb_hcd *hcd)
hcd->uses_new_polling = 1; hcd->uses_new_polling = 1;
/* Accept arbitrarily long scatter-gather lists */ /* Accept arbitrarily long scatter-gather lists */
if (!(hcd->driver->flags & HCD_LOCAL_MEM)) if (!hcd->localmem_pool)
hcd->self.sg_tablesize = ~0; hcd->self.sg_tablesize = ~0;
spin_lock_init(&uhci->lock); spin_lock_init(&uhci->lock);
......
...@@ -256,7 +256,6 @@ struct hc_driver { ...@@ -256,7 +256,6 @@ struct hc_driver {
int flags; int flags;
#define HCD_MEMORY 0x0001 /* HC regs use memory (else I/O) */ #define HCD_MEMORY 0x0001 /* HC regs use memory (else I/O) */
#define HCD_LOCAL_MEM 0x0002 /* HC needs local memory */
#define HCD_SHARED 0x0004 /* Two (or more) usb_hcds share HW */ #define HCD_SHARED 0x0004 /* Two (or more) usb_hcds share HW */
#define HCD_USB11 0x0010 /* USB 1.1 */ #define HCD_USB11 0x0010 /* USB 1.1 */
#define HCD_USB2 0x0020 /* USB 2.0 */ #define HCD_USB2 0x0020 /* USB 2.0 */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment