mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 00/11] fsl_usb2_udc: A number of bug fixes and cleanups.
@ 2008-07-15 15:24 Will Newton
  2008-07-15 15:24 ` [PATCH 01/11] fsl_usb2_udc: Make dr_ep_setup function static Will Newton
  2008-07-17  9:43 ` [PATCH 00/11] fsl_usb2_udc: A number of bug fixes and cleanups Li Yang
  0 siblings, 2 replies; 17+ messages in thread
From: Will Newton @ 2008-07-15 15:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-usb, leoli, tanya.jiang, gregkh, Will Newton

From: Will Newton <will.newton@gmail.com>

Hi,

These patches fix a couple of small bugs and cleanup parts of the
fsl_usb2_udc USB gadget driver. I've split them up quite finely for ease
of reviewing and to separate functional changes. Any comments would be
appreciated.

I would also appreciate it if someone with real Freescale hardware could
test these changes, I'm testing this driver with a different SoC containing
the same TDI/ARC/ChipIdea IP block.

Thanks,

Will Newton (11):
  fsl_usb2_udc: Make dr_ep_setup function static.
  fsl_usb2_udc: Remove check for udc == NULL in dr_controller_setup.
  fsl_usb2_udc: Fix some sparse warnings and remove redundant code.
  fsl_usb2_udc: Clean up whitespace in errors and warnings.
  fsl_usb2_udc: Clean up whitespace in /proc debugging output.
  fsl_usb2_udc: Initialize spinlock earlier.
  fsl_usb2_udc: Rename the arguments of the fsl_writel macro.
  fsl_usb2_udc: Uninline udc_reset_ep_queue.
  fsl_usb2_udc: Make fsl_queue_td return type void.
  fsl_usb2_udc: Add a wmb before priming endpoint.
  fsl_usb2_udc: Fix oops on probe failure.

 drivers/usb/gadget/fsl_usb2_udc.c |  176 ++++++++++++++++--------------------
 drivers/usb/gadget/fsl_usb2_udc.h |   21 +----
 2 files changed, 80 insertions(+), 117 deletions(-)


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH 01/11] fsl_usb2_udc: Make dr_ep_setup function static.
  2008-07-15 15:24 [PATCH 00/11] fsl_usb2_udc: A number of bug fixes and cleanups Will Newton
@ 2008-07-15 15:24 ` Will Newton
  2008-07-15 15:24   ` [PATCH 02/11] fsl_usb2_udc: Remove check for udc == NULL in dr_controller_setup Will Newton
  2008-07-17  9:43 ` [PATCH 00/11] fsl_usb2_udc: A number of bug fixes and cleanups Li Yang
  1 sibling, 1 reply; 17+ messages in thread
From: Will Newton @ 2008-07-15 15:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-usb, leoli, tanya.jiang, gregkh, Will Newton

From: Will Newton <will.newton@gmail.com>

Make dr_ep_setup function static as it's never used outside this file.

Signed-off-by: Will Newton <will.newton@gmail.com>
---
 drivers/usb/gadget/fsl_usb2_udc.c |    3 ++-
 1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/usb/gadget/fsl_usb2_udc.c b/drivers/usb/gadget/fsl_usb2_udc.c
index 1868754..b2a703e 100644
--- a/drivers/usb/gadget/fsl_usb2_udc.c
+++ b/drivers/usb/gadget/fsl_usb2_udc.c
@@ -315,7 +315,8 @@ static void dr_controller_stop(struct fsl_udc *udc)
 	return;
 }
 
-void dr_ep_setup(unsigned char ep_num, unsigned char dir, unsigned char ep_type)
+static void dr_ep_setup(unsigned char ep_num, unsigned char dir,
+			unsigned char ep_type)
 {
 	unsigned int tmp_epctrl = 0;
 
-- 
1.5.5.2


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH 02/11] fsl_usb2_udc: Remove check for udc == NULL in dr_controller_setup.
  2008-07-15 15:24 ` [PATCH 01/11] fsl_usb2_udc: Make dr_ep_setup function static Will Newton
@ 2008-07-15 15:24   ` Will Newton
  2008-07-15 15:24     ` [PATCH 03/11] fsl_usb2_udc: Fix some sparse warnings and remove redundant code Will Newton
  0 siblings, 1 reply; 17+ messages in thread
From: Will Newton @ 2008-07-15 15:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-usb, leoli, tanya.jiang, gregkh, Will Newton

From: Will Newton <will.newton@gmail.com>

Remove check for udc == NULL in dr_controller_setup. All callers of
this function have already dereferenced udc at some point.

Signed-off-by: Will Newton <will.newton@gmail.com>
---
 drivers/usb/gadget/fsl_usb2_udc.c |    4 ----
 1 files changed, 0 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/gadget/fsl_usb2_udc.c b/drivers/usb/gadget/fsl_usb2_udc.c
index b2a703e..7257d0f 100644
--- a/drivers/usb/gadget/fsl_usb2_udc.c
+++ b/drivers/usb/gadget/fsl_usb2_udc.c
@@ -185,10 +185,6 @@ static int dr_controller_setup(struct fsl_udc *udc)
 	unsigned long timeout;
 #define FSL_UDC_RESET_TIMEOUT 1000
 
-	/* before here, make sure dr_regs has been initialized */
-	if (!udc)
-		return -EINVAL;
-
 	/* Stop and reset the usb controller */
 	tmp = fsl_readl(&dr_regs->usbcmd);
 	tmp &= ~USB_CMD_RUN_STOP;
