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:
Anup Patel
2024-09-20 17:44:13 +05:30
committed by Anup Patel
parent 36c1e4064f
commit 2d517fce9b

View File

@@ -253,8 +253,8 @@ static int __fdt_parse_region(const void *fdt, int domain_offset,
u32 val32; u32 val32;
u64 val64; u64 val64;
const u32 *val; const u32 *val;
unsigned long base, order, flags;
struct parse_region_data *preg = opaque; struct parse_region_data *preg = opaque;
struct sbi_domain_memregion *region;
/* /*
* Non-root domains cannot add a region with only M-mode * 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 */ /* Find next region of the domain */
if (preg->max_regions <= preg->region_count) if (preg->max_regions <= preg->region_count)
return SBI_ENOSPC; return SBI_ENOSPC;
region = &preg->dom->regions[preg->region_count];
/* Read "base" DT property */ /* Read "base" DT property */
val = fdt_getprop(fdt, region_offset, "base", &len); 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; return SBI_EINVAL;
val64 = fdt32_to_cpu(val[0]); val64 = fdt32_to_cpu(val[0]);
val64 = (val64 << 32) | fdt32_to_cpu(val[1]); val64 = (val64 << 32) | fdt32_to_cpu(val[1]);
region->base = val64; base = val64;
/* Read "order" DT property */ /* Read "order" DT property */
val = fdt_getprop(fdt, region_offset, "order", &len); 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); val32 = fdt32_to_cpu(*val);
if (val32 < 3 || __riscv_xlen < val32) if (val32 < 3 || __riscv_xlen < val32)
return SBI_EINVAL; return SBI_EINVAL;
region->order = val32; order = val32;
/* Read "mmio" DT property */ /* 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)) 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++; preg->region_count++;