Skip to content

Commit 6c2977a

Browse files
committed
probe: print MPU config
1 parent f47c9ec commit 6c2977a

File tree

2 files changed

+222
-1
lines changed

2 files changed

+222
-1
lines changed

cmd/probe/src/lib.rs

Lines changed: 151 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,6 @@ fn probecmd(context: &mut humility::ExecutionContext) -> Result<()> {
407407
}
408408
}
409409

410-
411410
if part.has_tz() {
412411
// Temporarily force banked register accesses to Secure versions
413412
let mut dscsr = DSCSR::read(core)?;
@@ -467,6 +466,157 @@ fn probecmd(context: &mut humility::ExecutionContext) -> Result<()> {
467466
}
468467
}
469468

469+
if part.has_tz() {
470+
// Temporarily force banked register accesses to Secure versions
471+
let mut dscsr = DSCSR::read(core)?;
472+
dscsr.set_sbrsel(true);
473+
dscsr.set_sbrselen(true);
474+
dscsr.write(core)?;
475+
476+
{
477+
let mpu_type = MPU_TYPE::read(core)?;
478+
print("MPU_S_TYPE", format!("0x{:x}", mpu_type.0));
479+
480+
if mpu_type.dregion() > 0 {
481+
let mpu_ctrl = MPU_CTRL::read(core)?;
482+
humility::msg!(
483+
"{:>12} => 0x{:8}",
484+
"MPU_S_CTRL",
485+
format!("{:x}", mpu_ctrl.0)
486+
);
487+
488+
let mpu_mair0 = MPU_MAIR0::read(core)?;
489+
humility::msg!(
490+
"{:>12} => 0x{:8}",
491+
"MPU_S_MAIR0",
492+
format!("{:x}", mpu_mair0.0)
493+
);
494+
495+
let mpu_mair1 = MPU_MAIR1::read(core)?;
496+
humility::msg!(
497+
"{:>12} => 0x{:8}",
498+
"MPU_S_MAIR1",
499+
format!("{:x}", mpu_mair1.0)
500+
);
501+
}
502+
503+
for rnr in 0..mpu_type.dregion() {
504+
let mut mpu_rnr = MPU_RNR(0);
505+
mpu_rnr.set_region(rnr);
506+
mpu_rnr.write(core)?;
507+
508+
let mpu_rbar = MPU_RBAR::read(core)?;
509+
humility::msg!(
510+
"{:>12} => 0x{:8}",
511+
format!("MPU_S_RBAR{}", rnr),
512+
format!("{:x}", mpu_rbar.0)
513+
);
514+
515+
let mpu_rlar = MPU_RLAR::read(core)?;
516+
humility::msg!(
517+
"{:>12} => 0x{:8}",
518+
format!("MPU_S_RLAR{}", rnr),
519+
format!("{:x}", mpu_rlar.0)
520+
);
521+
}
522+
}
523+
524+
// Now switch to the Non-Secure versions
525+
dscsr.set_sbrsel(false);
526+
dscsr.write(core)?;
527+
528+
{
529+
let mpu_type = MPU_TYPE::read(core)?;
530+
print("MPU_NS_TYPE", format!("0x{:x}", mpu_type.0));
531+
532+
if mpu_type.dregion() > 0 {
533+
let mpu_ctrl = MPU_CTRL::read(core)?;
534+
humility::msg!(
535+
"{:>12} => 0x{:8}",
536+
"MPU_S_CTRL",
537+
format!("{:x}", mpu_ctrl.0)
538+
);
539+
540+
let mpu_mair0 = MPU_MAIR0::read(core)?;
541+
humility::msg!(
542+
"{:>12} => 0x{:8}",
543+
"MPU_NS_MAIR0",
544+
format!("{:x}", mpu_mair0.0)
545+
);
546+
547+
let mpu_mair1 = MPU_MAIR1::read(core)?;
548+
humility::msg!(
549+
"{:>12} => 0x{:8}",
550+
"MPU_NS_MAIR1",
551+
format!("{:x}", mpu_mair1.0)
552+
);
553+
}
554+
555+
for rnr in 0..mpu_type.dregion() {
556+
let mut mpu_rnr = MPU_RNR(0);
557+
mpu_rnr.set_region(rnr);
558+
mpu_rnr.write(core)?;
559+
560+
let mpu_rbar = MPU_RBAR::read(core)?;
561+
humility::msg!(
562+
"{:>12} => 0x{:8}",
563+
format!("MPU_NS_RBAR{}", rnr),
564+
format!("{:x}", mpu_rbar.0)
565+
);
566+
567+
let mpu_rlar = MPU_RLAR::read(core)?;
568+
humility::msg!(
569+
"{:>12} => 0x{:8}",
570+
format!("MPU_NS_RLAR{}", rnr),
571+
format!("{:x}", mpu_rlar.0)
572+
);
573+
}
574+
}
575+
576+
// Finally, switch back to current security domain versions
577+
dscsr.set_sbrselen(false);
578+
dscsr.write(core)?;
579+
} else {
580+
let mpu_type = MPU_TYPE::read(core)?;
581+
print("MPU_TYPE", format!("0x{:x}", mpu_type.0));
582+
583+
if mpu_type.dregion() > 0 {
584+
let mpu_mair0 = MPU_MAIR0::read(core)?;
585+
humility::msg!(
586+
"{:>12} => 0x{:8}",
587+
"MPU_MAIR0",
588+
format!("{:x}", mpu_mair0.0)
589+
);
590+
591+
let mpu_mair1 = MPU_MAIR1::read(core)?;
592+
humility::msg!(
593+
"{:>12} => 0x{:8}",
594+
"MPU_MAIR1",
595+
format!("{:x}", mpu_mair1.0)
596+
);
597+
}
598+
599+
for rnr in 0..mpu_type.dregion() {
600+
let mut mpu_rnr = MPU_RNR(0);
601+
mpu_rnr.set_region(rnr);
602+
mpu_rnr.write(core)?;
603+
604+
let mpu_rbar = MPU_RBAR::read(core)?;
605+
humility::msg!(
606+
"{:>12} => 0x{:8}",
607+
format!("MPU_RBAR{}", rnr),
608+
format!("{:x}", mpu_rbar.0)
609+
);
610+
611+
let mpu_rlar = MPU_RLAR::read(core)?;
612+
humility::msg!(
613+
"{:>12} => 0x{:8}",
614+
format!("MPU_RLAR{}", rnr),
615+
format!("{:x}", mpu_rlar.0)
616+
);
617+
}
618+
}
619+
470620
if !dhcsr.halted() {
471621
core.run()?;
472622
}

humility-arch-cortex/src/debug.rs

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,77 @@ register!(MVFR0, 0xe000_ef40,
491491
pub simd_registers, _: 3, 0;
492492
);
493493

494+
register!(MPU_TYPE, 0xe000ed90,
495+
#[derive(Copy, Clone)]
496+
#[allow(non_camel_case_types)]
497+
pub struct MPU_TYPE(u32);
498+
impl Debug;
499+
pub dregion, _: 15, 8;
500+
pub separate, _: 0;
501+
);
502+
503+
register!(MPU_RNR, 0xe000ed98,
504+
#[derive(Copy, Clone)]
505+
#[allow(non_camel_case_types)]
506+
pub struct MPU_RNR(u32);
507+
impl Debug;
508+
pub region, set_region: 7, 0;
509+
);
510+
511+
register!(MPU_CTRL, 0xe000ed94,
512+
#[derive(Copy, Clone)]
513+
#[allow(non_camel_case_types)]
514+
pub struct MPU_CTRL(u32);
515+
impl Debug;
516+
pub privdefena, _: 2;
517+
pub hfnmiena, _: 1;
518+
pub enable, _: 0;
519+
);
520+
521+
register!(MPU_MAIR0, 0xe000edc0,
522+
#[derive(Copy, Clone)]
523+
#[allow(non_camel_case_types)]
524+
pub struct MPU_MAIR0(u32);
525+
impl Debug;
526+
pub attr3, _: 31, 24;
527+
pub attr2, _: 23, 16;
528+
pub attr1, _: 15, 8;
529+
pub attr0, _: 7, 0;
530+
);
531+
532+
register!(MPU_MAIR1, 0xe000edc4,
533+
#[derive(Copy, Clone)]
534+
#[allow(non_camel_case_types)]
535+
pub struct MPU_MAIR1(u32);
536+
impl Debug;
537+
pub attr7, _: 31, 24;
538+
pub attr6, _: 23, 16;
539+
pub attr5, _: 15, 8;
540+
pub attr4, _: 7, 0;
541+
);
542+
543+
register!(MPU_RBAR, 0xe000ed9c,
544+
#[derive(Copy, Clone)]
545+
#[allow(non_camel_case_types)]
546+
pub struct MPU_RBAR(u32);
547+
impl Debug;
548+
pub base, _: 31, 5;
549+
pub sh, _: 4, 3;
550+
pub ap, _: 2, 1;
551+
pub xn, _: 0;
552+
);
553+
554+
register!(MPU_RLAR, 0xe000eda0,
555+
#[derive(Copy, Clone)]
556+
#[allow(non_camel_case_types)]
557+
pub struct MPU_RLAR(u32);
558+
impl Debug;
559+
pub limit, _: 31, 5;
560+
pub pxn, _: 4;
561+
pub attr_index, _: 3, 1;
562+
pub en, _: 0;
563+
);
564+
494565
register!(SAU_TYPE, 0xe000edd4,
495566
#[derive(Copy, Clone)]
496567
#[allow(non_camel_case_types)]

0 commit comments

Comments
 (0)