From: "Teh, Wen Ping" <wen.ping....@intel.com>

commit 11778ddc08e752b55991f01ac4e5f805f10cad35 from
https://github.com/altera-opensource/linux-socfpga.git

Add support for large file size AES, SHA2/HMAC data and ECDSA crypto service
using new 'update' mailbox command. The large file will be splitted into
smaller chunk and send using initialize, update and finalize mailbox command.

Signed-off-by: Teh, Wen Ping <wen.ping....@intel.com>
Reviewed-by: Dinh Nguyen <dingu...@kernel.org>
Signed-off-by: Wenlin Kang <wenlin.k...@windriver.com>
---
 drivers/firmware/stratix10-svc.c              |  57 ++++++++
 include/linux/firmware/intel/stratix10-smc.h  | 124 ++++++++++++++++++
 .../firmware/intel/stratix10-svc-client.h     |   5 +
 3 files changed, 186 insertions(+)

diff --git a/drivers/firmware/stratix10-svc.c b/drivers/firmware/stratix10-svc.c
index 8e60e352f857..f841cc73fead 100644
--- a/drivers/firmware/stratix10-svc.c
+++ b/drivers/firmware/stratix10-svc.c
@@ -408,12 +408,17 @@ static void svc_thread_recv_status_ok(struct 
stratix10_svc_data *p_data,
        case COMMAND_FCS_ATTESTATION_CERTIFICATE:
        case COMMAND_FCS_CRYPTO_EXPORT_KEY:
        case COMMAND_FCS_CRYPTO_GET_KEY_INFO:
+       case COMMAND_FCS_CRYPTO_AES_CRYPT_UPDATE:
        case COMMAND_FCS_CRYPTO_AES_CRYPT_FINALIZE:
+       case COMMAND_FCS_CRYPTO_GET_DIGEST_UPDATE:
        case COMMAND_FCS_CRYPTO_GET_DIGEST_FINALIZE:
+       case COMMAND_FCS_CRYPTO_MAC_VERIFY_UPDATE:
        case COMMAND_FCS_CRYPTO_MAC_VERIFY_FINALIZE:
        case COMMAND_FCS_CRYPTO_ECDSA_HASH_SIGNING_FINALIZE:
+       case COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_UPDATE:
        case COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_FINALIZE:
        case COMMAND_FCS_CRYPTO_ECDSA_HASH_VERIFY_FINALIZE:
+       case COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_UPDATE:
        case COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_FINALIZE:
        case COMMAND_FCS_CRYPTO_ECDSA_GET_PUBLIC_KEY_FINALIZE:
        case COMMAND_FCS_CRYPTO_ECDH_REQUEST_FINALIZE:
@@ -695,6 +700,15 @@ static int svc_normal_to_secure_thread(void *data)
                        a4 = (unsigned long)pdata->paddr;
                        a5 = (unsigned long)pdata->size;
                        break;
+               case COMMAND_FCS_CRYPTO_AES_CRYPT_UPDATE:
+                       a0 = INTEL_SIP_SMC_FCS_AES_CRYPTO_UPDATE;
+                       a1 = pdata->arg[0];
+                       a2 = pdata->arg[1];
+                       a3 = (unsigned long)pdata->paddr;
+                       a4 = (unsigned long)pdata->size;
+                       a5 = (unsigned long)pdata->paddr_output;
+                       a6 = (unsigned long)pdata->size_output;
+                       break;
                case COMMAND_FCS_CRYPTO_AES_CRYPT_FINALIZE:
                        a0 = INTEL_SIP_SMC_FCS_AES_CRYPTO_FINALIZE;
                        a1 = pdata->arg[0];
@@ -712,6 +726,15 @@ static int svc_normal_to_secure_thread(void *data)
                        a4 = pdata->arg[3];
                        a5 = pdata->arg[4];
                        break;
+               case COMMAND_FCS_CRYPTO_GET_DIGEST_UPDATE:
+                       a0 = INTEL_SIP_SMC_FCS_GET_DIGEST_UPDATE;
+                       a1 = pdata->arg[0];
+                       a2 = pdata->arg[1];
+                       a3 = (unsigned long)pdata->paddr;
+                       a4 = (unsigned long)pdata->size;
+                       a5 = (unsigned long)pdata->paddr_output;
+                       a6 = (unsigned long)pdata->size_output;
+                       break;
                case COMMAND_FCS_CRYPTO_GET_DIGEST_FINALIZE:
                        a0 = INTEL_SIP_SMC_FCS_GET_DIGEST_FINALIZE;
                        a1 = pdata->arg[0];
@@ -729,6 +752,16 @@ static int svc_normal_to_secure_thread(void *data)
                        a4 = pdata->arg[3];
                        a5 = pdata->arg[4];
                        break;
+               case COMMAND_FCS_CRYPTO_MAC_VERIFY_UPDATE:
+                       a0 = INTEL_SIP_SMC_FCS_MAC_VERIFY_UPDATE;
+                       a1 = pdata->arg[0];
+                       a2 = pdata->arg[1];
+                       a3 = (unsigned long)pdata->paddr;
+                       a4 = (unsigned long)pdata->size;
+                       a5 = (unsigned long)pdata->paddr_output;
+                       a6 = (unsigned long)pdata->size_output;
+                       a7 = pdata->arg[2];
+                       break;
                case COMMAND_FCS_CRYPTO_MAC_VERIFY_FINALIZE:
                        a0 = INTEL_SIP_SMC_FCS_MAC_VERIFY_FINALIZE;
                        a1 = pdata->arg[0];
@@ -764,6 +797,15 @@ static int svc_normal_to_secure_thread(void *data)
                        a4 = pdata->arg[3];
                        a5 = pdata->arg[4];
                        break;
+               case COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_UPDATE:
+                       a0 = INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGNING_UPDATE;
+                       a1 = pdata->arg[0];
+                       a2 = pdata->arg[1];
+                       a3 = (unsigned long)pdata->paddr;
+                       a4 = (unsigned long)pdata->size;
+                       a5 = (unsigned long)pdata->paddr_output;
+                       a6 = (unsigned long)pdata->size_output;
+                       break;
                case COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_FINALIZE:
                        a0 = INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGNING_FINALIZE;
                        a1 = pdata->arg[0];
@@ -798,6 +840,16 @@ static int svc_normal_to_secure_thread(void *data)
                        a4 = pdata->arg[3];
                        a5 = pdata->arg[4];
                        break;
+               case COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_UPDATE:
+                       a0 = 
INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGNATURE_VERIFY_UPDATE;
+                       a1 = pdata->arg[0];
+                       a2 = pdata->arg[1];
+                       a3 = (unsigned long)pdata->paddr;
+                       a4 = (unsigned long)pdata->size;
+                       a5 = (unsigned long)pdata->paddr_output;
+                       a6 = (unsigned long)pdata->size_output;
+                       a7 = pdata->arg[2];
+                       break;
                case COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_FINALIZE:
                        a0 = 
INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGNATURE_VERIFY_FINALIZE;
                        a1 = pdata->arg[0];
@@ -967,18 +1019,23 @@ static int svc_normal_to_secure_thread(void *data)
                        case COMMAND_FCS_CRYPTO_REMOVE_KEY:
                        case COMMAND_FCS_CRYPTO_GET_KEY_INFO:
                        case COMMAND_FCS_CRYPTO_AES_CRYPT_INIT:
+                       case COMMAND_FCS_CRYPTO_AES_CRYPT_UPDATE:
                        case COMMAND_FCS_CRYPTO_AES_CRYPT_FINALIZE:
                        case COMMAND_FCS_CRYPTO_GET_DIGEST_INIT:
+                       case COMMAND_FCS_CRYPTO_GET_DIGEST_UPDATE:
                        case COMMAND_FCS_CRYPTO_GET_DIGEST_FINALIZE:
                        case COMMAND_FCS_CRYPTO_MAC_VERIFY_INIT:
+                       case COMMAND_FCS_CRYPTO_MAC_VERIFY_UPDATE:
                        case COMMAND_FCS_CRYPTO_MAC_VERIFY_FINALIZE:
                        case COMMAND_FCS_CRYPTO_ECDSA_HASH_SIGNING_INIT:
                        case COMMAND_FCS_CRYPTO_ECDSA_HASH_SIGNING_FINALIZE:
                        case COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_INIT:
+                       case COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_UPDATE:
                        case 
COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_FINALIZE:
                        case COMMAND_FCS_CRYPTO_ECDSA_HASH_VERIFY_INIT:
                        case COMMAND_FCS_CRYPTO_ECDSA_HASH_VERIFY_FINALIZE:
                        case COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_INIT:
+                       case COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_UPDATE:
                        case COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_FINALIZE:
                        case COMMAND_FCS_CRYPTO_ECDSA_GET_PUBLIC_KEY_INIT:
                        case COMMAND_FCS_CRYPTO_ECDSA_GET_PUBLIC_KEY_FINALIZE:
diff --git a/include/linux/firmware/intel/stratix10-smc.h 
b/include/linux/firmware/intel/stratix10-smc.h
index 2b83ad044d49..efbf014e963b 100644
--- a/include/linux/firmware/intel/stratix10-smc.h
+++ b/include/linux/firmware/intel/stratix10-smc.h
@@ -948,6 +948,29 @@ 
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
 #define INTEL_SIP_SMC_FCS_AES_CRYPTO_INIT \
         INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FCS_AES_CRYPTO_INIT)
 
