refactor: update DMA pointer types for cryp and hash modules

This commit is contained in:
Liu Hancheng 2025-01-04 21:10:32 +08:00
parent ff526e1604
commit 7d74d15b18
2 changed files with 15 additions and 8 deletions

View File

@ -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,

View File

@ -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.