|
@@ -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 {
|