-- 
1.5.5.2


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH 03/11] fsl_usb2_udc: Fix some sparse warnings and remove redundant code.
  2008-07-15 15:24   ` [PATCH 02/11] fsl_usb2_udc: Remove check for udc == NULL in dr_controller_setup Will Newton
@ 2008-07-15 15:24     ` Will Newton
  2008-07-15 15:24       ` [PATCH 04/11] fsl_usb2_udc: Clean up whitespace in errors and warnings Will Newton
  0 siblings, 1 reply; 17+ messages in thread
From: Will Newton @ 2008-07-15 15:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-usb, leoli, tanya.jiang, gregkh, Will Newton

From: Will Newton <will.newton@gmail.com>

Fix some sparse "integer used as NULL pointer" warnings.
Remove some unnecessary volatiles and static initialization.
Remove some unused struct members and reorder to improve packing.
Remove a few unneeded includes.

Signed-off-by: Will Newton <will.newton@gmail.com>
---
 drivers/usb/gadget/fsl_usb2_udc.c |   28 +++++++++-------------------
 drivers/usb/gadget/fsl_usb2_udc.h |   21 ++-------------------
 2 files changed, 11 insertions(+), 38 deletions(-)

diff --git a/drivers/usb/gadget/fsl_usb2_udc.c b/drivers/usb/gadget/fsl_usb2_udc.c
index 7257d0f..7b898a5 100644
--- a/drivers/usb/gadget/fsl_usb2_udc.c
+++ b/drivers/usb/gadget/fsl_usb2_udc.c
@@ -23,11 +23,8 @@
 #include <linux/ioport.h>
 #include <linux/types.h>
 #include <linux/errno.h>
-#include <linux/delay.h>
-#include <linux/sched.h>
 #include <linux/slab.h>
 #include <linux/init.h>
-#include <linux/timer.h>
 #include <linux/list.h>
 #include <linux/interrupt.h>
 #include <linux/proc_fs.h>
@@ -44,11 +41,9 @@
 
 #include <asm/byteorder.h>
 #include <asm/io.h>
-#include <asm/irq.h>
 #include <asm/system.h>
 #include <asm/unaligned.h>
 #include <asm/dma.h>
-#include <asm/cacheflush.h>
 
 #include "fsl_usb2_udc.h"
 
@@ -61,8 +56,8 @@
 static const char driver_name[] = "fsl-usb2-udc";
 static const char driver_desc[] = DRIVER_DESC;
 
-volatile static struct usb_dr_device *dr_regs = NULL;
-volatile static struct usb_sys_interface *usb_sys_regs = NULL;
+static struct usb_dr_device *dr_regs;
+static struct usb_sys_interface *usb_sys_regs;
 
 /* it is initialized in probe()  */
 static struct fsl_udc *udc_controller = NULL;
@@ -560,7 +555,7 @@ static int fsl_ep_disable(struct usb_ep *_ep)
 	/* nuke all pending requests (does flush) */
 	nuke(ep, -ESHUTDOWN);
 
-	ep->desc = 0;
+	ep->desc = NULL;
 	ep->stopped = 1;
 	spin_unlock_irqrestore(&udc->lock, flags);
 
@@ -1565,9 +1560,6 @@ static void port_change_irq(struct fsl_udc *udc)
 {
 	u32 speed;
 
-	if (udc->bus_reset)
-		udc->bus_reset = 0;
-
 	/* Bus resetting is finished */
 	if (!(fsl_readl(&dr_regs->portsc1) & PORTSCX_PORT_RESET)) {
 		/* Get the speed */
@@ -1675,8 +1667,6 @@ static void reset_irq(struct fsl_udc *udc)
 
 	if (fsl_readl(&dr_regs->portsc1) & PORTSCX_PORT_RESET) {
 		VDBG("Bus reset");
-		/* Bus is reseting */
-		udc->bus_reset = 1;
 		/* Reset all the queues, include XD, dTD, EP queue
 		 * head and TR Queue */
 		reset_queues(udc);
@@ -1796,7 +1786,7 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)
 	/* lock is needed but whether should use this lock or another */
 	spin_lock_irqsave(&udc_controller->lock, flags);
 
-	driver->driver.bus = 0;
+	driver->driver.bus = NULL;
 	/* hook up the driver */
 	udc_controller->driver = driver;
 	udc_controller->gadget.dev.driver = &driver->driver;
@@ -1806,8 +1796,8 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)
 	retval = driver->bind(&udc_controller->gadget);
 	if (retval) {
 		VDBG("bind to %s --> %d", driver->driver.name, retval);
-		udc_controller->gadget.dev.driver = 0;
-		udc_controller->driver = 0;
+		udc_controller->gadget.dev.driver = NULL;
+		udc_controller->driver = NULL;
 		goto out;
 	}
 
@@ -1839,7 +1829,7 @@ int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
 		return -EINVAL;
 
 	if (udc_controller->transceiver)
-		(void)otg_set_peripheral(udc_controller->transceiver, 0);
+		otg_set_peripheral(udc_controller->transceiver, NULL);
 
 	/* stop DR, disable intr */
 	dr_controller_stop(udc_controller);
@@ -1860,8 +1850,8 @@ int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
 
 	/* unbind gadget and unhook driver. */
 	driver->unbind(&udc_controller->gadget);
-	udc_controller->gadget.dev.driver = 0;
-	udc_controller->driver = 0;
+	udc_controller->gadget.dev.driver = NULL;
+	udc_controller->driver = NULL;
 
 	printk("unregistered gadget driver '%s'\r\n", driver->driver.name);
 	return 0;
diff --git a/drivers/usb/gadget/fsl_usb2_udc.h b/drivers/usb/gadget/fsl_usb2_udc.h
index 98b1483..3ba431c 100644
--- a/drivers/usb/gadget/fsl_usb2_udc.h
+++ b/drivers/usb/gadget/fsl_usb2_udc.h
@@ -424,16 +424,6 @@ struct ep_td_struct {
 /* Controller dma boundary */
 #define UDC_DMA_BOUNDARY			0x1000
 
-/* -----------------------------------------------------------------------*/
-/* ##### enum data
-*/
-typedef enum {
-	e_ULPI,
-	e_UTMI_8BIT,
-	e_UTMI_16BIT,
-	e_SERIAL
-} e_PhyInterface;
-
 /*-------------------------------------------------------------------------*/
 
 /* ### driver private data
@@ -469,9 +459,9 @@ struct fsl_ep {
 #define EP_DIR_OUT	0
 
 struct fsl_udc {
-
 	struct usb_gadget gadget;
 	struct usb_gadget_driver *driver;
+	struct completion *done;	/* to make sure release() is done */
 	struct fsl_ep *eps;
 	unsigned int max_ep;
 	unsigned int irq;
@@ -492,20 +482,13 @@ struct fsl_udc {
 	size_t ep_qh_size;		/* size after alignment adjustment*/
 	dma_addr_t ep_qh_dma;		/* dma address of QH */
 
-	u32 max_pipes;		/* Device max pipes */
-	u32 max_use_endpts;	/* Max endpointes to be used */
-	u32 bus_reset;		/* Device is bus reseting */
+	u32 max_pipes;          /* Device max pipes */
 	u32 resume_state;	/* USB state to resume */
 	u32 usb_state;		/* USB current state */
-	u32 usb_next_state;	/* USB next state */
 	u32 ep0_state;		/* Endpoint zero state */
 	u32 ep0_dir;		/* Endpoint zero direction: can be
 				   USB_DIR_IN or USB_DIR_OUT */
-	u32 usb_sof_count;	/* SOF count */
-	u32 errors;		/* USB ERRORs count */
 	u8 device_address;	/* Device USB address */
-
-	struct completion *done;	/* to make sure release() is done */
 };
 
 /*-------------------------------------------------------------------------*/
-- 
1.5.5.2


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH 04/11] fsl_usb2_udc: Clean up whitespace in errors and warnings.
  2008-07-15 15:24     ` [PATCH 03/11] fsl_usb2_udc: Fix some sparse warnings and remove redundant code Will Newton
@ 2008-07-15 15:24       ` Will Newton
  2008-07-15 15:24         ` [PATCH 05/11] fsl_usb2_udc: Clean up whitespace in /proc debugging output Will Newton
  0 siblings, 1 reply; 17+ messages in thread
From: Will Newton @ 2008-07-15 15:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-usb, leoli, tanya.jiang, gregkh, Will Newton

From: Will Newton <will.newton@gmail.com>

VDBG always outputs a trailing \n.

Signed-off-by: Will Newton <will.newton@gmail.com>
---
 drivers/usb/gadget/fsl_usb2_udc.c |   36 ++++++++++++++++++------------------
 1 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/drivers/usb/gadget/fsl_usb2_udc.c b/drivers/usb/gadget/fsl_usb2_udc.c
