From 2bc335c24a2ad783edfba5feee8d6a2bb6372273 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=8F=AF=E4=BA=AE?= Date: Mon, 8 Apr 2024 13:33:55 +0800 Subject: [PATCH] v1.0.4 --- bsp/artinchip/hal/dma/hal_dma_def_v1x.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/bsp/artinchip/hal/dma/hal_dma_def_v1x.c b/bsp/artinchip/hal/dma/hal_dma_def_v1x.c index cd21c9f9..285e03b6 100644 --- a/bsp/artinchip/hal/dma/hal_dma_def_v1x.c +++ b/bsp/artinchip/hal/dma/hal_dma_def_v1x.c @@ -216,24 +216,28 @@ int aic_set_burst(struct dma_slave_config *sconfig, struct aic_dma_task *aic_dma_task_alloc(void) { struct aic_dma_task *task; - + unsigned long state; /* Remove the QH structure from the freelist */ + aicos_local_irq_save(&state); task = aich_dma.freetask; + if (task) { aich_dma.freetask = task->v_next; memset(task, 0, sizeof(struct aic_dma_task)); } - + aicos_local_irq_restore(state); return task; } static void aic_dma_task_free(struct aic_dma_task *task) { + unsigned long state; CHECK_PARAM_RET(task != NULL); - + aicos_local_irq_save(&state); task->v_next = aich_dma.freetask; aich_dma.freetask = task; + aicos_local_irq_restore(state); } void *aic_dma_task_add(struct aic_dma_task *prev, @@ -401,7 +405,9 @@ struct aic_dma_chan *hal_request_dma_chan(void) { int i = 0; struct aic_dma_chan *chan; + unsigned long state; + aicos_local_irq_save(&state); for (i = 0; i < AIC_DMA_CH_NUM; i++) { chan = &aich_dma.dma_chan[i]; @@ -414,10 +420,11 @@ struct aic_dma_chan *hal_request_dma_chan(void) chan->callback = NULL; chan->callback_param = NULL; chan->desc = NULL; + aicos_local_irq_restore(state); return chan; } } - + aicos_local_irq_restore(state); return NULL; }