Forráskód Böngészése

Merge branch 'fixes' into for-greg

Felipe Balbi 14 éve
szülő
commit
200b0182f9

+ 1 - 0
drivers/usb/gadget/f_phonet.c

@@ -434,6 +434,7 @@ static int pn_set_alt(struct usb_function *f, unsigned intf, unsigned alt)
 			    config_ep_by_speed(gadget, f, fp->out_ep)) {
 			    config_ep_by_speed(gadget, f, fp->out_ep)) {
 				fp->in_ep->desc = NULL;
 				fp->in_ep->desc = NULL;
 				fp->out_ep->desc = NULL;
 				fp->out_ep->desc = NULL;
+				spin_unlock(&port->lock);
 				return -EINVAL;
 				return -EINVAL;
 			}
 			}
 			usb_ep_enable(fp->out_ep);
 			usb_ep_enable(fp->out_ep);

+ 1 - 0
drivers/usb/musb/blackfin.c

@@ -17,6 +17,7 @@
 #include <linux/io.h>
 #include <linux/io.h>
 #include <linux/platform_device.h>
 #include <linux/platform_device.h>
 #include <linux/dma-mapping.h>
 #include <linux/dma-mapping.h>
+#include <linux/prefetch.h>
 
 
 #include <asm/cacheflush.h>
 #include <asm/cacheflush.h>
 
 

+ 17 - 9
drivers/usb/musb/cppi_dma.c

@@ -226,8 +226,10 @@ static int cppi_controller_stop(struct dma_controller *c)
 	struct cppi		*controller;
 	struct cppi		*controller;
 	void __iomem		*tibase;
 	void __iomem		*tibase;
 	int			i;
 	int			i;
+	struct musb		*musb;
 
 
 	controller = container_of(c, struct cppi, controller);
 	controller = container_of(c, struct cppi, controller);
+	musb = controller->musb;
 
 
 	tibase = controller->tibase;
 	tibase = controller->tibase;
 	/* DISABLE INDIVIDUAL CHANNEL Interrupts */
 	/* DISABLE INDIVIDUAL CHANNEL Interrupts */
