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

commit 63f4a2705f7093ec24599eb744260e46e23e48bc from
https://github.com/altera-opensource/linux-socfpga.git

Add generic mailbox command that can support SDM command. User can use this
command to send SDM mailbox command. User have to specified an input file
which contain the command data and an output file for SDM response to be
copied over.

Signed-off-by: Teh, Wen Ping <wen.ping....@intel.com>
Signed-off-by: Wenlin Kang <wenlin.k...@windriver.com>
---
 drivers/firmware/stratix10-svc.c               | 18 ++++++++++++++++++
 include/linux/firmware/intel/stratix10-smc.h   | 18 ++++++++++++++++++
 .../firmware/intel/stratix10-svc-client.h      |  6 ++++++
 3 files changed, 42 insertions(+)

diff --git a/drivers/firmware/stratix10-svc.c b/drivers/firmware/stratix10-svc.c
index a70459326478..a291e38520bc 100644
--- a/drivers/firmware/stratix10-svc.c
+++ b/drivers/firmware/stratix10-svc.c
@@ -37,6 +37,7 @@
 #define SVC_NUM_CHANNEL                                        4
 #define FPGA_CONFIG_DATA_CLAIM_TIMEOUT_MS      2000
 #define FPGA_CONFIG_STATUS_TIMEOUT_SEC         30
+#define BYTE_TO_WORD_SIZE                              4
 
 /* stratix10 service layer clients */
 #define STRATIX10_RSU                          "stratix10-rsu"
@@ -432,6 +433,13 @@ static void svc_thread_recv_status_ok(struct 
stratix10_svc_data *p_data,
                cb_data->status = BIT(SVC_STATUS_OK);
                cb_data->kaddr2 = &res.a2;
                break;
+       case COMMAND_MBOX_SEND_CMD:
+               cb_data->status = BIT(SVC_STATUS_OK);
+               cb_data->kaddr1 = &res.a1;
+               /* SDM return size in u32 word. Convert size to u8 */
+               res.a2 = res.a2 * BYTE_TO_WORD_SIZE;
+               cb_data->kaddr2 = &res.a2;
+               break;
        default:
                pr_warn("it shouldn't happen\n");
                break;
@@ -931,6 +939,15 @@ static int svc_normal_to_secure_thread(void *data)
                        a1 = (unsigned long)pdata->paddr;
                        a2 = 0;
                        break;
+               case COMMAND_MBOX_SEND_CMD:
+                       a0 = INTEL_SIP_SMC_MBOX_SEND_CMD;
+                       a1 = pdata->arg[0];
+                       a2 = (unsigned long)pdata->paddr;
+                       a3 = (unsigned long)pdata->size / BYTE_TO_WORD_SIZE;
+                       a4 = pdata->arg[1];
+                       a5 = (unsigned long)pdata->paddr_output;
+                       a6 = (unsigned long)pdata->size_output / 
BYTE_TO_WORD_SIZE;
+                       break;
                default:
                        pr_warn("it shouldn't happen\n");
                        break;
@@ -1043,6 +1060,7 @@ static int svc_normal_to_secure_thread(void *data)
                        case COMMAND_FCS_CRYPTO_ECDH_REQUEST_FINALIZE:
                        case COMMAND_FCS_RANDOM_NUMBER_GEN_EXT:
                        case COMMAND_FCS_SDOS_DATA_EXT:
+                       case COMMAND_MBOX_SEND_CMD:
                                cbdata->status = BIT(SVC_STATUS_INVALID_PARAM);
                                cbdata->kaddr1 = NULL;
                                cbdata->kaddr2 = NULL;
diff --git a/include/linux/firmware/intel/stratix10-smc.h 
b/include/linux/firmware/intel/stratix10-smc.h
index efbf014e963b..2517062690bc 100644
--- a/include/linux/firmware/intel/stratix10-smc.h
+++ b/include/linux/firmware/intel/stratix10-smc.h
@@ -478,6 +478,24 @@ 
INTEL_SIP_SMC_FAST_CALL_VAL(INTEL_SIP_SMC_FUNCID_FPGA_CONFIG_COMPLETED_WRITE)
 
 /**
  * SMC call protocol for Mailbox, starting FUNCID from 60
+ *
+ * Call register usage:
+ * a0 INTEL_SIP_SMC_MBOX_SEND_CMD
+ * a1 mailbox command code
+ * a2 physical address that contain mailbox command data (not include header)
+ * a3 mailbox command data size in word
+ * a4 set to 0 for CASUAL, set to 1 for URGENT
+ * a5 physical address for secure firmware to put response data
+ *    (not include header)
+ * a6 maximum size in word of physical address to store response data
+ * a7 not used
+ *
+ * Return status
+ * a0 INTEL_SIP_SMC_STATUS_OK, INTEL_SIP_SMC_STATUS_REJECTED or
+ *    INTEL_SIP_SMC_STATUS_ERROR
+ * a1 mailbox error code
+ * a2 response data length in word
+ * a3 not used
  */
 #define INTEL_SIP_SMC_FUNCID_MBOX_SEND_CMD 60
        #define INTEL_SIP_SMC_MBOX_SEND_CMD \
diff --git a/include/linux/firmware/intel/stratix10-svc-client.h 
b/include/linux/firmware/intel/stratix10-svc-client.h
index f54dd620b4d8..f45ff97459b8 100644
--- a/include/linux/firmware/intel/stratix10-svc-client.h
+++ b/include/linux/firmware/intel/stratix10-svc-client.h
@@ -231,6 +231,10 @@ struct stratix10_svc_chan;
  *
  * @COMMAND_SMC_SVC_VERSION: Non-mailbox SMC SVC API Version,
  * return status is SVC_STATUS_OK
+ *
+ * @COMMAND_MBOX_SEND_CMD: send generic mailbox command, return status is
+ * SVC_STATUS_OK or SVC_STATUS_ERROR
+ *
  */
 enum stratix10_svc_command_code {
        /* for FPGA */
@@ -302,6 +306,8 @@ enum stratix10_svc_command_code {
        COMMAND_FCS_CRYPTO_ECDH_REQUEST_FINALIZE,
        COMMAND_FCS_RANDOM_NUMBER_GEN_EXT,
        COMMAND_FCS_SDOS_DATA_EXT,
+       /* for generic mailbox send command */
+       COMMAND_MBOX_SEND_CMD = 100,
        /* Non-mailbox SMC Call*/
        COMMAND_SMC_SVC_VERSION = 200,
 };
-- 
2.25.1

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#12572): 
https://lists.yoctoproject.org/g/linux-yocto/message/12572
Mute This Topic: https://lists.yoctoproject.org/mt/98921488/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