From 011092a6642a0c3a403aa8dc0b55d450dd55000c Mon Sep 17 00:00:00 2001 From: Govind Jeyaram Date: Wed, 5 Apr 2017 10:09:51 -0700 Subject: [PATCH] PASDK-251: Free DMA resources (link params + error param, too; not just active channel) during PAF_SIO_CONTROL_CLOSE. --- pasdk/test_dsp/sap/sap.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/pasdk/test_dsp/sap/sap.c b/pasdk/test_dsp/sap/sap.c index 16187f0a..23eae4b8 100644 --- a/pasdk/test_dsp/sap/sap.c +++ b/pasdk/test_dsp/sap/sap.c @@ -235,7 +235,7 @@ Int SAP_ctrl (DEV2_Handle device, Uns code, Arg arg) { SAP_DeviceExtension *pDevExt = (SAP_DeviceExtension *)device->object; const SAP_Params *pParams; - Int result = SIO2_OK; + Int i, result = SIO2_OK; EDMA3_DRV_Handle hEdma; //TRACE_GEN((&TR_MOD, "SAP_ctrl.%d (0x%x) code = 0x%x", __LINE__, device, code)); @@ -285,10 +285,24 @@ Int SAP_ctrl (DEV2_Handle device, Uns code, Arg arg) hEdma = hEdma0; else if (pParams->sio.moduleNum == 1 || pParams->sio.moduleNum == 2) hEdma = hEdma1; + if (pDevExt->activeEdma != EDMA_HINV) { EDMA3_DRV_freeChannel (hEdma, pDevExt->activeEdma); - pDevExt->activeEdma = EDMA_HINV; - } + pDevExt->activeEdma = EDMA_HINV; + } + + for (i=0; i < pDevExt->numEdmaParams; i++) { + if (pDevExt->edmaParams[i].hEdmaParam != EDMA_HINV) + { + EDMA3_DRV_freeChannel (hEdma, pDevExt->edmaParams[i].hEdmaParam); + pDevExt->edmaParams[i].hEdmaParam = EDMA_HINV; + } + } + + if (pDevExt->errorEdma != EDMA_HINV) { + EDMA3_DRV_freeChannel (hEdma, pDevExt->errorEdma); + pDevExt->errorEdma = EDMA_HINV; + } if (!(pParams = pDevExt->pParams)) return SIO2_OK; -- 2.39.2