File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -106,9 +106,20 @@ void comp_update_buffer_produce(struct comp_buffer *buffer, uint32_t bytes)
106106
107107 spin_lock_irq (& buffer -> lock , flags );
108108
109- if (buffer -> source -> is_dma_connected )
109+ /*
110+ * new data produce, handle consistency for buffer and cache:
111+ * 1. source(DMA) --> buffer --> sink(non-DMA): invalidate cache.
112+ * 2. source(non-DMA) --> buffer --> sink(DMA): write back to memory.
113+ * 3. source(DMA) --> buffer --> sink(DMA): do nothing.
114+ * 4. source(non-DMA) --> buffer --> sink(non-DMA): do nothing.
115+ */
116+ if (buffer -> source -> is_dma_connected &&
117+ !buffer -> sink -> is_dma_connected )
118+ /* need invalidate cache for sink component to use */
110119 dcache_invalidate_region (buffer -> w_ptr , bytes );
111- else if (buffer -> sink -> is_dma_connected )
120+ else if (!buffer -> source -> is_dma_connected &&
121+ buffer -> sink -> is_dma_connected )
122+ /* need write back to memory for sink component to use */
112123 dcache_writeback_region (buffer -> w_ptr , bytes );
113124
114125 buffer -> w_ptr += bytes ;
You can’t perform that action at this time.
0 commit comments