Skip to content

Commit 54ea181

Browse files
committed
fix(port_arm): don't invalidate the same cache level twice
I missed a certain part of the example code.
1 parent c3bcdd9 commit 54ea181

File tree

1 file changed

+5
-5
lines changed
  • src/constance_port_arm/src/startup

1 file changed

+5
-5
lines changed

src/constance_port_arm/src/startup/imp.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,14 @@ extern "C" fn reset_handler1<System: EntryPoint + StartupOptions>() {
9191
// coherency.”
9292
let clidr = arm::CLIDR.extract();
9393
let level_of_coherency = clidr.read(arm::CLIDR::LoC);
94-
for level_and_d in 0..level_of_coherency * 2 {
95-
let cache_type = (clidr.get() >> ((level_and_d >> 1) * 3)) & 0b111;
94+
for level in 0..level_of_coherency {
95+
let cache_type = (clidr.get() >> (level * 3)) & 0b111;
9696

9797
// Does this cache level include a data or unified cache?
9898
if cache_type >= 2 {
99-
// Level = level_and_d / 2, InD = level_and_d % 2
99+
// Level = level, InD = 0
100100
// Use `isb` to make sure the change to CSSELR takes effect.
101-
arm::CSSELR.set(level_and_d);
101+
arm::CSSELR.set(level * 2);
102102
unsafe { llvm_asm!("isb") };
103103

104104
let cssidr = arm::CCSIDR.extract();
@@ -110,7 +110,7 @@ extern "C" fn reset_handler1<System: EntryPoint + StartupOptions>() {
110110

111111
for way in (0..=max_way_index).rev() {
112112
for set in (0..=max_set_index).rev() {
113-
let set_way = level_and_d | (way << way_offset) | (set << log2_line_size);
113+
let set_way = (level << 1) | (way << way_offset) | (set << log2_line_size);
114114

115115
// Invalidate by set/way
116116
arm::DCISW.set(set_way);

0 commit comments

Comments
 (0)