A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd

Sansa Connect: Reduce USB RX buffers from 129 to 2

Reducing number of fake RX buffers saves a bit more than 127 KiB RAM.
Fix compilation with CPPI logging enabled.

Change-Id: If1ad3a6fc251e284caaac78c2406a58f3d6547bb

+27 -24
+25 -22
firmware/target/arm/tms320dm320/sansa-connect/tnetv105_cppi.c
··· 27 27 #include "system.h" 28 28 #include "kernel.h" 29 29 #include "panic.h" 30 - #include "logf.h" 31 30 #include "tnetv105_usb_drv.h" 32 31 #include "tnetv105_cppi.h" 32 + #if USB_CPPI_LOGGING 33 + #define LOGF_ENABLE 34 + #endif 35 + #include "logf.h" 33 36 34 37 /* This file is pretty much directly copied from the Sansa Connect 35 38 * Linux kernel source code. This is because the functionality is ··· 71 74 static uint8_t ch1_rx_buf[CPPI_DMA_RX_BUF_SIZE]; 72 75 73 76 #if USB_CPPI_LOGGING 74 - #define cppi_log_event0(msg) usb_log_event(msg, LOG_EVENT_D0, 0, 0, 0, 0) 75 - #define cppi_log_event1(msg, data0) usb_log_event(msg, LOG_EVENT_D1, data0, 0, 0, 0) 76 - #define cppi_log_event2(msg, data0, data1) usb_log_event(msg, LOG_EVENT_D2, data0, data1, 0, 0) 77 - #define cppi_log_event3(msg, data0, data1, data2) usb_log_event(msg, LOG_EVENT_D3, data0, data1, data2, 0) 78 - #define cppi_log_event4(msg, data0, data1, data2, data3) usb_log_event(msg, LOG_EVENT_D4, data0, data1, data2, data3) 77 + #define cppi_log_event0(msg) logf(msg) 78 + #define cppi_log_event1(msg, data0) logf(msg " %lx", (uint32_t)data0) 79 + #define cppi_log_event2(msg, data0, data1) logf(msg " %lx %lx", (uint32_t)data0, (uint32_t)data1) 80 + #define cppi_log_event3(msg, data0, data1, data2) logf(msg " %lx %lx %lx", (uint32_t)data0, (uint32_t)data1, (uint32_t)data2) 81 + #define cppi_log_event4(msg, data0, data1, data2, data3) logf(msg " %lx %lx %lx %lx", (uint32_t)data0, (uint32_t)data1, (uint32_t)data2, (uint32_t)data3) 79 82 #else 80 83 #define cppi_log_event0(x) 81 84 #define cppi_log_event1(x, y) ··· 439 442 cppi_rcb *rcb; 440 443 441 444 logf("CPPI struct:\n"); 442 - logf("Buf mem: %x Buf size: %d int: %x %x\n\n", (uint32_t) cppi->dma_mem, cppi->dma_size, tnetv_usb_reg_read(TNETV_USB_RX_INT_STATUS), tnetv_usb_reg_read(DM320_VLYNQ_INTST)); 445 + logf("Buf mem: %lx Buf size: %d int: %lx %lx\n\n", (uint32_t) cppi->dma_mem, cppi->dma_size, tnetv_usb_reg_read(TNETV_USB_RX_INT_STATUS), tnetv_usb_reg_read(VL_INTST)); 443 446 444 447 for (ch = 0; ch < CPPI_NUM_CHANNELS; ch++) 445 448 { ··· 447 450 pTxCtl = &cppi->tx_ctl[ch]; 448 451 449 452 logf("ch: %d\n", ch); 450 - logf(" rx_numbufs: %d active %d free_buf_cnt %d\n", pRxCtl->RxNumBuffers, pRxCtl->RxActive, tnetv_usb_reg_read(TNETV_USB_RX_FREE_BUF_CNT(ch))); 451 - logf(" q_cnt %d head %x tail %x\n", pRxCtl->RxActQueueCount, (uint32_t) pRxCtl->RxActQueueHead, (uint32_t) pRxCtl->RxActQueueTail); 452 - logf(" fake_head: %x fake_tail: %x\n", (uint32_t) pRxCtl->RxFakeRcvHead, (uint32_t) pRxCtl->RxFakeRcvTail); 453 + logf(" rx_numbufs: %d active %ld free_buf_cnt %ld\n", pRxCtl->RxNumBuffers, pRxCtl->RxActive, tnetv_usb_reg_read(TNETV_USB_RX_FREE_BUF_CNT(ch))); 454 + logf(" q_cnt %ld head %lx tail %lx\n", pRxCtl->RxActQueueCount, (uint32_t) pRxCtl->RxActQueueHead, (uint32_t) pRxCtl->RxActQueueTail); 455 + logf(" fake_head: %lx fake_tail: %lx\n", (uint32_t) pRxCtl->RxFakeRcvHead, (uint32_t) pRxCtl->RxFakeRcvTail); 453 456 454 457 rcb = (cppi_rcb *) pRxCtl->RcbStart; 455 458 do ··· 457 460 if (!rcb) 458 461 break; 459 462 460 - logf(" Rcb: %x\n", (uint32_t) rcb); 461 - logf(" HNext %x BufPtr %x Off_BLen %x mode %x\n", rcb->HNext, rcb->BufPtr, rcb->Off_BLen, rcb->mode); 462 - logf(" Next %x Eop %x dma_handle %x fake_bytes %x\n", (uint32_t) rcb->Next, (uint32_t) rcb->Eop, rcb->dma_handle, rcb->fake_bytes); 463 + logf(" Rcb: %lx\n", (uint32_t) rcb); 464 + logf(" HNext %lx BufPtr %lx Off_BLen %lx mode %lx\n", rcb->HNext, rcb->BufPtr, rcb->Off_BLen, rcb->mode); 465 + logf(" Next %lx Eop %lx dma_handle %lx fake_bytes %lx\n", (uint32_t) rcb->Next, (uint32_t) rcb->Eop, rcb->dma_handle, rcb->fake_bytes); 463 466 rcb = rcb->Next; 464 467 465 468 } while (rcb && rcb != (cppi_rcb *) pRxCtl->RcbStart); 466 469 467 470 logf("\n"); 468 - logf(" tx_numbufs: %d active %d\n", pTxCtl->TxNumBuffers, pTxCtl->TxActive); 469 - logf(" q_cnt %d head %x tail %x\n", pTxCtl->TxActQueueCount, (uint32_t) pTxCtl->TxActQueueHead, (uint32_t) pTxCtl->TxActQueueTail); 471 + logf(" tx_numbufs: %d active %ld\n", pTxCtl->TxNumBuffers, pTxCtl->TxActive); 472 + logf(" q_cnt %ld head %lx tail %lx\n", pTxCtl->TxActQueueCount, (uint32_t) pTxCtl->TxActQueueHead, (uint32_t) pTxCtl->TxActQueueTail); 470 473 471 474 tcb = (cppi_tcb *) pTxCtl->TcbPool; 472 475 do ··· 474 477 if (!tcb) 475 478 break; 476 479 477 - logf(" Tcb (pool): %x\n", (uint32_t) tcb); 478 - logf(" HNext %x BufPtr %x Off_BLen %x mode %x\n", tcb->HNext, tcb->BufPtr, tcb->Off_BLen, tcb->mode); 479 - logf(" Next %x Eop %x dma_handle %x\n", (uint32_t) tcb->Next, (uint32_t) tcb->Eop, tcb->dma_handle); 480 + logf(" Tcb (pool): %lx\n", (uint32_t) tcb); 481 + logf(" HNext %lx BufPtr %lx Off_BLen %lx mode %lx\n", tcb->HNext, tcb->BufPtr, tcb->Off_BLen, tcb->mode); 482 + logf(" Next %lx Eop %lx dma_handle %lx\n", (uint32_t) tcb->Next, (uint32_t) tcb->Eop, tcb->dma_handle); 480 483 tcb = tcb->Next; 481 484 482 485 } while (tcb && tcb != (cppi_tcb *) pTxCtl->TcbPool); ··· 487 490 if (!tcb) 488 491 break; 489 492 490 - logf(" Tcb (act): %x\n", (uint32_t) tcb); 491 - logf(" HNext %x BufPtr %x Off_BLen %x mode %x\n", tcb->HNext, tcb->BufPtr, tcb->Off_BLen, tcb->mode); 492 - logf(" Next %x Eop %x dma_handle %x\n", (uint32_t) tcb->Next, (uint32_t) tcb->Eop, tcb->dma_handle); 493 + logf(" Tcb (act): %lx\n", (uint32_t) tcb); 494 + logf(" HNext %lx BufPtr %lx Off_BLen %lx mode %lx\n", tcb->HNext, tcb->BufPtr, tcb->Off_BLen, tcb->mode); 495 + logf(" Next %lx Eop %lx dma_handle %lx\n", (uint32_t) tcb->Next, (uint32_t) tcb->Eop, tcb->dma_handle); 493 496 tcb = tcb->Next; 494 497 495 498 } while (tcb && tcb != (cppi_tcb *) pTxCtl->TxActQueueTail); ··· 556 559 CurrentRcb = pRxCtl->RxFakeRcvHead; 557 560 if (!CurrentRcb) 558 561 { 559 - cppi_log_event2("[cppi] rx_int recv: nothing in q", tnetv_usb_reg_read(TNETV_USB_RX_INT_STATUS), tnetv_usb_reg_read(DM320_VLYNQ_INTST)); 562 + cppi_log_event2("[cppi] rx_int recv: nothing in q", tnetv_usb_reg_read(TNETV_USB_RX_INT_STATUS), tnetv_usb_reg_read(VL_INTST)); 560 563 return -1; 561 564 } 562 565
+2 -2
firmware/target/arm/tms320dm320/sansa-connect/tnetv105_cppi.h
··· 26 26 #define TNETV105_CPPI_H 27 27 28 28 #include <stdint.h> 29 + #include "errno.h" 29 30 30 31 typedef uint32_t dma_addr_t; 31 32 #define USB_CPPI_LOGGING 0 32 - #define EAGAIN 11 /* Try again */ 33 - #define CPPI_RX_NUM_BUFS 129 33 + #define CPPI_RX_NUM_BUFS 2 34 34 #define CPPI_INFO_MEM_SIZE (2 * CPPI_RX_NUM_BUFS * sizeof(cppi_rcb) + 4 * 2 * sizeof(cppi_tcb)) 35 35 36 36 #define CPPI_NUM_CHANNELS 4