mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2025-12-17 04:21:39 +00:00
lib: sbi: Replace sbi_hart_pmp_xyz() and sbi_hart_map/unmap_addr()
The sbi_hart_pmp_xyz() and sbi_hart_map/unmap_addr() functions can now be replaced by various sbi_hart_protection_xyz() functions. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Link: https://lore.kernel.org/r/20251209135235.423391-5-apatel@ventanamicro.com Signed-off-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
@@ -11,6 +11,7 @@
|
||||
#include <sbi/sbi_domain.h>
|
||||
#include <sbi/sbi_error.h>
|
||||
#include <sbi/sbi_hart.h>
|
||||
#include <sbi/sbi_hart_protection.h>
|
||||
#include <sbi/sbi_heap.h>
|
||||
#include <sbi/sbi_platform.h>
|
||||
#include <sbi/sbi_mpxy.h>
|
||||
@@ -375,10 +376,10 @@ int sbi_mpxy_set_shmem(unsigned long shmem_phys_lo,
|
||||
if (flags == SBI_EXT_MPXY_SHMEM_FLAG_OVERWRITE_RETURN) {
|
||||
ret_buf = (unsigned long *)(ulong)SHMEM_PHYS_ADDR(shmem_phys_hi,
|
||||
shmem_phys_lo);
|
||||
sbi_hart_map_saddr((unsigned long)ret_buf, mpxy_shmem_size);
|
||||
sbi_hart_protection_map_range((unsigned long)ret_buf, mpxy_shmem_size);
|
||||
ret_buf[0] = cpu_to_lle(ms->shmem.shmem_addr_lo);
|
||||
ret_buf[1] = cpu_to_lle(ms->shmem.shmem_addr_hi);
|
||||
sbi_hart_unmap_saddr();
|
||||
sbi_hart_protection_unmap_range((unsigned long)ret_buf, mpxy_shmem_size);
|
||||
}
|
||||
|
||||
/** Setup the new shared memory */
|
||||
@@ -407,7 +408,7 @@ int sbi_mpxy_get_channel_ids(u32 start_index)
|
||||
return SBI_ERR_INVALID_PARAM;
|
||||
|
||||
shmem_base = hart_shmem_base(ms);
|
||||
sbi_hart_map_saddr((unsigned long)hart_shmem_base(ms), mpxy_shmem_size);
|
||||
sbi_hart_protection_map_range((unsigned long)hart_shmem_base(ms), mpxy_shmem_size);
|
||||
|
||||
/** number of channel ids which can be stored in shmem adjusting
|
||||
* for remaining and returned fields */
|
||||
@@ -434,7 +435,7 @@ int sbi_mpxy_get_channel_ids(u32 start_index)
|
||||
shmem_base[0] = cpu_to_le32(remaining);
|
||||
shmem_base[1] = cpu_to_le32(returned);
|
||||
|
||||
sbi_hart_unmap_saddr();
|
||||
sbi_hart_protection_unmap_range((unsigned long)hart_shmem_base(ms), mpxy_shmem_size);
|
||||
|
||||
return SBI_SUCCESS;
|
||||
}
|
||||
@@ -465,7 +466,7 @@ int sbi_mpxy_read_attrs(u32 channel_id, u32 base_attr_id, u32 attr_count)
|
||||
shmem_base = hart_shmem_base(ms);
|
||||
end_id = base_attr_id + attr_count - 1;
|
||||
|
||||
sbi_hart_map_saddr((unsigned long)hart_shmem_base(ms), mpxy_shmem_size);
|
||||
sbi_hart_protection_map_range((unsigned long)hart_shmem_base(ms), mpxy_shmem_size);
|
||||
|
||||
/* Standard attributes range check */
|
||||
if (mpxy_is_std_attr(base_attr_id)) {
|
||||
@@ -504,7 +505,7 @@ int sbi_mpxy_read_attrs(u32 channel_id, u32 base_attr_id, u32 attr_count)
|
||||
base_attr_id, attr_count);
|
||||
}
|
||||
out:
|
||||
sbi_hart_unmap_saddr();
|
||||
sbi_hart_protection_unmap_range((unsigned long)hart_shmem_base(ms), mpxy_shmem_size);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -616,7 +617,7 @@ int sbi_mpxy_write_attrs(u32 channel_id, u32 base_attr_id, u32 attr_count)
|
||||
shmem_base = hart_shmem_base(ms);
|
||||
end_id = base_attr_id + attr_count - 1;
|
||||
|
||||
sbi_hart_map_saddr((unsigned long)shmem_base, mpxy_shmem_size);
|
||||
sbi_hart_protection_map_range((unsigned long)shmem_base, mpxy_shmem_size);
|
||||
|
||||
mem_ptr = (u32 *)shmem_base;
|
||||
|
||||
@@ -673,7 +674,7 @@ int sbi_mpxy_write_attrs(u32 channel_id, u32 base_attr_id, u32 attr_count)
|
||||
base_attr_id, attr_count);
|
||||
}
|
||||
out:
|
||||
sbi_hart_unmap_saddr();
|
||||
sbi_hart_protection_unmap_range((unsigned long)shmem_base, mpxy_shmem_size);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -705,7 +706,7 @@ int sbi_mpxy_send_message(u32 channel_id, u8 msg_id,
|
||||
return SBI_ERR_INVALID_PARAM;
|
||||
|
||||
shmem_base = hart_shmem_base(ms);
|
||||
sbi_hart_map_saddr((unsigned long)shmem_base, mpxy_shmem_size);
|
||||
sbi_hart_protection_map_range((unsigned long)shmem_base, mpxy_shmem_size);
|
||||
|
||||
if (resp_data_len) {
|
||||
resp_buf = shmem_base;
|
||||
@@ -722,7 +723,7 @@ int sbi_mpxy_send_message(u32 channel_id, u8 msg_id,
|
||||
msg_data_len);
|
||||
}
|
||||
|
||||
sbi_hart_unmap_saddr();
|
||||
sbi_hart_protection_unmap_range((unsigned long)shmem_base, mpxy_shmem_size);
|
||||
|
||||
if (ret == SBI_ERR_TIMEOUT || ret == SBI_ERR_IO)
|
||||
return ret;
|
||||
@@ -752,12 +753,12 @@ int sbi_mpxy_get_notification_events(u32 channel_id, unsigned long *events_len)
|
||||
return SBI_ERR_NOT_SUPPORTED;
|
||||
|
||||
shmem_base = hart_shmem_base(ms);
|
||||
sbi_hart_map_saddr((unsigned long)shmem_base, mpxy_shmem_size);
|
||||
sbi_hart_protection_map_range((unsigned long)shmem_base, mpxy_shmem_size);
|
||||
eventsbuf = shmem_base;
|
||||
ret = channel->get_notification_events(channel, eventsbuf,
|
||||
mpxy_shmem_size,
|
||||
events_len);
|
||||
sbi_hart_unmap_saddr();
|
||||
sbi_hart_protection_unmap_range((unsigned long)shmem_base, mpxy_shmem_size);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
Reference in New Issue
Block a user