mirror of
https://github.com/riscv-software-src/opensbi.git
synced 2025-08-24 15:31:22 +01:00
lib: sbi: Domains can be registered only before finalizing domains
The domains are boot-time system-level partitions so we should allow platform support to register domains only before hart domain assignments are finalized. Signed-off-by: Anup Patel <anup.patel@wdc.com> Reviewed-by: Xiang W <wxjstz@126.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
This commit is contained in:
@@ -19,8 +19,8 @@
|
|||||||
|
|
||||||
struct sbi_domain *hartid_to_domain_table[SBI_HARTMASK_MAX_BITS] = { 0 };
|
struct sbi_domain *hartid_to_domain_table[SBI_HARTMASK_MAX_BITS] = { 0 };
|
||||||
struct sbi_domain *domidx_to_domain_table[SBI_DOMAIN_MAX_INDEX] = { 0 };
|
struct sbi_domain *domidx_to_domain_table[SBI_DOMAIN_MAX_INDEX] = { 0 };
|
||||||
|
|
||||||
static u32 domain_count = 0;
|
static u32 domain_count = 0;
|
||||||
|
static bool domain_finalized = false;
|
||||||
|
|
||||||
static struct sbi_hartmask root_hmask = { 0 };
|
static struct sbi_hartmask root_hmask = { 0 };
|
||||||
|
|
||||||
@@ -376,7 +376,8 @@ int sbi_domain_register(struct sbi_domain *dom,
|
|||||||
u32 cold_hartid = current_hartid();
|
u32 cold_hartid = current_hartid();
|
||||||
const struct sbi_platform *plat = sbi_platform_thishart_ptr();
|
const struct sbi_platform *plat = sbi_platform_thishart_ptr();
|
||||||
|
|
||||||
if (!dom || !assign_mask)
|
/* Sanity checks */
|
||||||
|
if (!dom || !assign_mask || domain_finalized)
|
||||||
return SBI_EINVAL;
|
return SBI_EINVAL;
|
||||||
|
|
||||||
/* Check if domain already discovered */
|
/* Check if domain already discovered */
|
||||||
@@ -490,6 +491,12 @@ int sbi_domain_finalize(struct sbi_scratch *scratch, u32 cold_hartid)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the finalized flag so that the root domain
|
||||||
|
* regions can't be changed.
|
||||||
|
*/
|
||||||
|
domain_finalized = true;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user