Commit 741d2558 authored by Cristian Birsan's avatar Cristian Birsan Committed by Felipe Balbi

usb: gadget: udc: atmel: Update endpoint allocation scheme

This patch updates the usb endpoint allocation scheme for atmel usba
driver to make sure all endpoints are allocated in order. This
requirement comes from the datasheet of the controller.

The allocation scheme is decided by fifo_mode parameter. For fifo_mode =
0 the driver tries to autoconfigure the endpoints fifo size. All other
modes contain fixed configurations optimized for different purposes. The
idea is somehow similar with the approach used on musb driver.
Signed-off-by: default avatarCristian Birsan <cristian.birsan@microchip.com>
Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
parent 41dc9ac1
...@@ -60,6 +60,20 @@ config USB_ATMEL_USBA ...@@ -60,6 +60,20 @@ config USB_ATMEL_USBA
USBA is the integrated high-speed USB Device controller on USBA is the integrated high-speed USB Device controller on
the AT32AP700x, some AT91SAM9 and AT91CAP9 processors from Atmel. the AT32AP700x, some AT91SAM9 and AT91CAP9 processors from Atmel.
The fifo_mode parameter is used to select endpoint allocation mode.
fifo_mode = 0 is used to let the driver autoconfigure the endpoints.
In this case 2 banks are allocated for isochronous endpoints and
only one bank is allocated for the rest of the endpoints.
fifo_mode = 1 is a generic maximum fifo size (1024 bytes) configuration
allowing the usage of ep1 - ep6
fifo_mode = 2 is a generic performance maximum fifo size (1024 bytes)
configuration allowing the usage of ep1 - ep3
fifo_mode = 3 is a balanced performance configuration allowing the
the usage of ep1 - ep8
config USB_BCM63XX_UDC config USB_BCM63XX_UDC
tristate "Broadcom BCM63xx Peripheral Controller" tristate "Broadcom BCM63xx Peripheral Controller"
depends on BCM63XX depends on BCM63XX
......
This diff is collapsed.
...@@ -275,6 +275,12 @@ struct usba_dma_desc { ...@@ -275,6 +275,12 @@ struct usba_dma_desc {
u32 ctrl; u32 ctrl;
}; };
struct usba_fifo_cfg {
u8 hw_ep_num;
u16 fifo_size;
u8 nr_banks;
};
struct usba_ep { struct usba_ep {
int state; int state;
void __iomem *ep_regs; void __iomem *ep_regs;
...@@ -292,7 +298,7 @@ struct usba_ep { ...@@ -292,7 +298,7 @@ struct usba_ep {
unsigned int can_isoc:1; unsigned int can_isoc:1;
unsigned int is_isoc:1; unsigned int is_isoc:1;
unsigned int is_in:1; unsigned int is_in:1;
unsigned long ept_cfg;
#ifdef CONFIG_USB_GADGET_DEBUG_FS #ifdef CONFIG_USB_GADGET_DEBUG_FS
u32 last_dma_status; u32 last_dma_status;
struct dentry *debugfs_dir; struct dentry *debugfs_dir;
...@@ -337,6 +343,8 @@ struct usba_udc { ...@@ -337,6 +343,8 @@ struct usba_udc {
int vbus_pin; int vbus_pin;
int vbus_pin_inverted; int vbus_pin_inverted;
int num_ep; int num_ep;
int configured_ep;
struct usba_fifo_cfg *fifo_cfg;
struct clk *pclk; struct clk *pclk;
struct clk *hclk; struct clk *hclk;
struct usba_ep *usba_ep; struct usba_ep *usba_ep;
......
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