Add memory barrier for DMA transfer in AES/DES alter.

pull/5841/head
ccli8 2017-11-23 11:29:59 +08:00 committed by adbridge
parent c8c980473a
commit da84f715bf
4 changed files with 32 additions and 0 deletions

View File

@ -177,6 +177,14 @@ static void __nvt_aes_crypt( mbedtls_aes_context *ctx,
AES_SetDMATransfer(0, (uint32_t)pIn, (uint32_t)pOut, dataSize);
g_AES_done = 0;
/* Ensure memory accesses above are completed before DMA is started
*
* Replacing __DSB() with __DMB() is also OK in this case.
*
* Refer to "multi-master systems" section with DMA in:
* https://static.docs.arm.com/dai0321/a/DAI0321A_programming_guide_memory_barriers_for_m_profile.pdf
*/
__DSB();
AES_Start(0, CRYPTO_DMA_ONE_SHOT);
while (!g_AES_done);

View File

@ -407,6 +407,14 @@ static int mbedtls_des_docrypt(uint16_t keyopt, uint8_t key[3][MBEDTLS_DES_KEY_S
TDES_SetDMATransfer(0, (uint32_t) dmabuf_in, (uint32_t) dmabuf_out, data_len);
/* Ensure memory accesses above are completed before DMA is started
*
* Replacing __DSB() with __DMB() is also OK in this case.
*
* Refer to "multi-master systems" section with DMA in:
* https://static.docs.arm.com/dai0321/a/DAI0321A_programming_guide_memory_barriers_for_m_profile.pdf
*/
__DSB();
/* Start enc/dec */
TDES_Start(0, CRYPTO_DMA_ONE_SHOT);
while (CRPT->TDES_STS & CRPT_TDES_STS_BUSY_Msk);

View File

@ -177,6 +177,14 @@ static void __nvt_aes_crypt( mbedtls_aes_context *ctx,
AES_SetDMATransfer(0, (uint32_t)pIn, (uint32_t)pOut, dataSize);
g_AES_done = 0;
/* Ensure memory accesses above are completed before DMA is started
*
* Replacing __DSB() with __DMB() is also OK in this case.
*
* Refer to "multi-master systems" section with DMA in:
* https://static.docs.arm.com/dai0321/a/DAI0321A_programming_guide_memory_barriers_for_m_profile.pdf
*/
__DSB();
AES_Start(0, CRYPTO_DMA_ONE_SHOT);
while (!g_AES_done);

View File

@ -407,6 +407,14 @@ static int mbedtls_des_docrypt(uint16_t keyopt, uint8_t key[3][MBEDTLS_DES_KEY_S
TDES_SetDMATransfer(0, (uint32_t) dmabuf_in, (uint32_t) dmabuf_out, data_len);
/* Ensure memory accesses above are completed before DMA is started
*
* Replacing __DSB() with __DMB() is also OK in this case.
*
* Refer to "multi-master systems" section with DMA in:
* https://static.docs.arm.com/dai0321/a/DAI0321A_programming_guide_memory_barriers_for_m_profile.pdf
*/
__DSB();
/* Start enc/dec */
TDES_Start(0, CRYPTO_DMA_ONE_SHOT);
while (CRPT->TDES_STS & CRPT_TDES_STS_BUSY_Msk);