diff mbox series

[05/10] arm: stm32mp: bsec: Do not skip .probe() for SPL

Message ID 20210826214209.254461-6-mr.nuke.me@gmail.com
State Superseded
Delegated to: Patrice Chotard
Headers show
Series stm32mp1: Support falcon mode with OP-TEE payloads | expand

Commit Message

Alexandru Gagniuc Aug. 26, 2021, 9:42 p.m. UTC
stm32mp_bsec_probe() was skipped for TFABOOT and SPL_BUILD. The idea
of skipping probe() is that we can't access BSEC from the normal
world. This is true with TFABOOT. However, in SPL, we are in the
secure world, so skipping probe is incorrect. In fact, SPL is not
even built when TFABOOT is selected.

Thus, only skip probe with TFABOOT, but not SPL_BUILD.

Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
---
 arch/arm/mach-stm32mp/bsec.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Patrick DELAUNAY Aug. 31, 2021, 4:54 p.m. UTC | #1
Hi

On 8/26/21 11:42 PM, Alexandru Gagniuc wrote:

> stm32mp_bsec_probe() was skipped for TFABOOT and SPL_BUILD. The idea
> of skipping probe() is that we can't access BSEC from the normal
> world. This is true with TFABOOT. However, in SPL, we are in the
> secure world, so skipping probe is incorrect. In fact, SPL is not
> even built when TFABOOT is selected.
>
> Thus, only skip probe with TFABOOT, but not SPL_BUILD.
>
> Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
> ---
>   arch/arm/mach-stm32mp/bsec.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/arch/arm/mach-stm32mp/bsec.c b/arch/arm/mach-stm32mp/bsec.c
> index fe39bd80cf..a02d19c1b9 100644
> --- a/arch/arm/mach-stm32mp/bsec.c
> +++ b/arch/arm/mach-stm32mp/bsec.c
> @@ -506,7 +506,7 @@ static int stm32mp_bsec_probe(struct udevice *dev)
>   	 * only executed in U-Boot proper when TF-A is not used
>   	 */
>   
> -	if (!IS_ENABLED(CONFIG_TFABOOT) && !IS_ENABLED(CONFIG_SPL_BUILD)) {
> +	if (!IS_ENABLED(CONFIG_TFABOOT)) {
>   		plat = dev_get_plat(dev);
>   
>   		for (otp = 57; otp <= BSEC_OTP_MAX_VALUE; otp++)


in this part the dirver don't skip the BSEC probe (still return 0)

BUT the BSEC driver skip only the shadow of the OTP

=> this initialisation is necessary only one time to save time

a/ for TF-A boot it is done in TF-A

b/ for basic boot (SPL + U-Boot) is only done in U-Boot proper (because 
is not mandatory in SPL

and the U-Boot execution was faster - before the data cache activation 
in SPL)


With this patch the copy of the OTP in shadow memory is done 2 times

1/ in SPL (BSEC probe) = with CONFIG_SPL_BUILD

2/ in U-Boot (BSEC probe)

see comment:

     /*
      * update unlocked shadow for OTP cleared by the rom code
      * only executed in U-Boot proper when TF-A is not used
      */


but for falcon mode, as the Linux driver expected the OTP are shadowed,

the operation need to be done in SPL and in U-Boot proper

I propose


     /*

      * update unlocked shadow for OTP cleared by the rom code

-     * only executed in U-Boot proper when TF-A is not used

+     * only executed in U-Boot SPL, it is done in TF-A when used

      */

-	if (!IS_ENABLED(CONFIG_TFABOOT) && !IS_ENABLED(CONFIG_SPL_BUILD)) {
+	if (IS_ENABLED(CONFIG_SPL_BUILD)) {


Regards

Patrick
diff mbox series

Patch

diff --git a/arch/arm/mach-stm32mp/bsec.c b/arch/arm/mach-stm32mp/bsec.c
index fe39bd80cf..a02d19c1b9 100644
--- a/arch/arm/mach-stm32mp/bsec.c
+++ b/arch/arm/mach-stm32mp/bsec.c
@@ -506,7 +506,7 @@  static int stm32mp_bsec_probe(struct udevice *dev)
 	 * only executed in U-Boot proper when TF-A is not used
 	 */
 
-	if (!IS_ENABLED(CONFIG_TFABOOT) && !IS_ENABLED(CONFIG_SPL_BUILD)) {
+	if (!IS_ENABLED(CONFIG_TFABOOT)) {
 		plat = dev_get_plat(dev);
 
 		for (otp = 57; otp <= BSEC_OTP_MAX_VALUE; otp++)