Commit b96f5d3
Optimize QSPI drawing: async DMA, single-transaction region+pixels, larger buffers
Three targeted optimizations to close the performance gap between the
generic qspibus/displayio pipeline and the dedicated rm690b0-standalone
framebuffer driver:
1. Async DMA (QSPIBus.c): Remove blocking wait_all_transfers_done at the
end of send_color_bytes(). DMA now runs asynchronously, allowing
fill_area() for the next subrectangle to overlap with the previous
DMA transfer. The wait is moved to begin_transaction(), which only
blocks when the bus is actually needed. Python API (write_data) still
waits synchronously for backward compatibility.
2. Single-transaction path (BusDisplay.c + bus_core.c): Add
displayio_display_bus_send_region_commands() that sends column/row
window commands within an existing transaction. For QSPI buses,
_refresh_area() now combines set_region + RAMWR + pixel data into
a single begin/end transaction, eliminating 2 of 3 per-subrectangle
transaction cycles.
3. Buffer enlargement (BusDisplay.c): Port the QSPI-specific buffer
boost from the rm690b0 branch (CIRCUITPY_QSPI_DISPLAY_AREA_BUFFER_SIZE
up to 2048 uint32_t = 8KB), reducing the number of subrectangles per
refresh and thus the total transaction overhead.
Co-authored-by: ppsx <7107135+ppsx@users.noreply.github.com>1 parent 00e0aef commit b96f5d3
5 files changed
Lines changed: 826 additions & 9 deletions
0 commit comments