fix bp_read.

It was broken since the switch from u8 to u32.
This commit is contained in:
Dario Nieuwenhuis 2022-12-25 22:02:20 +01:00
parent 432240162a
commit 56b50f8b62

View File

@ -1071,13 +1071,15 @@ where
} }
#[allow(unused)] #[allow(unused)]
async fn bp_read(&mut self, mut addr: u32, mut data: &mut [u32]) { async fn bp_read(&mut self, mut addr: u32, mut data: &mut [u8]) {
// It seems the HW force-aligns the addr // It seems the HW force-aligns the addr
// to 2 if data.len() >= 2 // to 2 if data.len() >= 2
// to 4 if data.len() >= 4 // to 4 if data.len() >= 4
// To simplify, enforce 4-align for now. // To simplify, enforce 4-align for now.
assert!(addr % 4 == 0); assert!(addr % 4 == 0);
let mut buf = [0u32; BACKPLANE_MAX_TRANSFER_SIZE / 4];
while !data.is_empty() { while !data.is_empty() {
// Ensure transfer doesn't cross a window boundary. // Ensure transfer doesn't cross a window boundary.
let window_offs = addr & BACKPLANE_ADDRESS_MASK; let window_offs = addr & BACKPLANE_ADDRESS_MASK;
@ -1097,15 +1099,17 @@ where
bus.read(&mut junk).await?; bus.read(&mut junk).await?;
// Read data // Read data
bus.read(&mut data[..len / 4]).await?; bus.read(&mut buf[..(len + 3) / 4]).await?;
Ok(()) Ok(())
}) })
.await .await
.unwrap(); .unwrap();
data[..len].copy_from_slice(&slice8_mut(&mut buf)[..len]);
// Advance ptr. // Advance ptr.
addr += len as u32; addr += len as u32;
data = &mut data[len / 4..]; data = &mut data[len..];
} }
} }