diff options
| author | Dario Nieuwenhuis <[email protected]> | 2022-12-25 22:02:20 +0100 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2022-12-25 22:50:59 +0100 |
| commit | 56b50f8b62024ba5bfccfa69381e6d98f8b108b5 (patch) | |
| tree | 0632c71e6c427b091c17023331cde383a27c309e /src | |
| parent | 432240162ac4131aca8aa7de61d83492f2fe3d32 (diff) | |
fix bp_read.
It was broken since the switch from u8 to u32.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib.rs | 10 |
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 | ||
