From 7d74d15b184a58f010551571051055ce9ca0023a Mon Sep 17 00:00:00 2001 From: Liu Hancheng Date: Sat, 4 Jan 2025 21:10:32 +0800 Subject: [PATCH] refactor: update DMA pointer types for cryp and hash modules --- embassy-stm32/src/cryp/mod.rs | 8 ++++---- embassy-stm32/src/hash/mod.rs | 15 +++++++++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/embassy-stm32/src/cryp/mod.rs b/embassy-stm32/src/cryp/mod.rs index 8d600c73c..6afe68a39 100644 --- a/embassy-stm32/src/cryp/mod.rs +++ b/embassy-stm32/src/cryp/mod.rs @@ -1785,9 +1785,9 @@ impl<'d, T: Instance, DmaIn, DmaOut> Cryp<'d, T, DmaIn, DmaOut> { assert_eq!(blocks.len() % block_size, 0); // Configure DMA to transfer input to crypto core. let dma_request = dma.request(); - let dst_ptr = T::regs().din().as_ptr(); + let dst_ptr: *mut u32 = T::regs().din().as_ptr(); let num_words = blocks.len() / 4; - let src_ptr = ptr::slice_from_raw_parts(blocks.as_ptr().cast(), num_words); + let src_ptr: *const [u8] = ptr::slice_from_raw_parts(blocks.as_ptr().cast(), num_words); let options = TransferOptions { #[cfg(not(gpdma))] priority: crate::dma::Priority::High, @@ -1825,9 +1825,9 @@ impl<'d, T: Instance, DmaIn, DmaOut> Cryp<'d, T, DmaIn, DmaOut> { assert_eq!((blocks.len() * 4) % block_size, 0); // Configure DMA to transfer input to crypto core. let dma_request = dma.request(); - let dst_ptr = T::regs().din().as_ptr(); + let dst_ptr: *mut u32 = T::regs().din().as_ptr(); let num_words = blocks.len(); - let src_ptr = ptr::slice_from_raw_parts(blocks.as_ptr().cast(), num_words); + let src_ptr: *const [u32] = ptr::slice_from_raw_parts(blocks.as_ptr().cast(), num_words); let options = TransferOptions { #[cfg(not(gpdma))] priority: crate::dma::Priority::High, diff --git a/embassy-stm32/src/hash/mod.rs b/embassy-stm32/src/hash/mod.rs index 4d4a8ec5b..3c2125498 100644 --- a/embassy-stm32/src/hash/mod.rs +++ b/embassy-stm32/src/hash/mod.rs @@ -515,14 +515,21 @@ impl<'d, T: Instance, D> Hash<'d, T, D> { // Configure DMA to transfer input to hash core. let dma_request = self.dma.request(); - let dst_ptr = T::regs().din().as_ptr(); + let dst_ptr: *mut u32 = T::regs().din().as_ptr(); let mut num_words = input.len() / 4; if input.len() % 4 > 0 { num_words += 1; } - let src_ptr = ptr::slice_from_raw_parts(input.as_ptr().cast(), num_words); - let dma_transfer = - unsafe { Transfer::new_write_raw(&mut self.dma, dma_request, src_ptr, dst_ptr, Default::default()) }; + let src_ptr: *const [u8] = ptr::slice_from_raw_parts(input.as_ptr().cast(), num_words); + let dma_transfer = unsafe { + Transfer::new_write_raw( + &mut self.dma, + dma_request, + src_ptr, + dst_ptr as *mut u32, + Default::default(), + ) + }; T::regs().cr().modify(|w| w.set_dmae(true)); // Wait for the transfer to complete.