mirror of
https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
synced 2025-09-09 20:18:54 -04:00
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: Ajay Kumar Gupta <ajay.gupta@ti.com>
This commit is contained in:
parent
dbea324200
commit
5689f4b5b4
@ -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)
|
|||||||
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)
|
|||||||
while (length--)
|
while (length--)
|
||||||
*data++ = readb(&musbr->fifox[ep]);
|
*data++ = readb(&musbr->fifox[ep]);
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_USB_AM35X */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user