mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-12-09 05:05:20 -05:00
mips: Heavily rework DMA & caching code
Based on code originally written by Amaury Pouly (g#1789, g#1791, g#1527) but rebased and heavily updated. Change-Id: Ic794abb5e8d89feb4b88fc3abe854270fb28db70
This commit is contained in:
parent
1ae8213a64
commit
0cb162a76b
16 changed files with 188 additions and 129 deletions
|
|
@ -360,7 +360,7 @@ static void EPIN_handler(unsigned int endpoint)
|
|||
}
|
||||
|
||||
logf("EP%d: %d -> %d", endpoint, ep->sent, ep->length);
|
||||
|
||||
|
||||
if(ep->sent == 0)
|
||||
length = MIN(ep->length, ep->fifo_size);
|
||||
else
|
||||
|
|
@ -456,7 +456,7 @@ static void EPDMA_handler(int number)
|
|||
/* Disable DMA */
|
||||
REG_USB_CNTL(1) = 0;
|
||||
|
||||
__dcache_invalidate_all();
|
||||
commit_discard_dcache(); // XXX range?
|
||||
|
||||
select_endpoint(endpoint);
|
||||
/* Read out last packet manually */
|
||||
|
|
@ -846,8 +846,7 @@ static void usb_drv_send_internal(struct usb_endpoint* ep, void* ptr, int length
|
|||
{
|
||||
if(ep->use_dma)
|
||||
{
|
||||
//dma_cache_wback_inv((unsigned long)ptr, length);
|
||||
__dcache_writeback_all();
|
||||
commit_discard_dcache_range(ptr, length);
|
||||
REG_USB_ADDR(0) = PHYSADDR((unsigned long)ptr);
|
||||
REG_USB_COUNT(0) = length;
|
||||
REG_USB_CNTL(0) = (USB_CNTL_INTR_EN | USB_CNTL_MODE_1 |
|
||||
|
|
@ -921,8 +920,7 @@ int usb_drv_recv(int endpoint, void* ptr, int length)
|
|||
ep->busy = true;
|
||||
if(ep->use_dma)
|
||||
{
|
||||
//dma_cache_wback_inv((unsigned long)ptr, length);
|
||||
__dcache_writeback_all();
|
||||
discard_dcache_range(ptr, length);
|
||||
REG_USB_ADDR(1) = PHYSADDR((unsigned long)ptr);
|
||||
REG_USB_COUNT(1) = length;
|
||||
REG_USB_CNTL(1) = (USB_CNTL_INTR_EN | USB_CNTL_MODE_1 |
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue