|  | @@ -11,17 +11,15 @@ cfg_if::cfg_if! {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +use crate::fail;
 | 
	
		
			
				|  |  |  use alloc::{format, vec};
 | 
	
		
			
				|  |  |  #[allow(unused)]
 | 
	
		
			
				|  |  |  use core::arch::{asm, naked_asm};
 | 
	
		
			
				|  |  |  use core::{ops::Range, usize};
 | 
	
		
			
				|  |  | -use crate::fail;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  use riscv::register::mstatus;
 | 
	
		
			
				|  |  |  use serde::Serialize;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -use pmpm::{PmpSlice, get_pmp_entry, set_pmp_entry};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  pub struct BootInfo {
 | 
	
		
			
				|  |  |      pub next_address: usize,
 | 
	
		
			
				|  |  |      pub mpp: mstatus::MPP,
 | 
	
	
		
			
				|  | @@ -213,67 +211,30 @@ pub fn log_pmp_cfg(memory_range: &Range<usize>) {
 | 
	
		
			
				|  |  |              "PMP", "Range", "Permission", "Address"
 | 
	
		
			
				|  |  |          );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        set_pmp_entry(
 | 
	
		
			
				|  |  | -            2,
 | 
	
		
			
				|  |  | -            PmpSlice::new(0, SBI_START_ADDRESS, 0),
 | 
	
		
			
				|  |  | -            Range::TOR,
 | 
	
		
			
				|  |  | -            Permission::RWX,
 | 
	
		
			
				|  |  | -        );
 | 
	
		
			
				|  |  | -        set_pmp_entry(
 | 
	
		
			
				|  |  | -            3,
 | 
	
		
			
				|  |  | -            PmpSlice::new(0, RODATA_START_ADDRESS, 0),
 | 
	
		
			
				|  |  | -            Range::TOR,
 | 
	
		
			
				|  |  | -            Permission::NONE,
 | 
	
		
			
				|  |  | -        );
 | 
	
		
			
				|  |  | -        set_pmp_entry(
 | 
	
		
			
				|  |  | -            4,
 | 
	
		
			
				|  |  | -            PmpSlice::new(0, RODATA_END_ADDRESS, 0),
 | 
	
		
			
				|  |  | -            Range::TOR,
 | 
	
		
			
				|  |  | -            Permission::NONE,
 | 
	
		
			
				|  |  | -        );
 | 
	
		
			
				|  |  | -        set_pmp_entry(
 | 
	
		
			
				|  |  | -            5,
 | 
	
		
			
				|  |  | -            PmpSlice::new(0, SBI_END_ADDRESS, 0),
 | 
	
		
			
				|  |  | -            Range::TOR,
 | 
	
		
			
				|  |  | -            Permission::NONE,
 | 
	
		
			
				|  |  | -        );
 | 
	
		
			
				|  |  | -        set_pmp_entry(
 | 
	
		
			
				|  |  | -            6,
 | 
	
		
			
				|  |  | -            PmpSlice::new(0, memory_range.end, 0),
 | 
	
		
			
				|  |  | -            Range::TOR,
 | 
	
		
			
				|  |  | -            Permission::RWX,
 | 
	
		
			
				|  |  | +        info!("{:<10} {:<10} {:<15} 0x{:08x}", "PMP 0:", "OFF", "NONE", 0);
 | 
	
		
			
				|  |  | +        info!(
 | 
	
		
			
				|  |  | +            "{:<10} {:<10} {:<15} 0x{:08x} - 0x{:08x}",
 | 
	
		
			
				|  |  | +            "PMP 1-2:", "TOR", "RWX/RWX", memory_range.start, SBI_START_ADDRESS
 | 
	
		
			
				|  |  |          );
 | 
	
		
			
				|  |  | -        set_pmp_entry(
 | 
	
		
			
				|  |  | -            7,
 | 
	
		
			
				|  |  | -            PmpSlice::new(0, usize::MAX, 0),
 | 
	
		
			
				|  |  | -            Range::TOR,
 | 
	
		
			
				|  |  | -            Permission::RWX,
 | 
	
		
			
				|  |  | +        info!(
 | 
	
		
			
				|  |  | +            "{:<10} {:<10} {:<15} 0x{:08x} - 0x{:08x} - 0x{:08x}",
 | 
	
		
			
				|  |  | +            "PMP 3-5:",
 | 
	
		
			
				|  |  | +            "TOR",
 | 
	
		
			
				|  |  | +            "NONE/NONE",
 | 
	
		
			
				|  |  | +            RODATA_START_ADDRESS,
 | 
	
		
			
				|  |  | +            RODATA_END_ADDRESS,
 | 
	
		
			
				|  |  | +            SBI_END_ADDRESS
 | 
	
		
			
				|  |  |          );
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        set_pmp_entry(
 | 
	
		
			
				|  |  | -            8,
 | 
	
		
			
				|  |  | -            PmpSlice::new(memory_range.end - memory_range.start, memory_range.start, 0),
 | 
	
		
			
				|  |  | -            Range::NAPOT,
 | 
	
		
			
				|  |  | -            Permission::RWX,
 | 
	
		
			
				|  |  | +        info!(
 | 
	
		
			
				|  |  | +            "{:<10} {:<10} {:<15} 0x{:08x}",
 | 
	
		
			
				|  |  | +            "PMP 6:", "TOR", "RWX", memory_range.end
 | 
	
		
			
				|  |  |          );
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -pub fn log_pmp_cfg(memory_range: &Range<usize>) {
 | 
	
		
			
				|  |  | -    info!("PMP Configuration");
 | 
	
		
			
				|  |  | -    info!(
 | 
	
		
			
				|  |  | -        "{:<10} {:<10} {:<15} {:<30}",
 | 
	
		
			
				|  |  | -        "PMP", "Range", "Permission", "Address"
 | 
	
		
			
				|  |  | -    );
 | 
	
		
			
				|  |  | -    for i in 0..16 {
 | 
	
		
			
				|  |  | -        let (slice, config) = get_pmp_entry(i);
 | 
	
		
			
				|  |  |          info!(
 | 
	
		
			
				|  |  | -            "{:<10} 0x{:<10b} 0x{:<15b} 0x{:08x}+0x{:08x}",
 | 
	
		
			
				|  |  | -            format_args!("PMP {}", i),
 | 
	
		
			
				|  |  | -            config.range as u8,
 | 
	
		
			
				|  |  | -            config.permission as u8,
 | 
	
		
			
				|  |  | -            slice.lo(),
 | 
	
		
			
				|  |  | -            slice.size()
 | 
	
		
			
				|  |  | +            "{:<10} {:<10} {:<15} 0x{:08x}",
 | 
	
		
			
				|  |  | +            "PMP 7:",
 | 
	
		
			
				|  |  | +            "TOR",
 | 
	
		
			
				|  |  | +            "RWX",
 | 
	
		
			
				|  |  | +            usize::MAX
 | 
	
		
			
				|  |  |          );
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  }
 |