From 46eae7368d3809c3b3227b515ec514994a1629cd Mon Sep 17 00:00:00 2001 From: Bhavik Ameta Date: Wed, 14 Oct 2015 19:43:50 +0530 Subject: [PATCH] sw_services: xilsecure: Fixed Encryption API bug Added missing setup steps in Encryption API. Signed-off-by: Bhavik Ameta Acked-by: Ramakrishna Ganeshu Poolla --- lib/sw_services/xilsecure/src/xsecure_aes.c | 29 +++++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/lib/sw_services/xilsecure/src/xsecure_aes.c b/lib/sw_services/xilsecure/src/xsecure_aes.c index 4022b1a7..1bb39e25 100644 --- a/lib/sw_services/xilsecure/src/xsecure_aes.c +++ b/lib/sw_services/xilsecure/src/xsecure_aes.c @@ -288,6 +288,17 @@ void XSecure_AesEncrypt(XSecure_Aes *InstancePtr, u8 *Dst, const u8 *Src, SssCfg = SssDma|SssAes ; XSecure_SssSetup(SssCfg); + /* Clear AES contents by reseting it. */ + XSecure_AesReset(InstancePtr); + + /* Clear AES_KEY_CLEAR bits to avoid clearing of key */ + XSecure_WriteReg(InstancePtr->BaseAddress, + XSECURE_CSU_AES_KEY_CLR_OFFSET, (u32)0x0U); + + if(InstancePtr->KeySel == XSECURE_CSU_AES_KEY_SRC_DEV) + { + XSecure_AesKeySelNLoad(InstancePtr); + } /* Configure the AES for Encryption.*/ XSecure_WriteReg(InstancePtr->BaseAddress, XSECURE_CSU_AES_CFG_OFFSET, @@ -311,14 +322,22 @@ void XSecure_AesEncrypt(XSecure_Aes *InstancePtr, u8 *Dst, const u8 *Src, (Len + XSECURE_SECURE_GCM_TAG_SIZE)/4U, 0); XCsuDma_Transfer(InstancePtr->CsuDmaPtr, XCSUDMA_SRC_CHANNEL, (UINTPTR) Src, - XSECURE_SECURE_GCM_TAG_SIZE/4U, 1); + Len/4U, 1); - /** - * Wait for Dst/Src DMA done. - */ - XCsuDma_WaitForDone(InstancePtr->CsuDmaPtr, XCSUDMA_DST_CHANNEL); + /* Wait for Src DMA done. */ + XCsuDma_WaitForDone(InstancePtr->CsuDmaPtr, XCSUDMA_SRC_CHANNEL); + + /* Acknowledge the transfer has completed */ + XCsuDma_IntrClear(InstancePtr->CsuDmaPtr, XCSUDMA_SRC_CHANNEL, + XCSUDMA_IXR_DONE_MASK); + + /* Wait for Dst DMA done. */ XCsuDma_WaitForDone(InstancePtr->CsuDmaPtr, XCSUDMA_DST_CHANNEL); + /* Acknowledge the transfer has completed */ + XCsuDma_IntrClear(InstancePtr->CsuDmaPtr, XCSUDMA_DST_CHANNEL, + XCSUDMA_IXR_DONE_MASK); + /* Wait for AES encryption completion.*/ XSecure_AesWaitForDone(InstancePtr); }