diff mbox series

[RFC,v4,4/4] lib: sbi: Initialize SMMPT during coldboot

Message ID 20260824020953.2438946-5-rahul.pathak@oss.qualcomm.com
State New
Headers show
Series Add Smsdid and Smmpt supervisor domain protection | expand

Commit Message

Rahul Pathak Aug. 24, 2026, 2:09 a.m. UTC
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(-)

Comments

Ranbir Singh Aug. 24, 2026, 5:30 a.m. UTC | #1
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
Rahul Pathak Aug. 24, 2026, 5:43 a.m. UTC | #2
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 mbox series

Patch

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);
 }