Re: [PATCH 1/2] USB: add Freescale high-speed USB SOC device controller driver

Kumar Gala <[email protected]>
Newsgroups gmane.linux.usb.devel
Message-ID <[email protected]>
On Mon, 5 Feb 2007, Li Yang wrote:

> Freescale high-speed USB SOC can be found on some Freescale processors
> among different architectures.  It supports both host and device functions.
> This driver adds its device support for Linux USB Gadget layer.
> It is tested for MPC834x DR module, but should work on other platforms
> with minor tweaks.  The driver passed USBCV 1.3 compliance tests.
>
> Signed-off-by: Li Yang <[email protected]>
> Signed-off-by: Jiang Bo <[email protected]>
> Signed-off-by: Bruce Schmid <[email protected]>
>
> ---
> The latest udc driver after massive enhancement and cleanup.
>
> drivers/usb/gadget/Kconfig        |   21 +
> drivers/usb/gadget/Makefile       |    1 +
> drivers/usb/gadget/fsl_usb2_udc.c | 2489 +++++++++++++++++++++++++++++++++++++
> drivers/usb/gadget/fsl_usb2_udc.h |  577 +++++++++
> drivers/usb/gadget/gadget_chips.h |    8 +
> 5 files changed, 3096 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/usb/gadget/Kconfig b/drivers/usb/gadget/Kconfig
> index 4097a86..601e8d1 100644
> --- a/drivers/usb/gadget/Kconfig
> +++ b/drivers/usb/gadget/Kconfig
> @@ -68,6 +68,27 @@ choice
> 	   Many controller drivers are platform-specific; these
> 	   often need board-specific hooks.
>
> +config USB_GADGET_FSL_USB2
> +	boolean "Freescale MPC834x DR"
> +	depends on MPC834x

The same controller exists on MPC831x, this should be made more generic. 
We have the host support as MPC83xx.  This is a general comment for the 
rest of the code.

> +	select USB_GADGET_DUALSPEED
> +	help
> +	   Some of Freescale PowerPC processors have a High Speed
> +	   Dual-Role(DR) USB controller, which support device mode
> +	   with 5 programmable endpoints. This driver supports the
> +	   controller in the MPC834x, and should work with DR module
> +	   in other Freescale processors too, given minor tweaks.
> +
> +	   Say "y" to link the driver statically, or "m" to build a
> +	   dynamically linked module called "fsl_usb2_udc" and force
> +	   all gadget drivers to also be dynamically linked.
> +
> +config USB_FSL_USB2
> +	tristate
> +	depends on USB_GADGET_FSL_USB2
> +	default USB_GADGET
> +	select USB_GADGET_SELECTED
> +
> config USB_GADGET_NET2280
> 	boolean "NetChip 228x"
> 	depends on PCI
> diff --git a/drivers/usb/gadget/Makefile b/drivers/usb/gadget/Makefile
> index e71e086..5db1939 100644
> --- a/drivers/usb/gadget/Makefile
> +++ b/drivers/usb/gadget/Makefile
> @@ -8,6 +8,7 @@ obj-$(CONFIG_USB_GOKU)		+= goku_udc.o
> obj-$(CONFIG_USB_OMAP)		+= omap_udc.o
> obj-$(CONFIG_USB_LH7A40X)	+= lh7a40x_udc.o
> obj-$(CONFIG_USB_AT91)		+= at91_udc.o
> +obj-$(CONFIG_USB_FSL_USB2)	+= fsl_usb2_udc.o
>
> #
> # USB gadget drivers
> diff --git a/drivers/usb/gadget/fsl_usb2_udc.c b/drivers/usb/gadget/fsl_usb2_udc.c
> new file mode 100644
> index 0000000..db3fabc
> --- /dev/null
> +++ b/drivers/usb/gadget/fsl_usb2_udc.c
> @@ -0,0 +1,2489 @@
> +/*
> + * Copyright (C) 2004-2007 Freescale Semicondutor, Inc. All rights reserved.
> + *
> + * Author: Li Yang <[email protected]>
> + *         Jiang Bo <[email protected]>
> + *
> + * Description:
> + * Freescale high-speed USB SOC DR module device controller driver.
> + * This SOC can be found on MPC8349E cpu.  The driver is previously named
> + * as mpc_udc.  Based on bare board code from Dave Liu and Shlomi Gridish.
> + *
> + * Note: The driver will not work with old gadget drivers, as the API
> + * parameter endian has changed.
> + *
> + * Changelog:
> + * Aug 1, 2005
> + * - initial release
> + * Jul 13, 2006 Li Yang
> + * - adopted to powerpc arch and gadget drivers in latest kernel
> + * - add otg support, and minor style fixes
> + * Feb 5, 2007 Li Yang
> + * - massive enhancement and cleanup
> + * - verified through USBCV tests
> + *
> + * This program is free software; you can redistribute  it and/or modify it
> + * under  the terms of  the GNU General  Public License as published by the
> + * Free Software Foundation;  either version 2 of the  License, or (at your
> + * option) any later version.
> + */
> +
> +#undef DEBUG
> +#undef VERBOSE
> +
> +#include <linux/module.h>
> +#include <linux/kernel.h>
> +#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>
> +#include <linux/mm.h>
> +#include <linux/moduleparam.h>
> +#include <linux/device.h>
> +#include <linux/usb_ch9.h>
> +#include <linux/usb_gadget.h>
> +#include <linux/usb/otg.h>
> +#include <linux/dma-mapping.h>
> +#include <linux/platform_device.h>
> +#include <linux/fsl_devices.h>
> +#include <linux/dmapool.h>
> +
> +#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"
> +
> +#define	DRIVER_DESC	"Freescale High-Speed USB SOC Device Controller driver"
> +#define	DRIVER_AUTHOR	"Li Yang/Jiang Bo"
> +#define	DRIVER_VERSION	"Feb 5, 2007"
> +
> +#define	DMA_ADDR_INVALID	(~(dma_addr_t)0)
> +
> +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;
> +
> +/* it is initialized in probe()  */
> +static struct fsl_udc *udc_controller = NULL;
> +
> +/*ep name should comply to the convention of ep_match()*/
> +static const char *const ep_name[] = {
> +	"ep0-control", NULL,	/* everyone has ep0 */
> +	/* 5 IN eps and 5 OUT eps */
> +	"ep1out",
> +	"ep1in",
> +	"ep2out",
> +	"ep2in",
> +	"ep3out",
> +	"ep3in",
> +	"ep4out",
> +	"ep4in",
> +	"ep5out",
> +	"ep5in"
> +};
> +static struct usb_endpoint_descriptor
> +fsl_ep0_desc = {
> +	.bLength =		USB_DT_ENDPOINT_SIZE,
> +	.bDescriptorType =	USB_DT_ENDPOINT,
> +	.bEndpointAddress =	0,
> +	.bmAttributes =		USB_ENDPOINT_XFER_CONTROL,
> +	.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

Any reason we need to protect these with CONFIG_PPC32?

> +#undef	NO_SNOOPING
> +#define fsl_readl(addr)		in_le32(addr)
> +#define fsl_writel(addr, val32) out_le32(val32, addr)
> +#endif

[snip]

- k

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier.
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
[email protected]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.