aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichal Simek <michal.simek@amd.com>2026-01-07 17:04:56 +0100
committerAnup Patel <anup@brainfault.org>2026-01-08 14:18:14 +0530
commit74434f255873d74e56cc50aa762d1caf24c099f8 (patch)
treebc73e7678872920c7731e9c08c7f09bb381299a7
parent65fac653113bcd1ac86ac85f44138caa69ad3d9a (diff)
downloadopensbi-release-1.8.x.zip
opensbi-release-1.8.x.tar.gz
opensbi-release-1.8.x.tar.bz2
lib: sbi: Fix behavior on platform without HART protectionHEADv1.8.1release-1.8.xmaster
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 <michal.simek@amd.com> Reviewed-by: Anup Patel <anup@brainfault.org> Link: https://lore.kernel.org/r/bb8641e5f82654e3989537cea85f165f67a7044e.1767801896.git.michal.simek@amd.com Signed-off-by: Anup Patel <anup@brainfault.org>
-rw-r--r--lib/sbi/sbi_hart_protection.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/lib/sbi/sbi_hart_protection.c b/lib/sbi/sbi_hart_protection.c
index 306f5af..fbebfd1 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);