lk: msm: scm: Add save-partition-hash
Add new command to allow saving the kernel image sha256 digest.
Change-Id: Ic73199cf38886cecb5119d534f2390ab50cc9d5f
diff --git a/platform/msm_shared/scm.c b/platform/msm_shared/scm.c
index d33d14e..7bb1093 100644
--- a/platform/msm_shared/scm.c
+++ b/platform/msm_shared/scm.c
@@ -474,6 +474,43 @@
return resp_buf;
}
+#define SHA256_DIGEST_LENGTH (256/8)
+/*
+ * struct qseecom_save_partition_hash_req
+ * @partition_id - partition id.
+ * @digest[SHA256_DIGEST_LENGTH] - sha256 digest.
+ */
+struct qseecom_save_partition_hash_req {
+ uint32_t partition_id; /* in */
+ uint8_t digest[SHA256_DIGEST_LENGTH]; /* in */
+};
+
+
+void save_kernel_hash_cmd(void *digest)
+{
+ uint32_t svc_id;
+ uint32_t cmd_id;
+ void *cmd_buf;
+ size_t cmd_len;
+ void *resp_buf = NULL;
+ size_t resp_len = 0;
+ struct qseecom_save_partition_hash_req req;
+
+ /*no response */
+ resp_buf = NULL;
+ resp_len = 0;
+
+ req.partition_id = 0; /* kernel */
+ memcpy(req.digest, digest, sizeof(req.digest));
+
+ svc_id = SCM_SVC_ES;
+ cmd_id = SCM_SAVE_PARTITION_HASH_ID;
+ cmd_buf = (void *)&req;
+ cmd_len = sizeof(req);
+
+ scm_call(svc_id, cmd_id, cmd_buf, cmd_len, resp_buf, resp_len);
+}
+
/*
* Switches the CE1 channel between ADM and register usage.
* channel : AP_CE_REGISTER_USE, CE1 uses register interface