mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2025-08-24 15:31:22 +01:00
lib: utils/fdt: Use sbi_domain_memregion_init() when parsing domains
Use sbi_domain_memregion_init() at the time of parsing domains from FDT so that sbi_domain_memregion_init() is always used for setting up all memregions. Signed-off-by: Anup Patel <apatel@ventanamicro.com> Reviewed-by: Samuel Holland <samuel.holland@sifive.com>
This commit is contained in:
@@ -253,8 +253,8 @@ static int __fdt_parse_region(const void *fdt, int domain_offset,
|
||||
u32 val32;
|
||||
u64 val64;
|
||||
const u32 *val;
|
||||
unsigned long base, order, flags;
|
||||
struct parse_region_data *preg = opaque;
|
||||
struct sbi_domain_memregion *region;
|
||||
|
||||
/*
|
||||
* Non-root domains cannot add a region with only M-mode
|
||||
@@ -271,7 +271,6 @@ static int __fdt_parse_region(const void *fdt, int domain_offset,
|
||||
/* Find next region of the domain */
|
||||
if (preg->max_regions <= preg->region_count)
|
||||
return SBI_ENOSPC;
|
||||
region = &preg->dom->regions[preg->region_count];
|
||||
|
||||
/* Read "base" DT property */
|
||||
val = fdt_getprop(fdt, region_offset, "base", &len);
|
||||
@@ -279,7 +278,7 @@ static int __fdt_parse_region(const void *fdt, int domain_offset,
|
||||
return SBI_EINVAL;
|
||||
val64 = fdt32_to_cpu(val[0]);
|
||||
val64 = (val64 << 32) | fdt32_to_cpu(val[1]);
|
||||
region->base = val64;
|
||||
base = val64;
|
||||
|
||||
/* Read "order" DT property */
|
||||
val = fdt_getprop(fdt, region_offset, "order", &len);
|
||||
@@ -288,12 +287,15 @@ static int __fdt_parse_region(const void *fdt, int domain_offset,
|
||||
val32 = fdt32_to_cpu(*val);
|
||||
if (val32 < 3 || __riscv_xlen < val32)
|
||||
return SBI_EINVAL;
|
||||
region->order = val32;
|
||||
order = val32;
|
||||
|
||||
/* Read "mmio" DT property */
|
||||
region->flags = region_access & SBI_DOMAIN_MEMREGION_ACCESS_MASK;
|
||||
flags = region_access & SBI_DOMAIN_MEMREGION_ACCESS_MASK;
|
||||
if (fdt_get_property(fdt, region_offset, "mmio", NULL))
|
||||
region->flags |= SBI_DOMAIN_MEMREGION_MMIO;
|
||||
flags |= SBI_DOMAIN_MEMREGION_MMIO;
|
||||
|
||||
sbi_domain_memregion_init(base, (order == __riscv_xlen) ? ~0UL : BIT(order),
|
||||
flags, &preg->dom->regions[preg->region_count]);
|
||||
|
||||
preg->region_count++;
|
||||
|
||||
|
Reference in New Issue
Block a user