jr->head = (head + 1) & (jr->size - 1);
+ /* Invalidate output ring */
+ start = (unsigned long)jr->output_ring &
+ ~(ARCH_DMA_MINALIGN - 1);
+ end = ALIGN((unsigned long)jr->output_ring + jr->op_size,
+ ARCH_DMA_MINALIGN);
+ invalidate_dcache_range(start, end);
+
sec_out32(®s->irja, 1);
return 0;
#else
uint32_t *addr;
#endif
- unsigned long start, end;
while (sec_in32(®s->orsf) && CIRC_CNT(jr->head, jr->tail,
jr->size)) {
found = 0;
caam_dma_addr_t op_desc;
-
- /* Invalidate output ring */
- start = (unsigned long)jr->output_ring & ~(ARCH_DMA_MINALIGN - 1);
- end = ALIGN((unsigned long)jr->output_ring + jr->op_size, ARCH_DMA_MINALIGN);
- invalidate_dcache_range(start, end);
#ifdef CONFIG_CAAM_64BIT
/* Read the 64 bit Descriptor address from Output Ring.
* The 32 bit hign and low part of the address will
}
/* Error condition if match not found */
- if (!found) {
- int slots_full = sec_in32(®s->orsf);
-
- jr->tail = (jr->tail + slots_full) & (jr->size - 1);
- sec_out32(®s->orjr, slots_full);
+ if (!found)
return -1;
- }
jr->info[idx].op_done = 1;
callback = (void *)jr->info[idx].callback;
*/
if (idx == tail)
do {
- jr->info[tail].op_done = 0;
tail = (tail + 1) & (jr->size - 1);
} while (jr->info[tail].op_done);
jr->tail = tail;
-
+ jr->read_idx = (jr->read_idx + 1) & (jr->size - 1);
sec_out32(®s->orjr, 1);
+ jr->info[idx].op_done = 0;
callback(status, arg);
}
jr->head = 0;
jr->tail = 0;
+ jr->read_idx = 0;
jr->write_idx = 0;
memset(jr->info, 0, sizeof(jr->info));
memset(jr->input_ring, 0, jr->size * sizeof(caam_dma_addr_t));