[PATCH 2/3] Put back the read and write fifo to diego's version.

2 views
Skip to first unread message

Atin Malaviya

unread,
Jan 30, 2009, 10:55:07 AM1/30/09
to beagl...@googlegroups.com
u-boot, omap3-dev-usb branch. Put in Diego's version of read/write fifo since it is more efficient.
---
drivers/usb/usbdcore_musb.c | 37 ++++++++++++++++++++++---------------
1 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/drivers/usb/usbdcore_musb.c b/drivers/usb/usbdcore_musb.c
index 5c9a4ca..89ebede 100644
--- a/drivers/usb/usbdcore_musb.c
+++ b/drivers/usb/usbdcore_musb.c
@@ -73,29 +73,36 @@ static void outsb(u32 reg, u8 * data, u32 size)

static void musb_fifo_read(int epnumber, u8 * data, u32 size)
{
- /* if 32 bit aligned data, access faster */
- if (!((u32) data & 0x03)) {
- insl(UDC_FIFO0 + (epnumber << 2), (u32 *) data, size >> 2);
+ if ((u32)data & 0x3) { /* Not aligned data */
+ insb((UDC_FIFO0 + (epnumber << 2)), data, size);
+ } else { /* 32 bits aligned data */
+ int i;
+
+ insl(UDC_FIFO0 + (epnumber << 2),(u32 *)data,size>>2);
data += size & ~0x3;
- size &= 0x03;
- /* Fall through and copy the remaining unaligned data */
+ i = size & 0x3;
+ while (i--) {
+ *data = inb(UDC_FIFO0 + (epnumber << 2));
+ data++;
+ }
}
- /* Copy the rest of data OR copy unaligned data buffer */
- if (size)
- insb(UDC_FIFO0 + (epnumber << 2), data, size);
}

static void musb_fifo_write(int epnumber, u8 * data, u32 size)
{
- /* if 32 bit aligned data, access faster */
- if (!((u32) data & 0x3)) {
- outsl(UDC_FIFO0 + (epnumber << 2), (u32 *) data, size >> 2);
+ if ((u32)data & 0x3) { /* Not aligned data */
+ outsb(UDC_FIFO0 + (epnumber << 2), data, size);
+ } else { /* 32 bits aligned data */
+ int i;
+
+ outsl(UDC_FIFO0 + (epnumber << 2), (u32 *)data, size>>2);
data += size & ~0x3;
- size &= 0x3;
+ i = size & 0x3;
+ while (i--) {
+ outb(*data, UDC_FIFO0 + (epnumber << 2));
+ data++;
+ }
}
- /* Copy the rest of data OR copy unaligned data buffer */
- if (size)
- outsb(UDC_FIFO0 + (epnumber << 2), data, size);
}

static void musb_fifos_configure(struct usb_device_instance *device)
--
1.5.6.3

Reply all
Reply to author
Forward
0 new messages