mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2026-01-09 13:31:24 +00:00
lib: sbi: Fix behavior on platform without HART protection
The commit42139bb9b7("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:42139bb9b7("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>
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user