+/**
+ * Request INTEL_SIP_SMC_FCS_AES_CRYPTO_UPDATE
+ * Sync call to decrypt/encrypt a data block
+ *
+ * Call register usage:
+ * a0 INTEL_SIP_SMC_FCS_AES_CRYPTO_UPDATE
+ * a1 session ID
+ * a2 context ID
+ * a3 physical address of source
+ * a4 size of source
+ * a5 physical address of destination
+ * a6 size of destination
+ * a7 not used
+ *
+ * Return status:
+ * a0 INTEL_SIP_SMC_STATUS_OK, INTEL_SIP_SMC_STATUS_NOT_SUPPORTED or
+ *    INTEL_SIP_SMC_STATUS_ERROR
+ * a1-a3 not used
+ */
+#define INTEL_SIP_SMC_FUNCID_FCS_AES_CRYPTO_UPDATE 117
+#define INTEL_SIP_SMC_FCS_AES_CRYPTO_UPDATE \
+        INTEL_SIP_SMC_STD_CALL_VAL(INTEL_SIP_SMC_FUNCID_FCS_AES_CRYPTO_UPDATE)
+
 /**
  * Request INTEL_SIP_SMC_FCS_AES_CRYPTO_FINALIZE
  * Sync call to decrypt/encrypt a data block
@@ -997,6 +1020,31 @@ 
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
 #define INTEL_SIP_SMC_FCS_GET_DIGEST_INIT \
         INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FCS_GET_DIGEST_INIT)
 
+/**
+ * Request INTEL_SIP_SMC_FCS_GET_DIGEST_UPDATE
+ * Sync call to request the SHA-2 hash digest on a blob
+ *
+ * Call register usage:
+ * a0 INTEL_SIP_SMC_FCS_GET_DIGEST_UPDATE
+ * a1 session ID
+ * a2 context ID
+ * a3 physical address of source
+ * a4 size of source
+ * a5 physical address of destination
+ * a6 size of destination
+ * a7 not used
+ *
+ * Return status:
+ * a0 INTEL_SIP_SMC_STATUS_OK, INTEL_SIP_SMC_STATUS_NOT_SUPPORTED or
+ *    INTEL_SIP_SMC_STATUS_ERROR
+ * a1 mailbox errors if a0 is INTEL_SIP_SMC_STATUS_ERROR
+ * a2 physical address of response data
+ * a3 size of response data
+ */
+#define INTEL_SIP_SMC_FUNCID_FCS_GET_DIGEST_UPDATE 120
+#define INTEL_SIP_SMC_FCS_GET_DIGEST_UPDATE \
+        INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FCS_GET_DIGEST_UPDATE)
+
 /**
  * Request INTEL_SIP_SMC_FCS_GET_DIGEST_FINALIZE
  * Sync call to request the SHA-2 hash digest on a blob
@@ -1050,6 +1098,32 @@ 
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
 #define INTEL_SIP_SMC_FCS_MAC_VERIFY_INIT \
         INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FCS_MAC_VERIFY_INIT)
 
+/**
+ * Request INTEL_SIP_SMC_FCS_MAC_VERIFY_UPDATE
+ * Sync call to check the integrity and authenticity of a blob by comparing
+ * the calculated MAC with tagged MAC
+ *
+ * Call register usage:
+ * a0 INTEL_SIP_SMC_FCS_MAC_VERIFY_UPDATE
+ * a1 session ID
+ * a2 context ID
+ * a3 physical address of source
+ * a4 size of source
+ * a5 physical address of destination
+ * a6 size of destination
+ * a7 not used
+ *
+ * Return status:
+ * a0 INTEL_SIP_SMC_STATUS_OK, INTEL_SIP_SMC_STATUS_NOT_SUPPORTED or
+ *    INTEL_SIP_SMC_STATUS_ERROR
+ * a1 mailbox errors if a0 is INTEL_SIP_SMC_STATUS_ERROR
+ * a2 physical address of response data
+ * a3 size of response data
+ */
+#define INTEL_SIP_SMC_FUNCID_FCS_MAC_VERIFY_UPDATE 123
+#define INTEL_SIP_SMC_FCS_MAC_VERIFY_UPDATE \
+        INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FCS_MAC_VERIFY_UPDATE)
+
 /**
  * Request INTEL_SIP_SMC_FCS_MAC_VERIFY_FINALIZE
  * Sync call to check the integrity and authenticity of a blob by comparing
@@ -1151,6 +1225,31 @@ 
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
 #define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGNING_INIT \
         
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_ECDSA_SHA2_DATA_SIGNING_INIT)
 
+/**
+ * Request INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGNING_UPDATE
+ * Sync call to digital signature signing request on a data blob
+ *
+ * Call register usage:
+ * a0 INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGNING_UPDATE
+ * a1 session ID
+ * a2 context ID
+ * a3 physical address of source
+ * a4 size of source
+ * a5 physical address of destination
+ * a6 size of destination
+ * a7 not used
+ *
+ * Return status:
+ * a0 INTEL_SIP_SMC_STATUS_OK, INTEL_SIP_SMC_STATUS_NOT_SUPPORTED or
+ *    INTEL_SIP_SMC_STATUS_ERROR
+ * a1 mailbox errors if a0 is INTEL_SIP_SMC_STATUS_ERROR
+ * a2 physical address of response data
+ * a3 size of response data
+ */
+#define INTEL_SIP_SMC_FUNCID_ECDSA_SHA2_DATA_SIGNING_UPDATE 129
+#define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGNING_UPDATE \
+        
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_ECDSA_SHA2_DATA_SIGNING_UPDATE)
+
 /**
  * Request INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGNING_FINALIZE
  * Sync call to digital signature signing request on a data blob
@@ -1250,6 +1349,31 @@ 
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
 #define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGNATURE_VERIFY_INIT \
         
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FCS_ECDSA_SHA2_DATA_SIGNATURE_VERIFY_INIT)
 
+/**
+ * Request INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGNATURE_VERIFY_UPDATE
+ * Sync call to send digital signature verify request
+ *
+ * Call register usage:
+ * a0 INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGNATURE_VERIFY_UPDATE
+ * a1 session ID
+ * a2 context ID
+ * a3 physical address of source (contain user data)
+ * a4 size of source
+ * a5 physical address of destination
+ * a6 size of destination
+ * a7 size of user data
+ *
+ * Return status:
+ * a0 INTEL_SIP_SMC_STATUS_OK, INTEL_SIP_SMC_STATUS_NOT_SUPPORTED or
+ *    INTEL_SIP_SMC_STATUS_ERROR
+ * a1 mailbox errors if a0 is INTEL_SIP_SMC_STATUS_ERROR
+ * a2 physical address of response data
+ * a3 size of response data
+ */
+#define INTEL_SIP_SMC_FUNCID_FCS_ECDSA_SHA2_DATA_SIGNATURE_VERIFY_UPDATE 135
+#define INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGNATURE_VERIFY_UPDATE \
+        
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FCS_ECDSA_SHA2_DATA_SIGNATURE_VERIFY_UPDATE)
+
 /**
  * Request INTEL_SIP_SMC_FCS_ECDSA_SHA2_DATA_SIGNATURE_VERIFY_FINALIZE
  * Sync call to send digital signature verify request
diff --git a/include/linux/firmware/intel/stratix10-svc-client.h 
b/include/linux/firmware/intel/stratix10-svc-client.h
index 0143ec966742..f54dd620b4d8 100644
--- a/include/linux/firmware/intel/stratix10-svc-client.h
+++ b/include/linux/firmware/intel/stratix10-svc-client.h
@@ -278,18 +278,23 @@ enum stratix10_svc_command_code {
        COMMAND_FCS_CRYPTO_REMOVE_KEY,
        COMMAND_FCS_CRYPTO_GET_KEY_INFO,
        COMMAND_FCS_CRYPTO_AES_CRYPT_INIT,
+       COMMAND_FCS_CRYPTO_AES_CRYPT_UPDATE,
        COMMAND_FCS_CRYPTO_AES_CRYPT_FINALIZE,
        COMMAND_FCS_CRYPTO_GET_DIGEST_INIT,
+       COMMAND_FCS_CRYPTO_GET_DIGEST_UPDATE,
        COMMAND_FCS_CRYPTO_GET_DIGEST_FINALIZE,
        COMMAND_FCS_CRYPTO_MAC_VERIFY_INIT,
+       COMMAND_FCS_CRYPTO_MAC_VERIFY_UPDATE,
        COMMAND_FCS_CRYPTO_MAC_VERIFY_FINALIZE,
        COMMAND_FCS_CRYPTO_ECDSA_HASH_SIGNING_INIT,
        COMMAND_FCS_CRYPTO_ECDSA_HASH_SIGNING_FINALIZE,
        COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_INIT,
+       COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_UPDATE,
        COMMAND_FCS_CRYPTO_ECDSA_SHA2_DATA_SIGNING_FINALIZE,
        COMMAND_FCS_CRYPTO_ECDSA_HASH_VERIFY_INIT,
        COMMAND_FCS_CRYPTO_ECDSA_HASH_VERIFY_FINALIZE,
        COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_INIT,
+       COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_UPDATE,
        COMMAND_FCS_CRYPTO_ECDSA_SHA2_VERIFY_FINALIZE,
        COMMAND_FCS_CRYPTO_ECDSA_GET_PUBLIC_KEY_INIT,
        COMMAND_FCS_CRYPTO_ECDSA_GET_PUBLIC_KEY_FINALIZE,
-- 
2.25.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#12511): 
https://lists.yoctoproject.org/g/linux-yocto/message/12511
Mute This Topic: https://lists.yoctoproject.org/mt/98898745/21656
Group Owner: linux-yocto+ow...@lists.yoctoproject.org
Unsubscribe: https://lists.yoctoproject.org/g/linux-yocto/unsub 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to