diff options
| author | Michal Simek <michal.simek@amd.com> | 2026-01-07 17:04:56 +0100 |
|---|---|---|
| committer | Anup Patel <anup@brainfault.org> | 2026-01-08 14:18:14 +0530 |
| commit | 74434f255873d74e56cc50aa762d1caf24c099f8 (patch) | |
| tree | bc73e7678872920c7731e9c08c7f09bb381299a7 /lib | |
| parent | 65fac653113bcd1ac86ac85f44138caa69ad3d9a (diff) | |
| download | opensbi-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>
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sbi/sbi_hart_protection.c | 10 |
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); |