index 7b898a5..18f4881 100644
--- a/drivers/usb/gadget/fsl_usb2_udc.c
+++ b/drivers/usb/gadget/fsl_usb2_udc.c
@@ -193,7 +193,7 @@ static int dr_controller_setup(struct fsl_udc *udc)
 	timeout = jiffies + FSL_UDC_RESET_TIMEOUT;
 	while (fsl_readl(&dr_regs->usbcmd) & USB_CMD_CTRL_RESET) {
 		if (time_after(jiffies, timeout)) {
-			ERR("udc reset timeout! \n");
+			ERR("udc reset timeout!\n");
 			return -ETIMEDOUT;
 		}
 		cpu_relax();
@@ -702,7 +702,7 @@ static struct ep_td_struct *fsl_build_dtd(struct fsl_req *req, unsigned *length,
 		*is_last = 0;
 
 	if ((*is_last) == 0)
-		VDBG("multi-dtd request!\n");
+		VDBG("multi-dtd request!");
 	/* Fill in the transfer size; set active bit */
 	swap_temp = ((*length << DTD_LENGTH_BIT_POS) | DTD_STATUS_ACTIVE);
 
@@ -765,11 +765,11 @@ fsl_ep_queue(struct usb_ep *_ep, struct usb_request *_req, gfp_t gfp_flags)
 	/* catch various bogus parameters */
 	if (!_req || !req->req.complete || !req->req.buf
 			|| !list_empty(&req->queue)) {
-		VDBG("%s, bad params\n", __func__);
+		VDBG("%s, bad params", __func__);
 		return -EINVAL;
 	}
 	if (unlikely(!_ep || !ep->desc)) {
-		VDBG("%s, bad ep\n", __func__);
+		VDBG("%s, bad ep", __func__);
 		return -EINVAL;
 	}
 	if (ep->desc->bmAttributes == USB_ENDPOINT_XFER_ISOC) {
@@ -1061,7 +1061,7 @@ static int fsl_vbus_session(struct usb_gadget *gadget, int is_active)
 
 	udc = container_of(gadget, struct fsl_udc, gadget);
 	spin_lock_irqsave(&udc->lock, flags);
-	VDBG("VBUS %s\n", is_active ? "on" : "off");
+	VDBG("VBUS %s", is_active ? "on" : "off");
 	udc->vbus_active = (is_active != 0);
 	if (can_pullup(udc))
 		fsl_writel((fsl_readl(&dr_regs->usbcmd) | USB_CMD_RUN_STOP),
@@ -1161,7 +1161,7 @@ static int ep0_prime_status(struct fsl_udc *udc, int direction)
 		return -ENOMEM;
 
 	if (status)
-		ERR("Can't queue ep0 status request \n");
+		ERR("Can't queue ep0 status request\n");
 	list_add_tail(&req->queue, &ep->queue);
 
 	return status;
@@ -1247,7 +1247,7 @@ static void ch9getstatus(struct fsl_udc *udc, u8 request_type, u16 value,
 		goto stall;
 
 	if (status) {
-		ERR("Can't respond to getstatus request \n");
+		ERR("Can't respond to getstatus request\n");
 		goto stall;
 	}
 	list_add_tail(&req->queue, &ep->queue);
@@ -1389,7 +1389,7 @@ static void ep0_req_complete(struct fsl_udc *udc, struct fsl_ep *ep0,
 		udc->ep0_state = WAIT_FOR_SETUP;
 		break;
 	case WAIT_FOR_SETUP:
-		ERR("Unexpect ep0 packets \n");
+		ERR("Unexpect ep0 packets\n");
 		break;
 	default:
 		ep0stall(udc);
@@ -1468,7 +1468,7 @@ static int process_ep_req(struct fsl_udc *udc, int pipe,
 				status = -EILSEQ;
 				break;
 			} else
-				ERR("Unknown error has occured (0x%x)!\r\n",
+				ERR("Unknown error has occured (0x%x)!\n",
 					errors);
 
 		} else if (le32_to_cpu(curr_td->size_ioc_sts)
@@ -1487,7 +1487,7 @@ static int process_ep_req(struct fsl_udc *udc, int pipe,
 			}
 		} else {
 			td_complete++;
-			VDBG("dTD transmitted successful ");
+			VDBG("dTD transmitted successful");
 		}
 
 		if (j != curr_req->dtd_count - 1)
@@ -1755,7 +1755,7 @@ static irqreturn_t fsl_udc_irq(int irq, void *_udc)
 	}
 
 	if (irq_src & (USB_STS_ERR | USB_STS_SYS_ERR)) {
-		VDBG("Error IRQ %x ", irq_src);
+		VDBG("Error IRQ %x", irq_src);
 	}
 
 	spin_unlock_irqrestore(&udc->lock, flags);
@@ -1806,12 +1806,12 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)
 	udc_controller->usb_state = USB_STATE_ATTACHED;
 	udc_controller->ep0_state = WAIT_FOR_SETUP;
 	udc_controller->ep0_dir = 0;
-	printk(KERN_INFO "%s: bind to driver %s \n",
+	printk(KERN_INFO "%s: bind to driver %s\n",
 			udc_controller->gadget.name, driver->driver.name);
 
 out:
 	if (retval)
-		printk("retval %d \n", retval);
+		printk("gadget driver register failed %d\n", retval);
 	return retval;
 }
 EXPORT_SYMBOL(usb_gadget_register_driver);
@@ -1853,7 +1853,7 @@ int usb_gadget_unregister_driver(struct usb_gadget_driver *driver)
 	udc_controller->gadget.dev.driver = NULL;
 	udc_controller->driver = NULL;
 
-	printk("unregistered gadget driver '%s'\r\n", driver->driver.name);
+	printk("unregistered gadget driver '%s'\n", driver->driver.name);
 	return 0;
 }
 EXPORT_SYMBOL(usb_gadget_unregister_driver);
@@ -2241,7 +2241,7 @@ static int __init fsl_udc_probe(struct platform_device *pdev)
 	u32 dccparams;
 
 	if (strcmp(pdev->name, driver_name)) {
-		VDBG("Wrong device\n");
+		VDBG("Wrong device");
 		return -ENODEV;
 	}
 
@@ -2259,7 +2259,7 @@ static int __init fsl_udc_probe(struct platform_device *pdev)
 
 	if (!request_mem_region(res->start, res->end - res->start + 1,
 				driver_name)) {
-		ERR("request mem region for %s failed \n", pdev->name);
+		ERR("request mem region for %s failed\n", pdev->name);
 		kfree(udc_controller);
 		return -EBUSY;
 	}
@@ -2293,7 +2293,7 @@ static int __init fsl_udc_probe(struct platform_device *pdev)
 	ret = request_irq(udc_controller->irq, fsl_udc_irq, IRQF_SHARED,
 			driver_name, udc_controller);
 	if (ret != 0) {
-		ERR("cannot request irq %d err %d \n",
+		ERR("cannot request irq %d err %d\n",
 				udc_controller->irq, ret);
 		goto err2;
 	}
@@ -2456,7 +2456,7 @@ module_init(udc_init);
 static void __exit udc_exit(void)
 {
 	platform_driver_unregister(&udc_driver);
-	printk("%s unregistered \n", driver_desc);
+	printk("%s unregistered\n", driver_desc);
 }
 
 module_exit(udc_exit);
-- 
1.5.5.2


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH 05/11] fsl_usb2_udc: Clean up whitespace in /proc debugging output.
  2008-07-15 15:24       ` [PATCH 04/11] fsl_usb2_udc: Clean up whitespace in errors and warnings Will Newton
@ 2008-07-15 15:24         ` Will Newton
  2008-07-15 15:24           ` [PATCH 06/11] fsl_usb2_udc: Initialize spinlock earlier Will Newton
  0 siblings, 1 reply; 17+ messages in thread
From: Will Newton @ 2008-07-15 15:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-usb, leoli, tanya.jiang, gregkh, Will Newton

From: Will Newton <will.newton@gmail.com>

Missing spaces were causing the /proc debugging output to be rather
unreadable.

Signed-off-by: Will Newton <will.newton@gmail.com>
---
 drivers/usb/gadget/fsl_usb2_udc.c |   35 ++++++++++++++++++-----------------
 1 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/drivers/usb/gadget/fsl_usb2_udc.c b/drivers/usb/gadget/fsl_usb2_udc.c
index 18f4881..130a59d 100644
--- a/drivers/usb/gadget/fsl_usb2_udc.c
+++ b/drivers/usb/gadget/fsl_usb2_udc.c
@@ -1909,7 +1909,7 @@ static int fsl_proc_read(char *page, char **start, off_t off, int count,
 	tmp_reg = fsl_readl(&dr_regs->usbsts);
 	t = scnprintf(next, size,
 			"USB Status Reg:\n"
-			"Dr Suspend: %d" "Reset Received: %d" "System Error: %s"
+			"Dr Suspend: %d Reset Received: %d System Error: %s "
 			"USB Error Interrupt: %s\n\n",
 			(tmp_reg & USB_STS_SUSPEND) ? 1 : 0,
 			(tmp_reg & USB_STS_RESET) ? 1 : 0,
@@ -1921,11 +1921,11 @@ static int fsl_proc_read(char *page, char **start, off_t off, int count,
 	tmp_reg = fsl_readl(&dr_regs->usbintr);
 	t = scnprintf(next, size,
 			"USB Intrrupt Enable Reg:\n"
-			"Sleep Enable: %d" "SOF Received Enable: %d"
+			"Sleep Enable: %d SOF Received Enable: %d "
 			"Reset Enable: %d\n"
-			"System Error Enable: %d"
+			"System Error Enable: %d "
 			"Port Change Dectected Enable: %d\n"
-			"USB Error Intr Enable: %d" "USB Intr Enable: %d\n\n",
+			"USB Error Intr Enable: %d USB Intr Enable: %d\n\n",
 			(tmp_reg & USB_INTR_DEVICE_SUSPEND) ? 1 : 0,
 			(tmp_reg & USB_INTR_SOF_EN) ? 1 : 0,
 			(tmp_reg & USB_INTR_RESET_EN) ? 1 : 0,
@@ -1938,21 +1938,21 @@ static int fsl_proc_read(char *page, char **start, off_t off, int count,
 
 	tmp_reg = fsl_readl(&dr_regs->frindex);
 	t = scnprintf(next, size,
-			"USB Frame Index Reg:" "Frame Number is 0x%x\n\n",
+			"USB Frame Index Reg: Frame Number is 0x%x\n\n",
 			(tmp_reg & USB_FRINDEX_MASKS));
 	size -= t;
 	next += t;
 
 	tmp_reg = fsl_readl(&dr_regs->deviceaddr);
 	t = scnprintf(next, size,
-			"USB Device Address Reg:" "Device Addr is 0x%x\n\n",
+			"USB Device Address Reg: Device Addr is 0x%x\n\n",
 			(tmp_reg & USB_DEVICE_ADDRESS_MASK));
 	size -= t;
 	next += t;
 
 	tmp_reg = fsl_readl(&dr_regs->endpointlistaddr);
 	t = scnprintf(next, size,
-			"USB Endpoint List Address Reg:"
+			"USB Endpoint List Address Reg: "
 			"Device Addr is 0x%x\n\n",
 			(tmp_reg & USB_EP_LIST_ADDRESS_MASK));
 	size -= t;
@@ -1961,11 +1961,12 @@ static int fsl_proc_read(char *page, char **start, off_t off, int count,
 	tmp_reg = fsl_readl(&dr_regs->portsc1);
 	t = scnprintf(next, size,
 		"USB Port Status&Control Reg:\n"
-		"Port Transceiver Type : %s" "Port Speed: %s \n"
-		"PHY Low Power Suspend: %s" "Port Reset: %s"
-		"Port Suspend Mode: %s \n" "Over-current Change: %s"
+		"Port Transceiver Type : %s Port Speed: %s\n"
+		"PHY Low Power Suspend: %s Port Reset: %s "
+		"Port Suspend Mode: %s\n"
+		"Over-current Change: %s "
 		"Port Enable/Disable Change: %s\n"
-		"Port Enabled/Disabled: %s"
+		"Port Enabled/Disabled: %s "
 		"Current Connect Status: %s\n\n", ( {
 			char *s;
 			switch (tmp_reg & PORTSCX_PTS_FSLS) {
@@ -2010,7 +2011,7 @@ static int fsl_proc_read(char *page, char **start, off_t off, int count,
 
 	tmp_reg = fsl_readl(&dr_regs->usbmode);
 	t = scnprintf(next, size,
-			"USB Mode Reg:" "Controller Mode is : %s\n\n", ( {
+			"USB Mode Reg: Controller Mode is: %s\n\n", ( {
 				char *s;
 				switch (tmp_reg & USB_MODE_CTRL_MODE_HOST) {
 				case USB_MODE_CTRL_MODE_IDLE:
@@ -2029,7 +2030,7 @@ static int fsl_proc_read(char *page, char **start, off_t off, int count,
 
 	tmp_reg = fsl_readl(&dr_regs->endptsetupstat);
 	t = scnprintf(next, size,
-			"Endpoint Setup Status Reg:" "SETUP on ep 0x%x\n\n",
+			"Endpoint Setup Status Reg: SETUP on ep 0x%x\n\n",
 			(tmp_reg & EP_SETUP_STATUS_MASK));
 	size -= t;
 	next += t;
@@ -2042,12 +2043,12 @@ static int fsl_proc_read(char *page, char **start, off_t off, int count,
 		next += t;
 	}
 	tmp_reg = fsl_readl(&dr_regs->endpointprime);
-	t = scnprintf(next, size, "EP Prime Reg = [0x%x]\n", tmp_reg);
+	t = scnprintf(next, size, "EP Prime Reg = [0x%x]\n\n", tmp_reg);
 	size -= t;
 	next += t;
 
 	tmp_reg = usb_sys_regs->snoop1;
-	t = scnprintf(next, size, "\nSnoop1 Reg : = [0x%x]\n\n", tmp_reg);
+	t = scnprintf(next, size, "Snoop1 Reg : = [0x%x]\n\n", tmp_reg);
 	size -= t;
 	next += t;
 
@@ -2071,7 +2072,7 @@ static int fsl_proc_read(char *page, char **start, off_t off, int count,
 	} else {
 		list_for_each_entry(req, &ep->queue, queue) {
 			t = scnprintf(next, size,
-				"req %p actual 0x%x length 0x%x  buf %p\n",
+				"req %p actual 0x%x length 0x%x buf %p\n",
 				&req->req, req->req.actual,
 				req->req.length, req->req.buf);
 			size -= t;
@@ -2097,7 +2098,7 @@ static int fsl_proc_read(char *page, char **start, off_t off, int count,
 			} else {
 				list_for_each_entry(req, &ep->queue, queue) {
 					t = scnprintf(next, size,
-						"req %p actual 0x%x length"
+						"req %p actual 0x%x length "
 						"0x%x  buf %p\n",
 						&req->req, req->req.actual,
 						req->req.length, req->req.buf);
-- 
1.5.5.2


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH 06/11] fsl_usb2_udc: Initialize spinlock earlier.
  2008-07-15 15:24         ` [PATCH 05/11] fsl_usb2_udc: Clean up whitespace in /proc debugging output Will Newton
@ 2008-07-15 15:24           ` Will Newton
  2008-07-15 15:24             ` [PATCH 07/11] fsl_usb2_udc: Rename the arguments of the fsl_writel macro Will Newton
  0 siblings, 1 reply; 17+ messages in thread
From: Will Newton @ 2008-07-15 15:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-usb, leoli, tanya.jiang, gregkh, Will Newton

From: Will Newton <will.newton@gmail.com>

Move spinlock initialization earlier so we can turn shared irq handler
debugging on safely.

Signed-off-by: Will Newton <will.newton@gmail.com>
---
 drivers/usb/gadget/fsl_usb2_udc.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/drivers/usb/gadget/fsl_usb2_udc.c b/drivers/usb/gadget/fsl_usb2_udc.c
index 130a59d..e7bdec0 100644
--- a/drivers/usb/gadget/fsl_usb2_udc.c
+++ b/drivers/usb/gadget/fsl_usb2_udc.c
@@ -2190,7 +2190,6 @@ static int __init struct_udc_setup(struct fsl_udc *udc,
 	udc->usb_state = USB_STATE_POWERED;
 	udc->ep0_dir = 0;
 	udc->remote_wakeup = 0;	/* default to 0 on reset */
-	spin_lock_init(&udc->lock);
 
 	return 0;
 }
@@ -2252,6 +2251,9 @@ static int __init fsl_udc_probe(struct platform_device *pdev)
 		return -ENOMEM;
 	}
 
+	spin_lock_init(&udc_controller->lock);
+	udc_controller->stopped = 1;
+
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	if (!res) {
 		kfree(udc_controller);
-- 
1.5.5.2


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH 07/11] fsl_usb2_udc: Rename the arguments of the fsl_writel macro.
  2008-07-15 15:24           ` [PATCH 06/11] fsl_usb2_udc: Initialize spinlock earlier Will Newton
@ 2008-07-15 15:24             ` Will Newton
  2008-07-15 15:24               ` [PATCH 08/11] fsl_usb2_udc: Uninline udc_reset_ep_queue Will Newton
  0 siblings, 1 reply; 17+ messages in thread
From: Will Newton @ 2008-07-15 15:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-usb, leoli, tanya.jiang, gregkh, Will Newton

From: Will Newton <will.newton@gmail.com>

Rename the arguments of the fsl_writel macro to match their use.
Remove a couple of unnecessary prototypes.

Signed-off-by: Will Newton <will.newton@gmail.com>
---
 drivers/usb/gadget/fsl_usb2_udc.c |    6 ++----
 1 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/usb/gadget/fsl_usb2_udc.c b/drivers/usb/gadget/fsl_usb2_udc.c
index e7bdec0..4b452bd 100644
--- a/drivers/usb/gadget/fsl_usb2_udc.c
+++ b/drivers/usb/gadget/fsl_usb2_udc.c
@@ -71,16 +71,14 @@ fsl_ep0_desc = {
 	.wMaxPacketSize =	USB_MAX_CTRL_PAYLOAD,
 };
 
-static int fsl_udc_suspend(struct platform_device *pdev, pm_message_t state);
-static int fsl_udc_resume(struct platform_device *pdev);
 static void fsl_ep_fifo_flush(struct usb_ep *_ep);
 
 #ifdef CONFIG_PPC32
 #define fsl_readl(addr)		in_le32(addr)
-#define fsl_writel(addr, val32) out_le32(val32, addr)
+#define fsl_writel(val32, addr) out_le32(addr, val32)
 #else
 #define fsl_readl(addr)		readl(addr)
-#define fsl_writel(addr, val32) writel(addr, val32)
+#define fsl_writel(val32, addr) writel(val32, addr)
 #endif
 
 /********************************************************************
-- 
1.5.5.2


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH 08/11] fsl_usb2_udc: Uninline udc_reset_ep_queue.
  2008-07-15 15:24             ` [PATCH 07/11] fsl_usb2_udc: Rename the arguments of the fsl_writel macro Will Newton
@ 2008-07-15 15:24               ` Will Newton
  2008-07-15 15:24                 ` [PATCH 09/11] fsl_usb2_udc: Make fsl_queue_td return type void Will Newton
  0 siblings, 1 reply; 17+ messages in thread
From: Will Newton @ 2008-07-15 15:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-usb, leoli, tanya.jiang, gregkh, Will Newton

From: Will Newton <will.newton@gmail.com>

Uninline udc_reset_ep_queue and remove it's unused return value.

Signed-off-by: Will Newton <will.newton@gmail.com>
---
 drivers/usb/gadget/fsl_usb2_udc.c |   10 +++-------
 1 files changed, 3 insertions(+), 7 deletions(-)

diff --git a/drivers/usb/gadget/fsl_usb2_udc.c b/drivers/usb/gadget/fsl_usb2_udc.c
index 4b452bd..a6757c9 100644
--- a/drivers/usb/gadget/fsl_usb2_udc.c
+++ b/drivers/usb/gadget/fsl_usb2_udc.c
@@ -1165,16 +1165,12 @@ static int ep0_prime_status(struct fsl_udc *udc, int direction)
 	return status;
 }
 
-static inline int udc_reset_ep_queue(struct fsl_udc *udc, u8 pipe)
+static void udc_reset_ep_queue(struct fsl_udc *udc, u8 pipe)
 {
 	struct fsl_ep *ep = get_ep_by_pipe(udc, pipe);
 
-	if (!ep->name)
-		return 0;
-
-	nuke(ep, -ESHUTDOWN);
-
-	return 0;
+	if (ep->name)
+		nuke(ep, -ESHUTDOWN);
 }
 
 /*
-- 
1.5.5.2


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH 09/11] fsl_usb2_udc: Make fsl_queue_td return type void.
  2008-07-15 15:24               ` [PATCH 08/11] fsl_usb2_udc: Uninline udc_reset_ep_queue Will Newton
@ 2008-07-15 15:24                 ` Will Newton
  2008-07-15 15:24                   ` [PATCH 10/11] fsl_usb2_udc: Add a wmb before priming endpoint Will Newton
  0 siblings, 1 reply; 17+ messages in thread
From: Will Newton @ 2008-07-15 15:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-usb, leoli, tanya.jiang, gregkh, Will Newton

From: Will Newton <will.newton@gmail.com>

fsl_queue_td always returns 0. Make it void and remove checks for non-zero
return in callers.

Signed-off-by: Will Newton <will.newton@gmail.com>
---
 drivers/usb/gadget/fsl_usb2_udc.c |   19 +++++--------------
 1 files changed, 5 insertions(+), 14 deletions(-)

diff --git a/drivers/usb/gadget/fsl_usb2_udc.c b/drivers/usb/gadget/fsl_usb2_udc.c
index a6757c9..81cba99 100644
--- a/drivers/usb/gadget/fsl_usb2_udc.c
+++ b/drivers/usb/gadget/fsl_usb2_udc.c
@@ -592,7 +592,7 @@ static void fsl_free_request(struct usb_ep *_ep, struct usb_request *_req)
 }
 
 /*-------------------------------------------------------------------------*/
-static int fsl_queue_td(struct fsl_ep *ep, struct fsl_req *req)
+static void fsl_queue_td(struct fsl_ep *ep, struct fsl_req *req)
 {
 	int i = ep_index(ep) * 2 + ep_is_in(ep);
 	u32 temp, bitmask, tmp_stat;
@@ -649,7 +649,7 @@ static int fsl_queue_td(struct fsl_ep *ep, struct fsl_req *req)
 		: (1 << (ep_index(ep)));
 	fsl_writel(temp, &dr_regs->endpointprime);
 out:
-	return 0;
+	return;
 }
 
 /* Fill in the dTD structure
@@ -1136,7 +1136,6 @@ static int ep0_prime_status(struct fsl_udc *udc, int direction)
 {
 	struct fsl_req *req = udc->status_req;
 	struct fsl_ep *ep;
-	int status = 0;
 
 	if (direction == EP_DIR_IN)
 		udc->ep0_dir = USB_DIR_IN;
@@ -1154,15 +1153,13 @@ static int ep0_prime_status(struct fsl_udc *udc, int direction)
 	req->dtd_count = 0;
 
 	if (fsl_req_to_dtd(req) == 0)
-		status = fsl_queue_td(ep, req);
+		fsl_queue_td(ep, req);
 	else
 		return -ENOMEM;
 
-	if (status)
-		ERR("Can't queue ep0 status request\n");
 	list_add_tail(&req->queue, &ep->queue);
 
-	return status;
+	return 0;
 }
 
 static void udc_reset_ep_queue(struct fsl_udc *udc, u8 pipe)
@@ -1194,10 +1191,8 @@ static void ch9getstatus(struct fsl_udc *udc, u8 request_type, u16 value,
 		u16 index, u16 length)
 {
 	u16 tmp = 0;		/* Status, cpu endian */
-
 	struct fsl_req *req;
 	struct fsl_ep *ep;
-	int status = 0;
 
 	ep = &udc->eps[0];
 
@@ -1236,14 +1231,10 @@ static void ch9getstatus(struct fsl_udc *udc, u8 request_type, u16 value,
 
 	/* prime the data phase */
 	if ((fsl_req_to_dtd(req) == 0))
-		status = fsl_queue_td(ep, req);
+		fsl_queue_td(ep, req);
 	else			/* no mem */
 		goto stall;
 
-	if (status) {
-		ERR("Can't respond to getstatus request\n");
-		goto stall;
-	}
 	list_add_tail(&req->queue, &ep->queue);
 	udc->ep0_state = DATA_STATE_XMIT;
 	return;
-- 
1.5.5.2


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH 10/11] fsl_usb2_udc: Add a wmb before priming endpoint.
  2008-07-15 15:24                 ` [PATCH 09/11] fsl_usb2_udc: Make fsl_queue_td return type void Will Newton
@ 2008-07-15 15:24                   ` Will Newton
  2008-07-15 15:24                     ` [PATCH 11/11] fsl_usb2_udc: Fix oops on probe failure Will Newton
  0 siblings, 1 reply; 17+ messages in thread
From: Will Newton @ 2008-07-15 15:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-usb, leoli, tanya.jiang, gregkh, Will Newton

From: Will Newton <will.newton@gmail.com>

Add a wmb to fsl_queue_td before priming the endpoint. This ensures that the
modifications to the QH are seen by the hardware.

Added comment as suggested by Felipe Balbi.

Signed-off-by: Will Newton <will.newton@gmail.com>
---
 drivers/usb/gadget/fsl_usb2_udc.c |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/drivers/usb/gadget/fsl_usb2_udc.c b/drivers/usb/gadget/fsl_usb2_udc.c
index 81cba99..15b7cea 100644
--- a/drivers/usb/gadget/fsl_usb2_udc.c
+++ b/drivers/usb/gadget/fsl_usb2_udc.c
@@ -643,6 +643,9 @@ static void fsl_queue_td(struct fsl_ep *ep, struct fsl_req *req)
 			| EP_QUEUE_HEAD_STATUS_HALT));
 	dQH->size_ioc_int_sts &= temp;
 
+	/* Ensure that updates to the QH will occure before priming. */
+	wmb();
+
 	/* Prime endpoint by writing 1 to ENDPTPRIME */
 	temp = ep_is_in(ep)
 		? (1 << (ep_index(ep) + 16))
-- 
1.5.5.2


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH 11/11] fsl_usb2_udc: Fix oops on probe failure.
  2008-07-15 15:24                   ` [PATCH 10/11] fsl_usb2_udc: Add a wmb before priming endpoint Will Newton
@ 2008-07-15 15:24                     ` Will Newton
  0 siblings, 0 replies; 17+ messages in thread
From: Will Newton @ 2008-07-15 15:24 UTC (permalink / raw)
  To: linux-kernel; +Cc: linux-usb, leoli, tanya.jiang, gregkh, Will Newton

From: Will Newton <will.newton@gmail.com>

In some circumstances when fsl_udc_probe fails udc_controller is freed but
the pointer remains non-NULL. fsl_udc_remove will then try and teardown
the partly initialized and freed controller structure resulting in an oops.
This patch ensures udc_controller is either NULL or fully initialized after
fsl_udc_probe.

Signed-off-by: Will Newton <will.newton@gmail.com>
---
 drivers/usb/gadget/fsl_usb2_udc.c |   32 +++++++++++++++++---------------
 1 files changed, 17 insertions(+), 15 deletions(-)

diff --git a/drivers/usb/gadget/fsl_usb2_udc.c b/drivers/usb/gadget/fsl_usb2_udc.c
index 15b7cea..f3bfe97 100644
--- a/drivers/usb/gadget/fsl_usb2_udc.c
+++ b/drivers/usb/gadget/fsl_usb2_udc.c
@@ -2244,21 +2244,21 @@ static int __init fsl_udc_probe(struct platform_device *pdev)
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	if (!res) {
-		kfree(udc_controller);
-		return -ENXIO;
+		ret = -ENXIO;
+		goto err_kfree;
 	}
 
 	if (!request_mem_region(res->start, res->end - res->start + 1,
 				driver_name)) {
 		ERR("request mem region for %s failed\n", pdev->name);
-		kfree(udc_controller);
-		return -EBUSY;
+		ret = -EBUSY;
+		goto err_kfree;
 	}
 
 	dr_regs = ioremap(res->start, res->end - res->start + 1);
 	if (!dr_regs) {
 		ret = -ENOMEM;
-		goto err1;
+		goto err_release_mem_region;
 	}
 
 	usb_sys_regs = (struct usb_sys_interface *)
@@ -2269,7 +2269,7 @@ static int __init fsl_udc_probe(struct platform_device *pdev)
 	if (!(dccparams & DCCPARAMS_DC)) {
 		ERR("This SOC doesn't support device role\n");
 		ret = -ENODEV;
-		goto err2;
+		goto err_iounmap;
 	}
 	/* Get max device endpoints */
 	/* DEN is bidirectional ep number, max_ep doubles the number */
@@ -2278,7 +2278,7 @@ static int __init fsl_udc_probe(struct platform_device *pdev)
 	udc_controller->irq = platform_get_irq(pdev, 0);
 	if (!udc_controller->irq) {
 		ret = -ENODEV;
-		goto err2;
+		goto err_iounmap;
 	}
 
 	ret = request_irq(udc_controller->irq, fsl_udc_irq, IRQF_SHARED,
@@ -2286,14 +2286,14 @@ static int __init fsl_udc_probe(struct platform_device *pdev)
 	if (ret != 0) {
 		ERR("cannot request irq %d err %d\n",
 				udc_controller->irq, ret);
-		goto err2;
+		goto err_iounmap;
 	}
 
 	/* Initialize the udc structure including QH member and other member */
 	if (struct_udc_setup(udc_controller, pdev)) {
 		ERR("Can't initialize udc data structure\n");
 		ret = -ENOMEM;
-		goto err3;
+		goto err_free_irq;
 	}
 
 	/* initialize usb hw reg except for regs for EP,
@@ -2314,7 +2314,7 @@ static int __init fsl_udc_probe(struct platform_device *pdev)
 	udc_controller->gadget.dev.parent = &pdev->dev;
 	ret = device_register(&udc_controller->gadget.dev);
 	if (ret < 0)
-		goto err3;
+		goto err_free_irq;
 
 	/* setup QH and epctrl for ep0 */
 	ep0_setup(udc_controller);
@@ -2344,20 +2344,22 @@ static int __init fsl_udc_probe(struct platform_device *pdev)
 			DTD_ALIGNMENT, UDC_DMA_BOUNDARY);
 	if (udc_controller->td_pool == NULL) {
 		ret = -ENOMEM;
-		goto err4;
+		goto err_unregister;
 	}
 	create_proc_file();
 	return 0;
 
-err4:
+err_unregister:
 	device_unregister(&udc_controller->gadget.dev);
-err3:
+err_free_irq:
 	free_irq(udc_controller->irq, udc_controller);
-err2:
+err_iounmap:
 	iounmap(dr_regs);
-err1:
+err_release_mem_region:
 	release_mem_region(res->start, res->end - res->start + 1);
+err_kfree:
 	kfree(udc_controller);
+	udc_controller = NULL;
 	return ret;
 }
 
-- 
1.5.5.2


^ permalink raw reply	[flat|nested] 17+ messages in thread

* RE: [PATCH 00/11] fsl_usb2_udc: A number of bug fixes and cleanups.
  2008-07-15 15:24 [PATCH 00/11] fsl_usb2_udc: A number of bug fixes and cleanups Will Newton
  2008-07-15 15:24 ` [PATCH 01/11] fsl_usb2_udc: Make dr_ep_setup function static Will Newton
@ 2008-07-17  9:43 ` Li Yang
  2008-07-17  9:47   ` Will Newton
  2008-08-08 10:13   ` Will Newton
  1 sibling, 2 replies; 17+ messages in thread
From: Li Yang @ 2008-07-17  9:43 UTC (permalink / raw)
  To: Will Newton, linux-kernel; +Cc: linux-usb, Jiang Bo, gregkh, Will Newton

> -----Original Message-----
> From: Will Newton [mailto:will.newton@imgtec.com] 
> Sent: Tuesday, July 15, 2008 11:25 PM
> To: linux-kernel@vger.kernel.org
> Cc: linux-usb@vger.kernel.org; Li Yang; Jiang Bo; 
> gregkh@suse.de; Will Newton
> Subject: [PATCH 00/11] fsl_usb2_udc: A number of bug fixes 
> and cleanups.
> 
> From: Will Newton <will.newton@gmail.com>
> 
> Hi,
> 
> These patches fix a couple of small bugs and cleanup parts of 
> the fsl_usb2_udc USB gadget driver. I've split them up quite 
> finely for ease of reviewing and to separate functional 
> changes. Any comments would be appreciated.
> 
> I would also appreciate it if someone with real Freescale 
> hardware could test these changes, I'm testing this driver 
> with a different SoC containing the same TDI/ARC/ChipIdea IP block.

Thanks for the patches.  Looks like they are ok, but I still need to
test them later.

What's the SoC you have tested with the driver?  Maybe you could also
update the Kconfig for that.

- Leo
> 
> Thanks,
> 
> Will Newton (11):
>   fsl_usb2_udc: Make dr_ep_setup function static.
>   fsl_usb2_udc: Remove check for udc == NULL in dr_controller_setup.
>   fsl_usb2_udc: Fix some sparse warnings and remove redundant code.
>   fsl_usb2_udc: Clean up whitespace in errors and warnings.
>   fsl_usb2_udc: Clean up whitespace in /proc debugging output.
>   fsl_usb2_udc: Initialize spinlock earlier.
>   fsl_usb2_udc: Rename the arguments of the fsl_writel macro.
>   fsl_usb2_udc: Uninline udc_reset_ep_queue.
>   fsl_usb2_udc: Make fsl_queue_td return type void.
>   fsl_usb2_udc: Add a wmb before priming endpoint.
>   fsl_usb2_udc: Fix oops on probe failure.
> 
>  drivers/usb/gadget/fsl_usb2_udc.c |  176 
> ++++++++++++++++--------------------
>  drivers/usb/gadget/fsl_usb2_udc.h |   21 +----
>  2 files changed, 80 insertions(+), 117 deletions(-)
> 
> -
> This message is subject to Imagination Technologies' e-mail 
> terms: http://www.imgtec.com/e-mail.htm
> -
> 
> 

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 00/11] fsl_usb2_udc: A number of bug fixes and cleanups.
  2008-07-17  9:43 ` [PATCH 00/11] fsl_usb2_udc: A number of bug fixes and cleanups Li Yang
@ 2008-07-17  9:47   ` Will Newton
  2008-08-08 10:13   ` Will Newton
  1 sibling, 0 replies; 17+ messages in thread
From: Will Newton @ 2008-07-17  9:47 UTC (permalink / raw)
  To: Li Yang; +Cc: linux-kernel, linux-usb, Jiang Bo, gregkh

On Thu, Jul 17, 2008 at 10:43 AM, Li Yang <LeoLi@freescale.com> wrote:
>> -----Original Message-----
>> From: Will Newton [mailto:will.newton@imgtec.com]
>> Sent: Tuesday, July 15, 2008 11:25 PM
>> To: linux-kernel@vger.kernel.org
>> Cc: linux-usb@vger.kernel.org; Li Yang; Jiang Bo;
>> gregkh@suse.de; Will Newton
>> Subject: [PATCH 00/11] fsl_usb2_udc: A number of bug fixes
>> and cleanups.
>>
>> From: Will Newton <will.newton@gmail.com>
>>
>> Hi,
>>
>> These patches fix a couple of small bugs and cleanup parts of
>> the fsl_usb2_udc USB gadget driver. I've split them up quite
>> finely for ease of reviewing and to separate functional
>> changes. Any comments would be appreciated.
>>
>> I would also appreciate it if someone with real Freescale
>> hardware could test these changes, I'm testing this driver
>> with a different SoC containing the same TDI/ARC/ChipIdea IP block.
>
> Thanks for the patches.  Looks like they are ok, but I still need to
> test them later.
>
> What's the SoC you have tested with the driver?  Maybe you could also
> update the Kconfig for that.

It's actually one of these:

http://www.frontier-silicon.com/products/chips/chorus2.htm

Support for which is not yet in the mainline kernel. Kconfig updates
should follow when the SoC support is merged but I hope these patches
all make sense for any chip using this IP.

> - Leo
>>
>> Thanks,
>>
>> Will Newton (11):
>>   fsl_usb2_udc: Make dr_ep_setup function static.
>>   fsl_usb2_udc: Remove check for udc == NULL in dr_controller_setup.
>>   fsl_usb2_udc: Fix some sparse warnings and remove redundant code.
>>   fsl_usb2_udc: Clean up whitespace in errors and warnings.
>>   fsl_usb2_udc: Clean up whitespace in /proc debugging output.
>>   fsl_usb2_udc: Initialize spinlock earlier.
>>   fsl_usb2_udc: Rename the arguments of the fsl_writel macro.
>>   fsl_usb2_udc: Uninline udc_reset_ep_queue.
>>   fsl_usb2_udc: Make fsl_queue_td return type void.
>>   fsl_usb2_udc: Add a wmb before priming endpoint.
>>   fsl_usb2_udc: Fix oops on probe failure.
>>
>>  drivers/usb/gadget/fsl_usb2_udc.c |  176
>> ++++++++++++++++--------------------
>>  drivers/usb/gadget/fsl_usb2_udc.h |   21 +----
>>  2 files changed, 80 insertions(+), 117 deletions(-)
>>
>> -
>> This message is subject to Imagination Technologies' e-mail
>> terms: http://www.imgtec.com/e-mail.htm
>> -
>>
>>
>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 00/11] fsl_usb2_udc: A number of bug fixes and cleanups.
  2008-07-17  9:43 ` [PATCH 00/11] fsl_usb2_udc: A number of bug fixes and cleanups Li Yang
  2008-07-17  9:47   ` Will Newton
