[RFC PATCH v3 0/6] Extend the reserved PMP entries
Yu-Chien Peter Lin
peter.lin at sifive.com
Sun Nov 30 03:16:37 PST 2025
This series extends OpenSBI to support multiple reserved PMP entries
that platforms can configure for critical memory protection needs.
Key characteristics of reserved PMP entries:
- Have highest priority
- Available in ToR mode for platform-specific use cases
- Persistent across domain context switches (cannot be disabled)
- Support runtime allocation through a dedicated allocator API
Motivation:
Reserved PMP entries address the need to protect memory regions that
cannot be covered by domain-managed PMP entries. For example, platforms
can enforce PMA_UNSAFE regions [1] parsed from the device tree. These
regions often cannot be precisely covered by one or two NAPOT entries,
so using reserved entries allocated in ToR mode optimizes PMP usage.
Additionally, reserved entries remain unchanged across domain transitions
and persist until hart reset, ensure consistent protections.
Use case demonstration:
This series includes a demonstration on the SiFive FU540 platform, which
uses a reserved PMP entry to protect the memory region at 0x0-0x1000
during early boot. This serves as a reference implementation showing how
platforms can leverage the reserved PMP allocator.
Changes v2->v3:
- Instead of using reserved-pmp-count DT property, this version adds
sbi_platform_reserved_pmp_count() to determine the reserved PMP count
[1] https://lore.kernel.org/all/20251113014656.2605447-20-samuel.holland@sifive.com/
Yu-Chien Peter Lin (6):
include: sbi: sbi_platform: add sbi_platform_reserved_pmp_count()
lib: sbi_init: print total and reserved PMP counts
lib: sbi: riscv_asm: support reserved PMP allocator
lib: sbi: sbi_hart: extend PMP handling to support multiple reserved
entries
lib: sbi: sbi_init: call sbi_hart_init() earlier
[TEMP] demonstrate hole protection using reserved PMP
include/sbi/riscv_asm.h | 6 +++
include/sbi/sbi_hart.h | 15 ------
include/sbi/sbi_platform.h | 35 +++++++++++++
lib/sbi/riscv_asm.c | 92 +++++++++++++++++++++++++++++++++
lib/sbi/sbi_domain_context.c | 6 ++-
lib/sbi/sbi_hart.c | 57 ++++++++++++++------
lib/sbi/sbi_init.c | 15 +++---
platform/generic/sifive/fu540.c | 56 ++++++++++++++++++++
8 files changed, 243 insertions(+), 39 deletions(-)
--
2.39.3
More information about the opensbi
mailing list