Yu-Chien Peter Lin and Anup Patel
f36acaeb80
lib: utils: fdt_domain: add root-regions-inheritance policy
...
Introduce root-regions-inheritance DT property to control
copying of root domain memregions. Support 'all' and 'm-only'
modes, always inheriting firmware and M-only regions; behavior
matches m-only policy when property is absent.
Signed-off-by: Yu-Chien Peter Lin <peter.lin@sifive.com >
Reviewed-by: Anup Patel <anup@brainfault.org >
Link: https://lore.kernel.org/r/20260516072906.1427203-1-peter.lin@sifive.com
Signed-off-by: Anup Patel <anup@brainfault.org >
2026-05-18 18:20:50 +05:30
Yu-Chien Peter Lin and Anup Patel
8cd279e321
lib: fdt_domain: Default boot-hart to coldboot HART for multi-domain boot
...
When "boot-hart" is not specified, dom->boot_hartid was left as -1U,
causing domain context switching to fail. Default it to the coldboot
HART to enable SMP boot in multi-domain setups, consistent with how
next-arg1 is handled.
Also update its description in domain_support.md.
Signed-off-by: Yu-Chien Peter Lin <peter.lin@sifive.com >
Reviewed-by: Anup Patel <anup@brainfault.org >
Link: https://lore.kernel.org/r/20260327054936.3462935-1-peter.lin@sifive.com
Signed-off-by: Anup Patel <anup@brainfault.org >
2026-05-11 10:11:06 +05:30
Yu-Chien Peter Lin and Anup Patel
2257e99571
lib: sbi_bitmap_test: add tests for bitmap_empty()
...
Add tests for bitmap_empty(), covers empty/non-empty bitmaps and
edge case nbits=0.
Signed-off-by: Yu-Chien Peter Lin <peter.lin@sifive.com >
Reviewed-by: Anup Patel <anup@brainfault.org >
Link: https://lore.kernel.org/r/20260311125116.1401002-2-peter.lin@sifive.com
Signed-off-by: Anup Patel <anup@brainfault.org >
2026-04-08 17:58:06 +05:30
Yu-Chien Peter Lin and Anup Patel
ff7d245b86
include: sbi_bitmap: add bitmap_empty() function
...
Add bitmap_empty() to check if bitmap has no bits set.
Unlike bitmap_weight() which calls sbi_popcount() on every word,
bitmap_empty() uses simple non-zero comparisons with early exit.
Signed-off-by: Yu-Chien Peter Lin <peter.lin@sifive.com >
Reviewed-by: Anup Patel <anup@brainfault.org >
Link: https://lore.kernel.org/r/20260311125116.1401002-1-peter.lin@sifive.com
Signed-off-by: Anup Patel <anup@brainfault.org >
2026-04-08 17:58:05 +05:30
Yu-Chien Peter Lin and Anup Patel
9e14e03032
sifive_dev_platform: Set default MMIO region when SmePMP is enabled
...
Set a default MMIO region with a single SmePMP entry, which allows us
to save entries for M-mode only devices. The default entry has M-/S-mode
shared permission, so system-level resource protection, such as RISC-V
World extension and WorldGuard checker, will be introduced to protect
M-mode only region access from lower privilege modes.
Reviewed-by: Greentime Hu <greentime.hu@sifive.com >
Reviewed-by: Zong Li <zong.li@sifive.com >
Signed-off-by: Yu-Chien Peter Lin <peter.lin@sifive.com >
Link: https://lore.kernel.org/r/20260224031733.3817148-3-peter.lin@sifive.com
Signed-off-by: Anup Patel <anup@brainfault.org >
2026-04-06 11:04:33 +05:30
Yu-Chien Peter Lin and Anup Patel
0402b8e3dc
platform: sifive: Add initial support for SiFive development platform
...
Add initial platform support for SiFive development platforms
with the "sifive-dev" compatible string.
Reviewed-by: Greentime Hu <greentime.hu@sifive.com >
Reviewed-by: Zong Li <zong.li@sifive.com >
Signed-off-by: Yu-Chien Peter Lin <peter.lin@sifive.com >
Link: https://lore.kernel.org/r/20260224031733.3817148-1-peter.lin@sifive.com
Signed-off-by: Anup Patel <anup@brainfault.org >
2026-04-06 10:49:21 +05:30
Yu-Chien Peter Lin and Anup Patel
4813a20420
lib: sbi_init: Call hart init and timer init before platform early init
...
To allow the platform early drivers to use the sbi_timer_mdelay(),
sbi_timer_udelay() and sbi_hart_has_extension() helpers, reorder the
initialization sequence must call sbi_hart_init() and sbi_timer_init()
prior to sbi_platform_early_init() during both cold and warm boot paths.
Reviewed-by: Greentime Hu <greentime.hu@sifive.com >
Reviewed-by: Zong Li <zong.li@sifive.com >
Signed-off-by: Yu-Chien Peter Lin <peter.lin@sifive.com >
Link: https://lore.kernel.org/r/20260224031733.3817148-2-peter.lin@sifive.com
Signed-off-by: Anup Patel <anup@brainfault.org >
2026-03-22 11:16:33 +05:30
Yu-Chien Peter Lin and Anup Patel
0250db4dad
lib: sbi_domain_context: preserve firmware PMP entries during domain context switch
...
When SmePMP is enabled, clearing firmware PMP entries during a domain
context switch can temporarily revoke access to OpenSBI’s own code and
data, leading to faults.
Keep firmware PMP entries enabled across switches so firmware regions
remain accessible and executable.
Signed-off-by: Yu-Chien Peter Lin <peter.lin@sifive.com >
Reviewed-by: Anup Patel <anup@brainfault.org >
Link: https://lore.kernel.org/r/20251008084444.3525615-9-peter.lin@sifive.com
Signed-off-by: Anup Patel <anup@brainfault.org >
2025-11-02 17:00:49 +05:30
Yu-Chien Peter Lin and Anup Patel
b210376fe2
lib: sbi: sbi_hart: track firmware PMP entries for SmePMP
...
Add fw_smepmp_ids bitmap to track PMP entries that protect firmware
regions. Allow us to preserve these critical entries across domain
transitions and check inconsistent firmware entry allocation.
Also add sbi_hart_smepmp_is_fw_region() helper function to query
whether a given SmePMP entry protects firmware regions.
Signed-off-by: Yu-Chien Peter Lin <peter.lin@sifive.com >
Reviewed-by: Anup Patel <anup@brainfault.org >
Link: https://lore.kernel.org/r/20251008084444.3525615-8-peter.lin@sifive.com
Signed-off-by: Anup Patel <anup@brainfault.org >
2025-11-02 16:49:47 +05:30
Yu-Chien Peter Lin and Anup Patel
631efeeb49
lib: sbi_domain: ensure consistent firmware PMP entries
...
During domain context switches, all PMP entries are reconfigured
which can clear firmware access permissions, causing M-mode access
faults under SmePMP.
Sort domain regions to place firmware regions first, ensuring
consistent firmware PMP entries so they won't be revoked during
domain context switches.
Signed-off-by: Yu-Chien Peter Lin <peter.lin@sifive.com >
Reviewed-by: Anup Patel <anup@brainfault.org >
Link: https://lore.kernel.org/r/20251008084444.3525615-7-peter.lin@sifive.com
Signed-off-by: Anup Patel <anup@brainfault.org >
2025-11-02 16:35:19 +05:30
Yu-Chien Peter Lin and Anup Patel
b34caeef81
lib: sbi_domain: add SBI_DOMAIN_MEMREGION_FW memregion flag
...
Add a new memregion flag, SBI_DOMAIN_MEMREGION_FW and mark the
OpenSBI code and data regions.
Signed-off-by: Yu-Chien Peter Lin <peter.lin@sifive.com >
Reviewed-by: Anup Patel <anup@brainfault.org >
Link: https://lore.kernel.org/r/20251008084444.3525615-6-peter.lin@sifive.com
Signed-off-by: Anup Patel <anup@brainfault.org >
2025-11-02 16:26:19 +05:30
Yu-Chien Peter Lin and Anup Patel
34657b377f
lib: sbi_hart: return error when insufficient PMP entries available
...
Previously, when memory regions exceed available PMP entries,
some regions were silently ignored. If the last entry that covers
the full 64-bit address space is not added to a domain, the next
stage S-mode software won't have permission to access and fetch
instructions from its memory. So return early with error message
to catch such situation.
Signed-off-by: Yu-Chien Peter Lin <peter.lin@sifive.com >
Reviewed-by: Anup Patel <anup@brainfault.org >
Link: https://lore.kernel.org/r/20251008084444.3525615-5-peter.lin@sifive.com
Signed-off-by: Anup Patel <anup@brainfault.org >
2025-11-02 16:21:07 +05:30
Yu-Chien Peter Lin and Anup Patel
90c3b94094
lib: sbi_domain: print unsupported SmePMP permissions
...
The reg->flag is encoded with 6 bits to specify RWX
permissions for M-mode and S-/U-mode. However, only
16 of the possible encodings are valid on SmePMP.
Add a warning message when an unsupported permission
encoding is detected.
Signed-off-by: Yu-Chien Peter Lin <peter.lin@sifive.com >
Reviewed-by: Anup Patel <anup@brainfault.org >
Link: https://lore.kernel.org/r/20251008084444.3525615-4-peter.lin@sifive.com
Signed-off-by: Anup Patel <anup@brainfault.org >
2025-11-02 16:06:51 +05:30
Yu-Chien Peter Lin and Anup Patel
667eed2266
lib: sbi_domain: allow specifying inaccessible region
...
According to the RISC‑V Privileged Specification, SmePMP
regions that grant no access in any privilege mode are
valid. Allow such regions to be specified.
Signed-off-by: Yu-Chien Peter Lin <peter.lin@sifive.com >
Reviewed-by: Anup Patel <anup@brainfault.org >
Link: https://lore.kernel.org/r/20251008084444.3525615-3-peter.lin@sifive.com
Signed-off-by: Anup Patel <anup@brainfault.org >
2025-11-02 16:03:35 +05:30
Yu-Chien Peter Lin and Anup Patel
32c1d38dcf
lib: sbi_hart: move sbi_hart_get_smepmp_flags() to sbi_domain
...
Move sbi_hart_get_smepmp_flags() from sbi_hart.c to sbi_domain.c and
rename it to sbi_domain_get_smepmp_flags() to better reflect its
purpose of converting domain memory region flags to PMP configuration.
Also removes unused parameters (scratch and dom).
Signed-off-by: Yu-Chien Peter Lin <peter.lin@sifive.com >
Reviewed-by: Anup Patel <anup@brainfault.org >
Link: https://lore.kernel.org/r/20251008084444.3525615-2-peter.lin@sifive.com
Signed-off-by: Anup Patel <anup@brainfault.org >
2025-11-02 15:55:57 +05:30
Yu-Chien Peter Lin and Anup Patel
5de8c1d499
lib: serial: sifive-uart: add shared memory region for SiFive UART
...
Add shared memory region so the driver has permission
to access it in OpenSBI.
Signed-off-by: Yu-Chien Peter Lin <peter.lin@sifive.com >
Reviewed-by: Anup Patel <anup@brainfault.org >
Link: https://lore.kernel.org/r/20250814111012.20151-1-peter.lin@sifive.com
Signed-off-by: Anup Patel <anup@brainfault.org >
2025-10-06 11:13:20 +05:30