Bladeren bron

arch: shutdown support for loongarch64 virt platforms

Picked from 1/2:

7bff584c2b1f357a2f1836fcf2c218b847858e04

Add shutdown feature by writing a byte to some specific position.

Original commit message:

Merge remote-tracking branch 'SMS-Derfflinger/fix-syscall' into dockerfile

Picked from 2/2:

9a405f86524226f0b775ba8fde778494d5e0631a

The shutdown will not work if the write is not 1 byte in width.
Fix this by casting the pointer to *mut u8.

Original commit message:

make loongarch64 poweroff work

(cherry picked from commit 7bff584c2b1f357a2f1836fcf2c218b847858e04)
Signed-off-by: greatbridf <greatbridf@icloud.com>
greatbridf 6 maanden geleden
bovenliggende
commit
40ca79574d
1 gewijzigde bestanden met toevoegingen van 9 en 0 verwijderingen
  1. 9 0
      crates/eonix_hal/src/arch/loongarch64/bootstrap.rs

+ 9 - 0
crates/eonix_hal/src/arch/loongarch64/bootstrap.rs

@@ -269,3 +269,12 @@ fn setup_cpu(alloc: impl PageAlloc, hart_id: usize) {
 
 /// TODO
 fn bootstrap_smp(alloc: impl Allocator, page_alloc: &RefCell<BasicPageAlloc>) {}
+
+pub fn shutdown() -> ! {
+    let ged_addr = PAddr::from(0x100E001C);
+    unsafe {
+        let ged_ptr = ArchPhysAccess::as_ptr::<u8>(ged_addr);
+        ged_ptr.write_volatile(0x34);
+        loop {}
+    }
+}