| Message ID | 20260824020953.2438946-5-rahul.pathak@oss.qualcomm.com |
|---|---|
| State | New |
| Headers | show |
| Series | Add Smsdid and Smmpt supervisor domain protection | expand |
On Mon, Aug 24, 2026 at 7:41 AM Rahul Pathak <rahul.pathak@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@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@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/opensbi
On Mon, Aug 24, 2026 at 11:00 AM Ranbir Singh <ranbir.singh@oss.qualcomm.com> wrote: > > On Mon, Aug 24, 2026 at 7:41 AM Rahul Pathak > <rahul.pathak@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@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. Yes, typo, will correct it > > > * 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 I agree, will update > #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@lists.infradead.org > > http://lists.infradead.org/mailman/listinfo/opensbi
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. * 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; + return BIT_ALIGN(heap_size, HEAP_BASE_ALIGN); }
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@oss.qualcomm.com> --- lib/sbi/sbi_hart.c | 8 +++++++- platform/generic/platform.c | 9 +++++++++ 2 files changed, 16 insertions(+), 1 deletion(-)