@ 2008-08-08 10:13   ` Will Newton
  2008-08-12 11:27     ` Li Yang
  1 sibling, 1 reply; 17+ messages in thread
From: Will Newton @ 2008-08-08 10:13 UTC (permalink / raw)
  To: Li Yang; +Cc: linux-kernel, linux-usb, Jiang Bo, gregkh

On Thu, Jul 17, 2008 at 10:43 AM, Li Yang <LeoLi@freescale.com> wrote:
>> -----Original Message-----
>> From: Will Newton [mailto:will.newton@imgtec.com]
>> Sent: Tuesday, July 15, 2008 11:25 PM
>> To: linux-kernel@vger.kernel.org
>> Cc: linux-usb@vger.kernel.org; Li Yang; Jiang Bo;
>> gregkh@suse.de; Will Newton
>> Subject: [PATCH 00/11] fsl_usb2_udc: A number of bug fixes
>> and cleanups.
>>
>> From: Will Newton <will.newton@gmail.com>
>>
>> Hi,
>>
>> These patches fix a couple of small bugs and cleanup parts of
>> the fsl_usb2_udc USB gadget driver. I've split them up quite
>> finely for ease of reviewing and to separate functional
>> changes. Any comments would be appreciated.
>>
>> I would also appreciate it if someone with real Freescale
>> hardware could test these changes, I'm testing this driver
>> with a different SoC containing the same TDI/ARC/ChipIdea IP block.
>
> Thanks for the patches.  Looks like they are ok, but I still need to
> test them later.