@@ -289,9 +291,11 @@ cppi_channel_allocate(struct dma_controller *c,
 	u8			index;
 	u8			index;
 	struct cppi_channel	*cppi_ch;
 	struct cppi_channel	*cppi_ch;
 	void __iomem		*tibase;
 	void __iomem		*tibase;
+	struct musb		*musb;
 
 
 	controller = container_of(c, struct cppi, controller);
 	controller = container_of(c, struct cppi, controller);
 	tibase = controller->tibase;
 	tibase = controller->tibase;
+	musb = controller->musb;
 
 
 	/* ep0 doesn't use DMA; remember cppi indices are 0..N-1 */
 	/* ep0 doesn't use DMA; remember cppi indices are 0..N-1 */
 	index = ep->epnum - 1;
 	index = ep->epnum - 1;
@@ -339,7 +343,8 @@ static void cppi_channel_release(struct dma_channel *channel)
 	c = container_of(channel, struct cppi_channel, channel);
 	c = container_of(channel, struct cppi_channel, channel);
 	tibase = c->controller->tibase;
 	tibase = c->controller->tibase;
 	if (!c->hw_ep)
 	if (!c->hw_ep)
-		dev_dbg(musb->controller, "releasing idle DMA channel %p\n", c);
+		dev_dbg(c->controller->musb->controller,
+			"releasing idle DMA channel %p\n", c);
 	else if (!c->transmit)
 	else if (!c->transmit)
 		core_rxirq_enable(tibase, c->index + 1);
 		core_rxirq_enable(tibase, c->index + 1);
 
 
@@ -357,10 +362,11 @@ cppi_dump_rx(int level, struct cppi_channel *c, const char *tag)
 
 
 	musb_ep_select(base, c->index + 1);
 	musb_ep_select(base, c->index + 1);
 
 
-	DBG(level, "RX DMA%d%s: %d left, csr %04x, "
-			"%08x H%08x S%08x C%08x, "
-			"B%08x L%08x %08x .. %08x"
-			"\n",
+	dev_dbg(c->controller->musb->controller,
+		"RX DMA%d%s: %d left, csr %04x, "
+		"%08x H%08x S%08x C%08x, "
+		"B%08x L%08x %08x .. %08x"
+		"\n",
 		c->index, tag,
 		c->index, tag,
 		musb_readl(c->controller->tibase,
 		musb_readl(c->controller->tibase,
 			DAVINCI_RXCPPI_BUFCNT0_REG + 4 * c->index),
 			DAVINCI_RXCPPI_BUFCNT0_REG + 4 * c->index),
@@ -387,10 +393,11 @@ cppi_dump_tx(int level, struct cppi_channel *c, const char *tag)
 
 
 	musb_ep_select(base, c->index + 1);
 	musb_ep_select(base, c->index + 1);
 
 
-	DBG(level, "TX DMA%d%s: csr %04x, "
-			"H%08x S%08x C%08x %08x, "
-			"F%08x L%08x .. %08x"
-			"\n",
+	dev_dbg(c->controller->musb->controller,
+		"TX DMA%d%s: csr %04x, "
+		"H%08x S%08x C%08x %08x, "
+		"F%08x L%08x .. %08x"
+		"\n",
 		c->index, tag,
 		c->index, tag,
 		musb_readw(c->hw_ep->regs, MUSB_TXCSR),
 		musb_readw(c->hw_ep->regs, MUSB_TXCSR),
 
 
@@ -1022,6 +1029,7 @@ static bool cppi_rx_scan(struct cppi *cppi, unsigned ch)
 	int				i;
 	int				i;
 	dma_addr_t			safe2ack;
 	dma_addr_t			safe2ack;
 	void __iomem			*regs = rx->hw_ep->regs;
 	void __iomem			*regs = rx->hw_ep->regs;
+	struct musb			*musb = cppi->musb;
 
 
 	cppi_dump_rx(6, rx, "/K");
 	cppi_dump_rx(6, rx, "/K");
 
 

+ 8 - 4
drivers/usb/musb/musb_core.h

@@ -172,7 +172,8 @@ enum musb_g_ep0_state {
 #endif
 #endif
 
 
 /* TUSB mapping: "flat" plus ep0 special cases */
 /* TUSB mapping: "flat" plus ep0 special cases */
-#if	defined(CONFIG_USB_MUSB_TUSB6010)
+#if defined(CONFIG_USB_MUSB_TUSB6010) || \
+	defined(CONFIG_USB_MUSB_TUSB6010_MODULE)
 #define musb_ep_select(_mbase, _epnum) \
 #define musb_ep_select(_mbase, _epnum) \
 	musb_writeb((_mbase), MUSB_INDEX, (_epnum))
 	musb_writeb((_mbase), MUSB_INDEX, (_epnum))
 #define	MUSB_EP_OFFSET			MUSB_TUSB_OFFSET
 #define	MUSB_EP_OFFSET			MUSB_TUSB_OFFSET
@@ -241,7 +242,8 @@ struct musb_hw_ep {
 	void __iomem		*fifo;
 	void __iomem		*fifo;
 	void __iomem		*regs;
 	void __iomem		*regs;
 
 
-#ifdef CONFIG_USB_MUSB_TUSB6010
+#if defined(CONFIG_USB_MUSB_TUSB6010) || \
+	defined(CONFIG_USB_MUSB_TUSB6010_MODULE)
 	void __iomem		*conf;
 	void __iomem		*conf;
 #endif
 #endif
 
 
@@ -258,7 +260,8 @@ struct musb_hw_ep {
 	struct dma_channel	*tx_channel;
 	struct dma_channel	*tx_channel;
 	struct dma_channel	*rx_channel;
 	struct dma_channel	*rx_channel;
 
 
-#ifdef CONFIG_USB_MUSB_TUSB6010
+#if defined(CONFIG_USB_MUSB_TUSB6010) || \
+	defined(CONFIG_USB_MUSB_TUSB6010_MODULE)
 	/* TUSB has "asynchronous" and "synchronous" dma modes */
 	/* TUSB has "asynchronous" and "synchronous" dma modes */
 	dma_addr_t		fifo_async;
 	dma_addr_t		fifo_async;
 	dma_addr_t		fifo_sync;
 	dma_addr_t		fifo_sync;
@@ -356,7 +359,8 @@ struct musb {
 	void __iomem		*ctrl_base;
 	void __iomem		*ctrl_base;
 	void __iomem		*mregs;
 	void __iomem		*mregs;
 
 
-#ifdef CONFIG_USB_MUSB_TUSB6010
+#if defined(CONFIG_USB_MUSB_TUSB6010) || \
+	defined(CONFIG_USB_MUSB_TUSB6010_MODULE)
 	dma_addr_t		async;
 	dma_addr_t		async;
 	dma_addr_t		sync;
 	dma_addr_t		sync;
 	void __iomem		*sync_va;
 	void __iomem		*sync_va;

+ 3 - 1
drivers/usb/musb/musb_gadget.c

@@ -1856,6 +1856,7 @@ int __init musb_gadget_setup(struct musb *musb)
 
 
 	return 0;
 	return 0;
 err:
 err:
+	musb->g.dev.parent = NULL;
 	device_unregister(&musb->g.dev);
 	device_unregister(&musb->g.dev);
 	return status;
 	return status;
 }
 }
@@ -1863,7 +1864,8 @@ err:
 void musb_gadget_cleanup(struct musb *musb)
 void musb_gadget_cleanup(struct musb *musb)
 {
 {
 	usb_del_gadget_udc(&musb->g);
 	usb_del_gadget_udc(&musb->g);
-	device_unregister(&musb->g.dev);
+	if (musb->g.dev.parent)
+		device_unregister(&musb->g.dev);
 }
 }
 
 
 /*
 /*

+ 4 - 2
drivers/usb/musb/musb_regs.h

@@ -234,7 +234,8 @@
 #define MUSB_TESTMODE		0x0F	/* 8 bit */
 #define MUSB_TESTMODE		0x0F	/* 8 bit */
 
 
 /* Get offset for a given FIFO from musb->mregs */
 /* Get offset for a given FIFO from musb->mregs */
-#ifdef	CONFIG_USB_MUSB_TUSB6010
+#if defined(CONFIG_USB_MUSB_TUSB6010) ||	\
+	defined(CONFIG_USB_MUSB_TUSB6010_MODULE)
 #define MUSB_FIFO_OFFSET(epnum)	(0x200 + ((epnum) * 0x20))
 #define MUSB_FIFO_OFFSET(epnum)	(0x200 + ((epnum) * 0x20))
 #else
 #else
 #define MUSB_FIFO_OFFSET(epnum)	(0x20 + ((epnum) * 4))
 #define MUSB_FIFO_OFFSET(epnum)	(0x20 + ((epnum) * 4))
@@ -295,7 +296,8 @@
 #define MUSB_FLAT_OFFSET(_epnum, _offset)	\
 #define MUSB_FLAT_OFFSET(_epnum, _offset)	\
 	(0x100 + (0x10*(_epnum)) + (_offset))
 	(0x100 + (0x10*(_epnum)) + (_offset))
 
 
-#ifdef CONFIG_USB_MUSB_TUSB6010
+#if defined(CONFIG_USB_MUSB_TUSB6010) ||	\
+	defined(CONFIG_USB_MUSB_TUSB6010_MODULE)
 /* TUSB6010 EP0 configuration register is special */
 /* TUSB6010 EP0 configuration register is special */
 #define MUSB_TUSB_OFFSET(_epnum, _offset)	\
 #define MUSB_TUSB_OFFSET(_epnum, _offset)	\
 	(0x10 + _offset)
 	(0x10 + _offset)

+ 1 - 0
drivers/usb/musb/tusb6010.c

@@ -18,6 +18,7 @@
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/errno.h>
 #include <linux/errno.h>
 #include <linux/init.h>
 #include <linux/init.h>
+#include <linux/prefetch.h>
 #include <linux/usb.h>
 #include <linux/usb.h>
 #include <linux/irq.h>
 #include <linux/irq.h>
 #include <linux/platform_device.h>
 #include <linux/platform_device.h>

+ 1 - 0
drivers/usb/musb/tusb6010_omap.c

@@ -20,6 +20,7 @@
 #include <plat/mux.h>
 #include <plat/mux.h>
 
 
 #include "musb_core.h"
 #include "musb_core.h"
+#include "tusb6010.h"
 
 
 #define to_chdat(c)		((struct tusb_omap_dma_ch *)(c)->private_data)
 #define to_chdat(c)		((struct tusb_omap_dma_ch *)(c)->private_data)
 
 

+ 21 - 17
drivers/usb/musb/ux500_dma.c

@@ -65,7 +65,8 @@ static void ux500_tx_work(struct work_struct *data)
 	struct musb *musb = hw_ep->musb;
 	struct musb *musb = hw_ep->musb;
 	unsigned long flags;
 	unsigned long flags;
 
 
-	DBG(4, "DMA tx transfer done on hw_ep=%d\n", hw_ep->epnum);
+	dev_dbg(musb->controller, "DMA tx transfer done on hw_ep=%d\n",
+		hw_ep->epnum);
 
 
 	spin_lock_irqsave(&musb->lock, flags);
 	spin_lock_irqsave(&musb->lock, flags);
 	ux500_channel->channel.actual_len = ux500_channel->cur_len;
 	ux500_channel->channel.actual_len = ux500_channel->cur_len;
@@ -84,7 +85,8 @@ static void ux500_rx_work(struct work_struct *data)
 	struct musb *musb = hw_ep->musb;
 	struct musb *musb = hw_ep->musb;
 	unsigned long flags;
 	unsigned long flags;
 
 
-	DBG(4, "DMA rx transfer done on hw_ep=%d\n", hw_ep->epnum);
+	dev_dbg(musb->controller, "DMA rx transfer done on hw_ep=%d\n",
+		hw_ep->epnum);
 
 
 	spin_lock_irqsave(&musb->lock, flags);
 	spin_lock_irqsave(&musb->lock, flags);
 	ux500_channel->channel.actual_len = ux500_channel->cur_len;
 	ux500_channel->channel.actual_len = ux500_channel->cur_len;
@@ -116,9 +118,11 @@ static bool ux500_configure_channel(struct dma_channel *channel,
 	enum dma_slave_buswidth addr_width;
 	enum dma_slave_buswidth addr_width;
 	dma_addr_t usb_fifo_addr = (MUSB_FIFO_OFFSET(hw_ep->epnum) +
 	dma_addr_t usb_fifo_addr = (MUSB_FIFO_OFFSET(hw_ep->epnum) +
 					ux500_channel->controller->phy_base);
 					ux500_channel->controller->phy_base);
+	struct musb *musb = ux500_channel->controller->private_data;
 
 
-	DBG(4, "packet_sz=%d, mode=%d, dma_addr=0x%x, len=%d is_tx=%d\n",
-			packet_sz, mode, dma_addr, len, ux500_channel->is_tx);
+	dev_dbg(musb->controller,
+		"packet_sz=%d, mode=%d, dma_addr=0x%x, len=%d is_tx=%d\n",
+		packet_sz, mode, dma_addr, len, ux500_channel->is_tx);
 
 
 	ux500_channel->cur_len = len;
 	ux500_channel->cur_len = len;
 
 
@@ -133,15 +137,13 @@ static bool ux500_configure_channel(struct dma_channel *channel,
 					DMA_SLAVE_BUSWIDTH_4_BYTES;
 					DMA_SLAVE_BUSWIDTH_4_BYTES;
 
 
 	slave_conf.direction = direction;
 	slave_conf.direction = direction;
-	if (direction == DMA_FROM_DEVICE) {
-		slave_conf.src_addr = usb_fifo_addr;
-		slave_conf.src_addr_width = addr_width;
-		slave_conf.src_maxburst = 16;
-	} else {
-		slave_conf.dst_addr = usb_fifo_addr;
-		slave_conf.dst_addr_width = addr_width;
-		slave_conf.dst_maxburst = 16;
-	}
+	slave_conf.src_addr = usb_fifo_addr;
+	slave_conf.src_addr_width = addr_width;
+	slave_conf.src_maxburst = 16;
+	slave_conf.dst_addr = usb_fifo_addr;
+	slave_conf.dst_addr_width = addr_width;
+	slave_conf.dst_maxburst = 16;
+
 	dma_chan->device->device_control(dma_chan, DMA_SLAVE_CONFIG,
 	dma_chan->device->device_control(dma_chan, DMA_SLAVE_CONFIG,
 					     (unsigned long) &slave_conf);
 					     (unsigned long) &slave_conf);
 
 
@@ -166,6 +168,7 @@ static struct dma_channel *ux500_dma_channel_allocate(struct dma_controller *c,
 	struct ux500_dma_controller *controller = container_of(c,
 	struct ux500_dma_controller *controller = container_of(c,
 			struct ux500_dma_controller, controller);
 			struct ux500_dma_controller, controller);
 	struct ux500_dma_channel *ux500_channel = NULL;
 	struct ux500_dma_channel *ux500_channel = NULL;
+	struct musb *musb = controller->private_data;
 	u8 ch_num = hw_ep->epnum - 1;
 	u8 ch_num = hw_ep->epnum - 1;
 	u32 max_ch;
 	u32 max_ch;
 
 
@@ -192,7 +195,7 @@ static struct dma_channel *ux500_dma_channel_allocate(struct dma_controller *c,
 	ux500_channel->hw_ep = hw_ep;
 	ux500_channel->hw_ep = hw_ep;
 	ux500_channel->is_allocated = 1;
 	ux500_channel->is_allocated = 1;
 
 
-	DBG(7, "hw_ep=%d, is_tx=0x%x, channel=%d\n",
+	dev_dbg(musb->controller, "hw_ep=%d, is_tx=0x%x, channel=%d\n",
 		hw_ep->epnum, is_tx, ch_num);
 		hw_ep->epnum, is_tx, ch_num);
 
 
 	return &(ux500_channel->channel);
 	return &(ux500_channel->channel);
@@ -201,8 +204,9 @@ static struct dma_channel *ux500_dma_channel_allocate(struct dma_controller *c,
 static void ux500_dma_channel_release(struct dma_channel *channel)
 static void ux500_dma_channel_release(struct dma_channel *channel)
 {
 {
 	struct ux500_dma_channel *ux500_channel = channel->private_data;
 	struct ux500_dma_channel *ux500_channel = channel->private_data;
+	struct musb *musb = ux500_channel->controller->private_data;
 
 
-	DBG(7, "channel=%d\n", ux500_channel->ch_num);
+	dev_dbg(musb->controller, "channel=%d\n", ux500_channel->ch_num);
 
 
 	if (ux500_channel->is_allocated) {
 	if (ux500_channel->is_allocated) {
 		ux500_channel->is_allocated = 0;
 		ux500_channel->is_allocated = 0;
@@ -252,8 +256,8 @@ static int ux500_dma_channel_abort(struct dma_channel *channel)
 	void __iomem *epio = musb->endpoints[ux500_channel->hw_ep->epnum].regs;
 	void __iomem *epio = musb->endpoints[ux500_channel->hw_ep->epnum].regs;
 	u16 csr;
 	u16 csr;
 
 
-	DBG(4, "channel=%d, is_tx=%d\n", ux500_channel->ch_num,
-						ux500_channel->is_tx);
+	dev_dbg(musb->controller, "channel=%d, is_tx=%d\n",
+		ux500_channel->ch_num, ux500_channel->is_tx);
 
 
 	if (channel->status == MUSB_DMA_STATUS_BUSY) {
 	if (channel->status == MUSB_DMA_STATUS_BUSY) {
 		if (ux500_channel->is_tx) {
 		if (ux500_channel->is_tx) {