浏览代码

Merge pull request #139 from jackfiled/feat-pflash-boot

feat(prototyper): support boot from pflash on QEMU virt platform.
Luo Jia / Zhouqi Jiang 5 天之前
父节点
当前提交
2452006fd9
共有 1 个文件被更改,包括 8 次插入2 次删除
  1. 8 2
      prototyper/prototyper/src/firmware/dynamic.rs

+ 8 - 2
prototyper/prototyper/src/firmware/dynamic.rs

@@ -62,7 +62,11 @@ pub struct DynamicInfo {
 // https://github.com/riscv-software-src/opensbi/blob/019a8e69a1dc0c0f011fabd0372e1ba80e40dd7c/include/sbi/fw_dynamic.h#L75
 
 const DYNAMIC_INFO_INVALID_ADDRESSES: usize = 0x00000000;
-const NEXT_ADDR_VALID_ADDRESSES: Range<usize> = 0x80000000..0x90000000;
+const NEXT_ADDR_VALID_ADDRESSES: [Range<usize>; 2] = [
+    // Qemu Virt pflash address
+    0x20000000..0x22000000,
+    0x80000000..0x90000000,
+];
 pub(crate) const MAGIC: usize = 0x4942534f;
 const SUPPORTED_VERSION: Range<usize> = 0..3;
 
@@ -121,7 +125,9 @@ pub fn mpp_next_addr(info: &DynamicInfo) -> Result<(mstatus::MPP, usize), Dynami
     };
 
     // fail safe, errors will be aggregated after whole checking process.
-    let next_addr_valid = NEXT_ADDR_VALID_ADDRESSES.contains(&info.next_addr);
+    let next_addr_valid = NEXT_ADDR_VALID_ADDRESSES
+        .iter()
+        .any(|x| x.contains(&info.next_addr));
     let mpp_valid = matches!(info.next_mode, 0 | 1 | 3);
 
     if !next_addr_valid {