Hi Leo,

Have you had a chance to test these patches yet?

Thanks,

> What's the SoC you have tested with the driver?  Maybe you could also
> update the Kconfig for that.
>
> - Leo
>>
>> Thanks,
>>
>> Will Newton (11):
>>   fsl_usb2_udc: Make dr_ep_setup function static.
>>   fsl_usb2_udc: Remove check for udc == NULL in dr_controller_setup.
>>   fsl_usb2_udc: Fix some sparse warnings and remove redundant code.
>>   fsl_usb2_udc: Clean up whitespace in errors and warnings.
>>   fsl_usb2_udc: Clean up whitespace in /proc debugging output.
>>   fsl_usb2_udc: Initialize spinlock earlier.
>>   fsl_usb2_udc: Rename the arguments of the fsl_writel macro.
>>   fsl_usb2_udc: Uninline udc_reset_ep_queue.
>>   fsl_usb2_udc: Make fsl_queue_td return type void.
>>   fsl_usb2_udc: Add a wmb before priming endpoint.
>>   fsl_usb2_udc: Fix oops on probe failure.
>>
>>  drivers/usb/gadget/fsl_usb2_udc.c |  176
>> ++++++++++++++++--------------------
>>  drivers/usb/gadget/fsl_usb2_udc.h |   21 +----
>>  2 files changed, 80 insertions(+), 117 deletions(-)
>>
>> -
>> This message is subject to Imagination Technologies' e-mail
>> terms: http://www.imgtec.com/e-mail.htm
>> -
>>
>>
>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 00/11] fsl_usb2_udc: A number of bug fixes and cleanups.
  2008-08-08 10:13   ` Will Newton
@ 2008-08-12 11:27     ` Li Yang
  0 siblings, 0 replies; 17+ messages in thread
