Skip to content
Snippets Groups Projects
Commit 5689f4b5 authored by Ajay Kumar Gupta's avatar Ajay Kumar Gupta Committed by Remy Bohmer
Browse files

musb: am35x: Workaround for fifo read issue


AM35x supports only 32bit read operations so we need to have
workaround for 8bit and 16bit read operations.

Signed-off-by: default avatarAjay Kumar Gupta <ajay.gupta@ti.com>
parent dbea3242
No related branches found
No related tags found
No related merge requests found
...@@ -116,3 +116,35 @@ void musb_platform_deinit(void) ...@@ -116,3 +116,35 @@ void musb_platform_deinit(void)
/* Turn off the phy */ /* Turn off the phy */
phy_off(); phy_off();
} }
/*
* This function reads data from endpoint fifo for AM35x
* which supports only 32bit read operation.
*
* ep - endpoint number
* length - number of bytes to read from FIFO
* fifo_data - pointer to data buffer into which data is read
*/
__attribute__((weak))
void read_fifo(u8 ep, u32 length, void *fifo_data)
{
u8 *data = (u8 *)fifo_data;
u32 val;
int i;
/* select the endpoint index */
writeb(ep, &musbr->index);
if (length > 4) {
for (i = 0; i < (length >> 2); i++) {
val = readl(&musbr->fifox[ep]);
memcpy(data, &val, 4);
data += 4;
}
length %= 4;
}
if (length > 0) {
val = readl(&musbr->fifox[ep]);
memcpy(data, &val, length);
}
}
...@@ -141,6 +141,11 @@ void write_fifo(u8 ep, u32 length, void *fifo_data) ...@@ -141,6 +141,11 @@ void write_fifo(u8 ep, u32 length, void *fifo_data)
writeb(*data++, &musbr->fifox[ep]); writeb(*data++, &musbr->fifox[ep]);
} }
/*
* AM35x supports only 32bit read operations so
* use seperate read_fifo() function for it.
*/
#ifndef CONFIG_USB_AM35X
/* /*
* This function reads data from endpoint fifo * This function reads data from endpoint fifo
* *
...@@ -160,3 +165,4 @@ void read_fifo(u8 ep, u32 length, void *fifo_data) ...@@ -160,3 +165,4 @@ void read_fifo(u8 ep, u32 length, void *fifo_data)
while (length--) while (length--)
*data++ = readb(&musbr->fifox[ep]); *data++ = readb(&musbr->fifox[ep]);
} }
#endif /* CONFIG_USB_AM35X */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment