From 74434f255873d74e56cc50aa762d1caf24c099f8 Mon Sep 17 00:00:00 2001 From: Michal Simek Date: Wed, 7 Jan 2026 17:04:56 +0100 Subject: lib: sbi: Fix behavior on platform without HART protection The commit 42139bb9b7dc ("lib: sbi: Replace sbi_hart_pmp_xyz() and sbi_hart_map/unmap_addr()") changed logic by calling sbi_hart_protection_configure(). But when protection doesn't exist the function is returning SBI_EINVAL. But on systems without protection this is correct configuration that's why do not hang when system don't have any HART protection. Fixes: 42139bb9b7dc ("lib: sbi: Replace sbi_hart_pmp_xyz() and sbi_hart_map/unmap_addr()") Signed-off-by: Michal Simek Reviewed-by: Anup Patel Link: https://lore.kernel.org/r/bb8641e5f82654e3989537cea85f165f67a7044e.1767801896.git.michal.simek@amd.com Signed-off-by: Anup Patel --- lib/sbi/sbi_hart_protection.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/lib/sbi/sbi_hart_protection.c b/lib/sbi/sbi_hart_protection.c index 306f5afb..fbebfd1a 100644 --- a/lib/sbi/sbi_hart_protection.c +++ b/lib/sbi/sbi_hart_protection.c @@ -54,7 +54,7 @@ int sbi_hart_protection_configure(struct sbi_scratch *scratch) struct sbi_hart_protection *hprot = sbi_hart_protection_best(); if (!hprot) - return SBI_EINVAL; + return 0; if (!hprot->configure) return SBI_ENOSYS; @@ -75,9 +75,7 @@ int sbi_hart_protection_map_range(unsigned long base, unsigned long size) { struct sbi_hart_protection *hprot = sbi_hart_protection_best(); - if (!hprot) - return SBI_EINVAL; - if (!hprot->map_range) + if (!hprot || !hprot->map_range) return 0; return hprot->map_range(sbi_scratch_thishart_ptr(), base, size); @@ -87,9 +85,7 @@ int sbi_hart_protection_unmap_range(unsigned long base, unsigned long size) { struct sbi_hart_protection *hprot = sbi_hart_protection_best(); - if (!hprot) - return SBI_EINVAL; - if (!hprot->unmap_range) + if (!hprot || !hprot->unmap_range) return 0; return hprot->unmap_range(sbi_scratch_thishart_ptr(), base, size); -- cgit v1.2.3