From: Li Yang @ 2008-08-12 11:27 UTC (permalink / raw)
  To: Will Newton, gregkh; +Cc: linux-kernel, linux-usb, Jiang Bo

On Fri, 2008-08-08 at 18:13 +0800, Will Newton wrote:
> On Thu, Jul 17, 2008 at 10:43 AM, Li Yang <LeoLi@freescale.com> wrote:
> >> -----Original Message-----
> >> From: Will Newton [mailto:will.newton@imgtec.com]
> >> Sent: Tuesday, July 15, 2008 11:25 PM
> >> To: linux-kernel@vger.kernel.org
> >> Cc: linux-usb@vger.kernel.org; Li Yang; Jiang Bo;
> >> gregkh@suse.de; Will Newton
> >> Subject: [PATCH 00/11] fsl_usb2_udc: A number of bug fixes
> >> and cleanups.
> >>
> >> From: Will Newton <will.newton@gmail.com>
> >>
> >> Hi,
> >>
> >> These patches fix a couple of small bugs and cleanup parts of
> >> the fsl_usb2_udc USB gadget driver. I've split them up quite
> >> finely for ease of reviewing and to separate functional
> >> changes. Any comments would be appreciated.
> >>
> >> I would also appreciate it if someone with real Freescale
> >> hardware could test these changes, I'm testing this driver
> >> with a different SoC containing the same TDI/ARC/ChipIdea IP block.
> >
> > Thanks for the patches.  Looks like they are ok, but I still need to
> > test them later.
> 
> Hi Leo,
> 
> Have you had a chance to test these patches yet?
> 
Yes, they are working fine.

