OpenSBI Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH v2 0/5] Add Smsdid and Smmpt supervisor domain protection
@ 2026-07-27 13:55 Rahul Pathak
  2026-07-27 13:55 ` [RFC PATCH v2 1/5] riscv: Add Smsdid and Smmpt hart extensions Rahul Pathak
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Rahul Pathak @ 2026-07-27 13:55 UTC (permalink / raw)
  To: opensbi; +Cc: rahul.pathak, rahul

This series adds OpenSBI support for the RISC-V SMMPT specification
sub-extensions - Smsdid (supervisor domain ID) and
Smmpt (supervisor domain memory protection).

Together these let M-mode firmware confine each supervisor domain to a
physical address space that is enforced in hardware, via a per domain
memory protection table (MPT) selected by the mmpt CSR.

Every supervisor domain gets its own MPT built from the memory regions
of its SBI domain. Per-region XWR permissions are derived from the
region's S/U access flags from SBI domain, so a region that does not have S/U
access is mapped as an deny instead of skipped.

The Root domain maps all physical memory, with the firmware region explicitly
denied to S-mode. Regions may be shared between domains, each side keeping
its own permissions.

Testing:
Booted Linux when Smmpt was active. The boot dump shows the expected per region
permissions. Also checked with a small self-test in Qemu which confirms the
firmware region denied and the kernel region permitted from S-mode.

The Qemu RISC-V Virt machine was used to test this. The new cli args
required to be passed to Qemu are -

./qemu-system-riscv64 -nographic -M virt -cpu rv64,x-smsdid=true,x-smmpt=true

Please note that extra some logs in OpenSBI and Qemu are added for testing
which will be removed later.

Boot Logs:

sbi_mpt: mode=Smmpt52    SDIDLEN=6 max_domains=64
root_size=0x1000 root_align=0x1000
fw 0x0000000080000000+0x19e000  pool=global heap
SDID  0 root=0x0000000080098000 regions=9 dom=root
S-Domain0 Region01          : 0x0000000080000000+0x80000           : xwr=0 (---)
S-Domain0 Region02          : 0x0000000080000000+0x200000          : xwr=0 (---)
S-Domain0 Region03          : 0x0000000000100000+0x1000            : xwr=3 (RW-)
S-Domain0 Region04          : 0x0000000010000000+0x1000            : xwr=3 (RW-)
S-Domain0 Region05          : 0x0000000002000000+0x10000           : xwr=0 (---)
S-Domain0 Region06          : 0x000000000c400000+0x200000          : xwr=3 (RW-)
S-Domain0 Region07          : 0x000000000c000000+0x400000          : xwr=3 (RW-)
S-Domain0 Region08          : 0x0000000080000000+0x19e000          : xwr=0 (---) [LOCKED]
S-Domain0 Default           : Rest of the address space            : xwr=7 (RWX)   [baseline, overlay by regions above]
Boot HART ID                : 0
Boot HART Domain            : root
Boot HART Priv Version      : v1.12
Boot HART Base ISA          : rv64imafdch
Boot HART ISA Extensions    : sstc,zicntr,zihpm,zicboz,zicbom,sdtrig,svadu,f,d,smsdid,smmpt
Boot HART PMP Count         : 16
Boot HART PMP Granularity   : 2 bits
Boot HART PMP Address Bits  : 54
Boot HART MHPM Info         : 16 (0x0007fff8)
Boot HART Debug Triggers    : 2 triggers
Boot HART MIDELEG           : 0x0000000000001666
Boot HART MEDELEG           : 0x0000000000f4b509

The corresponding Qemu Smmpt support from LIU Zhiwei
https://patchew.org/QEMU/20260723200325.24969-1-zhiwei._5Fliu@linux.alibaba.com/

This is part of collaboration work for RISC-V SMMTT development. More
details are here: 
https://lists.gnu.org/archive/html/qemu-riscv/2026-07/msg01018.html

These OpenSBI changes are also present in github -
https://github.com/pathakraul/opensbi/tree/rpathak_smmpt_v2

Further Development:
This series add base infrastructure for Smsdid and Smmpt. Development
and testing with more then one Supervisor Domain. Extensive testing with
all the modes and other platform configurations.

v1 -> v2:
	1. Rebase to latest master
	2. Change probe order between mode and sdidlen.
	3. Add sbi_mpt_query_access() function.
	4. Formatting changes.

Rahul Pathak (5):
  riscv: Add Smsdid and Smmpt hart extensions
  mpt: Add Smsdid and Smmpt supervisor domain core
  platform/generic: Initialise MPT at boot
  sbi: hsm: Activate MPT for domain on hart start/resume
  sbi: init: Print supervisor domains at boot

 include/sbi/sbi_hart.h      |   4 +
 include/sbi/sbi_mpt.h       | 334 ++++++++++++
 lib/sbi/objects.mk          |   2 +
 lib/sbi/sbi_hart.c          |   2 +
 lib/sbi/sbi_hsm.c           |   7 +
 lib/sbi/sbi_init.c          |   4 +
 lib/sbi/sbi_mpt.c           | 926 +++++++++++++++++++++++++++++++++
 lib/sbi/sbi_mpt_mode.c      | 997 ++++++++++++++++++++++++++++++++++++
 platform/generic/platform.c | 101 ++++
 9 files changed, 2377 insertions(+)
 create mode 100644 include/sbi/sbi_mpt.h
 create mode 100644 lib/sbi/sbi_mpt.c
 create mode 100644 lib/sbi/sbi_mpt_mode.c

-- 
2.51.0


-- 
opensbi mailing list
opensbi@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/opensbi

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2026-08-22 12:19 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-27 13:55 [RFC PATCH v2 0/5] Add Smsdid and Smmpt supervisor domain protection Rahul Pathak
2026-07-27 13:55 ` [RFC PATCH v2 1/5] riscv: Add Smsdid and Smmpt hart extensions Rahul Pathak
2026-07-27 13:56 ` [RFC PATCH v2 2/5] mpt: Add Smsdid and Smmpt supervisor domain core Rahul Pathak
2026-08-14 18:28   ` Pawandeep Oza
2026-08-22 12:18     ` Rahul Pathak
2026-07-27 13:56 ` [RFC PATCH v2 3/5] platform/generic: Initialise MPT at boot Rahul Pathak
2026-07-28 17:53   ` Pawandeep Oza
2026-07-29  2:37     ` Rahul Pathak
2026-07-27 13:56 ` [RFC PATCH v2 4/5] sbi: hsm: Activate MPT for domain on hart start/resume Rahul Pathak
2026-07-28 18:18   ` Pawandeep Oza
2026-07-27 13:56 ` [RFC PATCH v2 5/5] sbi: init: Print supervisor domains at boot Rahul Pathak

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox