Add support for cacheless PIM
This commit is contained in:
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user