[RFC PATCH v4 4/4] lib: sbi: Initialize SMMPT during coldboot
Ranbir Singh
ranbir.singh at oss.qualcomm.com
Sun Aug 23 22:30:02 PDT 2026
On Mon, Aug 24, 2026 at 7:41 AM Rahul Pathak
<rahul.pathak at oss.qualcomm.com> wrote:
>
> Call sbi_mpt_init() function from coldboot path of
> sbi_hart_init() to initialize the SMMPT core. It will
> create and the MPT tables for each SBI domain and maps
> its memregions with appropriate permissions in MPT tables.
>
> Also each MPT table requires to memory to install tables
> so reserve more space in heap for MPT tables
>
> Signed-off-by: Rahul Pathak <rahul.pathak at oss.qualcomm.com>
> ---
> lib/sbi/sbi_hart.c | 8 +++++++-
> platform/generic/platform.c | 9 +++++++++
> 2 files changed, 16 insertions(+), 1 deletion(-)
>
> diff --git a/lib/sbi/sbi_hart.c b/lib/sbi/sbi_hart.c
> index 4261fea8..cc18b2c5 100644
> --- a/lib/sbi/sbi_hart.c
> +++ b/lib/sbi/sbi_hart.c
> @@ -1,4 +1,4 @@
> -/*
> +/*sbi_hart.
RS: Looks like this is mistakenly added.
> * SPDX-License-Identifier: BSD-2-Clause
> *
> * Copyright (c) 2019 Western Digital Corporation or its affiliates.
> @@ -21,6 +21,7 @@
> #include <sbi/sbi_pmu.h>
> #include <sbi/sbi_string.h>
> #include <sbi/sbi_trap.h>
> +#include <sbi/sbi_hart_mpt.h>
>
> extern void __sbi_expected_trap(void);
> extern void __sbi_expected_trap_hext(void);
> @@ -731,6 +732,11 @@ int sbi_hart_init(struct sbi_scratch *scratch, bool cold_boot)
> rc = sbi_hart_pmp_init(scratch);
> if (rc)
> return rc;
> +
> + /* Smmpt is optional. Continue if the Smmpt is not present. */
> + rc = sbi_mpt_init();
> + if (rc && rc != SBI_ENODEV)
> + return rc;
> }
>
> return sbi_hart_reinit(scratch);
> diff --git a/platform/generic/platform.c b/platform/generic/platform.c
> index 1df0280d..ccf6f756 100644
> --- a/platform/generic/platform.c
> +++ b/platform/generic/platform.c
> @@ -42,6 +42,15 @@ static u32 fw_platform_calculate_heap_size(u32 hart_count)
> /* For TLB fifo */
> heap_size += SBI_TLB_INFO_SIZE * (hart_count) * (hart_count);
>
> + /*
> + * MPT table budget
> + * 1 MiB memory for MPT allocated currently.
> + *
> + * TODO: Need better way to get the memory budget based on active
> + * SMMPT mode.
> + */
> + heap_size += 1024 * 1024;
RS: See if it is better to define and use macros here like
#define MB(x) (x * 1024 * 1024)
heap_size += MB(1)
> +
> return BIT_ALIGN(heap_size, HEAP_BASE_ALIGN);
> }
>
> --
> 2.53.0
>
>
> --
> opensbi mailing list
> opensbi at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/opensbi
More information about the opensbi
mailing list