]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
crypto: ccp - Factor out ring destroy handling to a helper
authorMario Limonciello (AMD) <superm1@kernel.org>
Fri, 16 Jan 2026 04:11:31 +0000 (22:11 -0600)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Wed, 21 Jan 2026 08:52:01 +0000 (10:52 +0200)
The ring destroy command needs to be used in multiple places. Split
out the code to a helper.

Tested-by: Yijun Shen <Yijun.Shen@Dell.com>
Signed-off-by: Mario Limonciello (AMD) <superm1@kernel.org>
Acked-by: Tom Lendacky <thomas.lendacky@amd.com>
Reviewed-by: Shyam Sundar S K <Shyam-sundar.S-k@amd.com>
Link: https://patch.msgid.link/20260116041132.153674-5-superm1@kernel.org
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
drivers/crypto/ccp/tee-dev.c

index 11c4b05e2f3a28c262b384e42c2c4703e0d9929c..ef1430f86ad62bddbbc1398d2b74550f5b5b6205 100644 (file)
@@ -86,6 +86,29 @@ static inline void tee_free_cmd_buffer(struct tee_init_ring_cmd *cmd)
        kfree(cmd);
 }
 
+static bool tee_send_destroy_cmd(struct psp_tee_device *tee)
+{
+       unsigned int reg;
+       int ret;
+
+       ret = psp_mailbox_command(tee->psp, PSP_CMD_TEE_RING_DESTROY, NULL,
+                                 TEE_DEFAULT_CMD_TIMEOUT, &reg);
+       if (ret) {
+               dev_err(tee->dev, "tee: ring destroy command timed out, disabling TEE support\n");
+               psp_dead = true;
+               return false;
+       }
+
+       if (FIELD_GET(PSP_CMDRESP_STS, reg)) {
+               dev_err(tee->dev, "tee: ring destroy command failed (%#010lx)\n",
+                       FIELD_GET(PSP_CMDRESP_STS, reg));
+               psp_dead = true;
+               return false;
+       }
+
+       return true;
+}
+
 static int tee_init_ring(struct psp_tee_device *tee)
 {
        int ring_size = MAX_RING_BUFFER_ENTRIES * sizeof(struct tee_ring_cmd);
@@ -137,24 +160,13 @@ free_buf:
 
 static void tee_destroy_ring(struct psp_tee_device *tee)
 {
-       unsigned int reg;
-       int ret;
-
        if (!tee->rb_mgr.ring_start)
                return;
 
        if (psp_dead)
                goto free_ring;
 
-       ret = psp_mailbox_command(tee->psp, PSP_CMD_TEE_RING_DESTROY, NULL,
-                                 TEE_DEFAULT_CMD_TIMEOUT, &reg);
-       if (ret) {
-               dev_err(tee->dev, "tee: ring destroy command timed out, disabling TEE support\n");
-               psp_dead = true;
-       } else if (FIELD_GET(PSP_CMDRESP_STS, reg)) {
-               dev_err(tee->dev, "tee: ring destroy command failed (%#010lx)\n",
-                       FIELD_GET(PSP_CMDRESP_STS, reg));
-       }
+       tee_send_destroy_cmd(tee);
 
 free_ring:
        tee_free_ring(tee);