aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDario Nieuwenhuis <[email protected]>2022-12-25 22:02:20 +0100
committerDario Nieuwenhuis <[email protected]>2022-12-25 22:50:59 +0100
commit56b50f8b62024ba5bfccfa69381e6d98f8b108b5 (patch)
tree0632c71e6c427b091c17023331cde383a27c309e /src
parent432240162ac4131aca8aa7de61d83492f2fe3d32 (diff)
fix bp_read.
It was broken since the switch from u8 to u32.
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/lib.rs b/src/lib.rs
index ba8acd347..8e30522be 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1071,13 +1071,15 @@ where
1071 } 1071 }
1072 1072
1073 #[allow(unused)] 1073 #[allow(unused)]
1074 async fn bp_read(&mut self, mut addr: u32, mut data: &mut [u32]) { 1074 async fn bp_read(&mut self, mut addr: u32, mut data: &mut [u8]) {
1075 // It seems the HW force-aligns the addr 1075 // It seems the HW force-aligns the addr
1076 // to 2 if data.len() >= 2 1076 // to 2 if data.len() >= 2
1077 // to 4 if data.len() >= 4 1077 // to 4 if data.len() >= 4
1078 // To simplify, enforce 4-align for now. 1078 // To simplify, enforce 4-align for now.
1079 assert!(addr % 4 == 0); 1079 assert!(addr % 4 == 0);
1080 1080
1081 let mut buf = [0u32; BACKPLANE_MAX_TRANSFER_SIZE / 4];
1082
1081 while !data.is_empty() { 1083 while !data.is_empty() {
1082 // Ensure transfer doesn't cross a window boundary. 1084 // Ensure transfer doesn't cross a window boundary.
1083 let window_offs = addr & BACKPLANE_ADDRESS_MASK; 1085 let window_offs = addr & BACKPLANE_ADDRESS_MASK;
@@ -1097,15 +1099,17 @@ where
1097 bus.read(&mut junk).await?; 1099 bus.read(&mut junk).await?;
1098 1100
1099 // Read data 1101 // Read data
1100 bus.read(&mut data[..len / 4]).await?; 1102 bus.read(&mut buf[..(len + 3) / 4]).await?;
1101 Ok(()) 1103 Ok(())
1102 }) 1104 })
1103 .await 1105 .await
1104 .unwrap(); 1106 .unwrap();
1105 1107
1108 data[..len].copy_from_slice(&slice8_mut(&mut buf)[..len]);
1109
1106 // Advance ptr. 1110 // Advance ptr.
1107 addr += len as u32; 1111 addr += len as u32;
1108 data = &mut data[len / 4..]; 1112 data = &mut data[len..];
1109 } 1113 }
1110 } 1114 }
1111 1115