Acked-by: Li Yang <leoli@freescale.com>

- Leo


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH 00/11] fsl_usb2_udc: A number of bug fixes and cleanups.
@ 2008-08-12 14:39 Will Newton
  0 siblings, 0 replies; 17+ messages in thread
From: Will Newton @ 2008-08-12 14:39 UTC (permalink / raw)
  To: gregkh; +Cc: linux-kernel, linux-usb, leoli, Will Newton

From: Will Newton <will.newton@gmail.com>

Hi,

These patches fix a couple of small bugs and clean up parts of the
fsl_usb2_udc USB gadget driver. I've split them up quite finely for ease
of reviewing and to separate functional changes.

I'm testing this driver with a non-Freescale SoC containing the same
TDI/ARC/ChipIdea IP block, but the series has been tested and acked by
the maintainer.

Will Newton (11):
  fsl_usb2_udc: Make dr_ep_setup function static.
  fsl_usb2_udc: Remove check for udc == NULL in dr_controller_setup.
  fsl_usb2_udc: Fix some sparse warnings and remove redundant code.
  fsl_usb2_udc: Clean up whitespace in errors and warnings.
  fsl_usb2_udc: Clean up whitespace in /proc debugging output.
  fsl_usb2_udc: Initialize spinlock earlier.
  fsl_usb2_udc: Rename the arguments of the fsl_writel macro.
  fsl_usb2_udc: Uninline udc_reset_ep_queue.
  fsl_usb2_udc: Make fsl_queue_td return type void.
  fsl_usb2_udc: Add a wmb before priming endpoint.
  fsl_usb2_udc: Fix oops on probe failure.

 drivers/usb/gadget/fsl_usb2_udc.c |  176 ++++++++++++++++--------------------
 drivers/usb/gadget/fsl_usb2_udc.h |   21 +----
 2 files changed, 80 insertions(+), 117 deletions(-)


