From 0cb162a76b16d58250a33e817af6a763e89a770a Mon Sep 17 00:00:00 2001 From: Solomon Peachy Date: Fri, 28 Aug 2020 21:45:58 -0400 Subject: 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 --- firmware/target/mips/ingenic_jz47xx/usb-jz4740.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'firmware/target/mips/ingenic_jz47xx/usb-jz4740.c') diff --git a/firmware/target/mips/ingenic_jz47xx/usb-jz4740.c b/firmware/target/mips/ingenic_jz47xx/usb-jz4740.c index e8cd2033ff..fd38b2b1a4 100644 --- a/firmware/target/mips/ingenic_jz47xx/usb-jz4740.c +++ b/firmware/target/mips/ingenic_jz47xx/usb-jz4740.c @@ -274,7 +274,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 @@ -365,7 +365,7 @@ static void EPDMA_handler(int number) /* Disable DMA */ REG_USB_REG_CNTL2 = 0; - __dcache_invalidate_all(); + commit_discard_dcache(); // XXX range? select_endpoint(endpoint); /* Read out last packet manually */ @@ -707,8 +707,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_REG_ADDR1 = PHYSADDR((unsigned long)ptr); REG_USB_REG_COUNT1 = length; REG_USB_REG_CNTL1 = (USB_CNTL_INTR_EN | USB_CNTL_MODE_1 | @@ -767,8 +766,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_REG_ADDR2 = PHYSADDR((unsigned long)ptr); REG_USB_REG_COUNT2 = length; REG_USB_REG_CNTL2 = (USB_CNTL_INTR_EN | USB_CNTL_MODE_1 | -- cgit v1.2.3