mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2025-08-25 07:41:42 +01:00
lib: sbi: Add sbi_domain_root_add_memrange() API
This patch generalizes the logic to add a memory range with desired alignment and flags of consecutive regions to the root domain. Signed-off-by: Yu Chien Peter Lin <peterlin@andestech.com> Reviewed-by: Anup Patel <anup@brainfault.org>
This commit is contained in:

committed by
Anup Patel

parent
60b78fee92
commit
dcdaf30274
@@ -522,6 +522,33 @@ int sbi_domain_root_add_memregion(const struct sbi_domain_memregion *reg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sbi_domain_root_add_memrange(unsigned long addr, unsigned long size,
|
||||
unsigned long align, unsigned long region_flags)
|
||||
{
|
||||
int rc;
|
||||
unsigned long pos, end, rsize;
|
||||
struct sbi_domain_memregion reg;
|
||||
|
||||
pos = addr;
|
||||
end = addr + size;
|
||||
while (pos < end) {
|
||||
rsize = pos & (align - 1);
|
||||
if (rsize)
|
||||
rsize = 1UL << sbi_ffs(pos);
|
||||
else
|
||||
rsize = ((end - pos) < align) ?
|
||||
(end - pos) : align;
|
||||
|
||||
sbi_domain_memregion_init(pos, rsize, region_flags, ®);
|
||||
rc = sbi_domain_root_add_memregion(®);
|
||||
if (rc)
|
||||
return rc;
|
||||
pos += rsize;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sbi_domain_finalize(struct sbi_scratch *scratch, u32 cold_hartid)
|
||||
{
|
||||
int rc;
|
||||
|
Reference in New Issue
Block a user