^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2008-08-12 14:39 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-07-15 15:24 [PATCH 00/11] fsl_usb2_udc: A number of bug fixes and cleanups Will Newton
2008-07-15 15:24 ` [PATCH 01/11] fsl_usb2_udc: Make dr_ep_setup function static Will Newton
2008-07-15 15:24   ` [PATCH 02/11] fsl_usb2_udc: Remove check for udc == NULL in dr_controller_setup Will Newton
2008-07-15 15:24     ` [PATCH 03/11] fsl_usb2_udc: Fix some sparse warnings and remove redundant code Will Newton
2008-07-15 15:24       ` [PATCH 04/11] fsl_usb2_udc: Clean up whitespace in errors and warnings Will Newton
2008-07-15 15:24         ` [PATCH 05/11] fsl_usb2_udc: Clean up whitespace in /proc debugging output Will Newton
2008-07-15 15:24           ` [PATCH 06/11] fsl_usb2_udc: Initialize spinlock earlier Will Newton
2008-07-15 15:24             ` [PATCH 07/11] fsl_usb2_udc: Rename the arguments of the fsl_writel macro Will Newton
2008-07-15 15:24               ` [PATCH 08/11] fsl_usb2_udc: Uninline udc_reset_ep_queue Will Newton
2008-07-15 15:24                 ` [PATCH 09/11] fsl_usb2_udc: Make fsl_queue_td return type void Will Newton
2008-07-15 15:24                   ` [PATCH 10/11] fsl_usb2_udc: Add a wmb before priming endpoint Will Newton
2008-07-15 15:24                     ` [PATCH 11/11] fsl_usb2_udc: Fix oops on probe failure Will Newton
2008-07-17  9:43 ` [PATCH 00/11] fsl_usb2_udc: A number of bug fixes and cleanups Li Yang
2008-07-17  9:47   ` Will Newton
2008-08-08 10:13   ` Will Newton
2008-08-12 11:27     ` Li Yang
2008-08-12 14:39 Will Newton

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®