From 3a3145adc49b8952dd29cccd3e2528fe61f75529 Mon Sep 17 00:00:00 2001 From: zgs <18655058726@163.com> Date: Sun, 17 Mar 2024 17:49:31 +0800 Subject: [PATCH] Improved DMA adjacency descriptor prefetch function in performance mode --- XDMA/linux-kernel/xdma/libxdma.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/XDMA/linux-kernel/xdma/libxdma.c b/XDMA/linux-kernel/xdma/libxdma.c index 3d9c86524..11937746c 100644 --- a/XDMA/linux-kernel/xdma/libxdma.c +++ b/XDMA/linux-kernel/xdma/libxdma.c @@ -4081,6 +4081,22 @@ int xdma_performance_submit(struct xdma_dev *xdev, struct xdma_engine *engine) pr_err("Failed to set desc control\n"); goto err_dma_desc; } + + /************ support prefetching adjacent descriptors -- start ************/ + + /* fill in adjacent numbers */ + transfer->desc_adjacent = transfer->desc_num - 1; + + for (i = 0; i < transfer->desc_num; i++) { + u32 next_adj = xdma_get_next_adj(transfer->desc_num - i - 1, + (transfer->desc_virt + i)->next_lo); + + xdma_desc_adjacent(transfer->desc_virt + i, next_adj); + dbg_desc("prefetch: dma desc addr: %x_%x, control:%x", transfer->desc_virt[i].next_hi, transfer->desc_virt[i].next_lo, transfer->desc_virt[i].control); + } + + /************ support prefetching adjacent descriptors -- end ************/ + /* create a linked loop */ xdma_desc_link(transfer->desc_virt + transfer->desc_num - 1, transfer->desc_virt, transfer->desc_bus);