Add support for cacheless PIM

This commit is contained in:
2023-12-11 18:52:02 +01:00
parent 71c766736a
commit beaa224252
5 changed files with 77 additions and 39 deletions

View File

@@ -1,3 +1,4 @@
use aarch64_cpu::asm::barrier;
use core::arch::asm;
use half::f16;
@@ -17,8 +18,13 @@ impl Default for BankArray {
impl BankArray {
pub fn execute_instruction_read(&self) {
self.invalidate_single_bank(0);
if !cfg!(cacheless) {
self.invalidate_single_bank(0);
barrier::dsb(barrier::SY);
}
self.read_data();
barrier::dsb(barrier::SY);
}
pub fn read_data(&self) {
@@ -30,9 +36,18 @@ impl BankArray {
}
pub fn execute_instruction_write(&mut self) {
self.preload_zero();
if !cfg!(cacheless) {
self.preload_zero();
barrier::dsb(barrier::SY);
}
self.write_data();
self.invalidate_flush_single_bank(0);
if !cfg!(cacheless) {
self.invalidate_flush_single_bank(0);
}
barrier::dsb(barrier::SY);
}
pub fn write_data(&mut self) {
@@ -53,7 +68,6 @@ impl BankArray {
unsafe {
// Invalidate first bank
asm!("dc ivac, {val}", val = in(reg) &self.0[idx]);
asm!("dsb sy");
}
}
@@ -67,7 +81,6 @@ impl BankArray {
unsafe {
// Invalidate and flush first bank
asm!("dc civac, {val}", val = in(reg) &self.0[idx]);
asm!("dsb sy");
}
}
@@ -81,7 +94,6 @@ impl BankArray {
unsafe {
// Preload first bank
asm!("dc zva, {val}", val = in(reg) &self.0[idx]);
asm!("dsb sy");
}
}
}