drivers: tee: sandbox: Fix SCP03 control emulator
authorJorge Ramirez-Ortiz <jorge@foundries.io>
Sat, 8 Apr 2023 15:35:31 +0000 (17:35 +0200)
committerSimon Glass <sjg@chromium.org>
Fri, 28 Apr 2023 17:30:17 +0000 (11:30 -0600)
Fix and document the Secure Channel Protocol03 emulator.

Fixes: 5a8783c80c39 ("drivers: tee: sandbox: SCP03 control emulator")

Signed-off-by: Jorge Ramirez-Ortiz <jorge@foundries.io>
Reviewed-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
drivers/tee/sandbox.c

index 35e8542..86219a9 100644 (file)
@@ -119,6 +119,7 @@ static u32 pta_scp03_invoke_func(struct udevice *dev, u32 func, uint num_params,
 {
        u32 res;
        static bool enabled;
+       static bool provisioned;
 
        switch (func) {
        case PTA_CMD_ENABLE_SCP03:
@@ -130,12 +131,18 @@ static u32 pta_scp03_invoke_func(struct udevice *dev, u32 func, uint num_params,
                if (res)
                        return res;
 
-               if (!enabled) {
+               /* If SCP03 was not enabled, enable it */
+               if (!enabled)
                        enabled = true;
-               } else {
-               }
 
-               if (params[0].u.value.a)
+               /* If SCP03 was not provisioned, provision new keys */
+               if (params[0].u.value.a && !provisioned)
+                       provisioned = true;
+
+               /*
+                * Either way, we asume both operations succeeded and that
+                * the communication channel has now been stablished
+                */
 
                return TEE_SUCCESS;
        default: