Skip to content
/ linux Public

Commit 2abf05a

Browse files
superm1Sasha Levin
authored andcommitted
crypto: ccp - Factor out ring destroy handling to a helper
[ Upstream commit d95f87a ] 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> Stable-dep-of: 7b85137 ("crypto: ccp - Send PSP_CMD_TEE_RING_DESTROY when PSP_CMD_TEE_RING_INIT fails") Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent b2e7e26 commit 2abf05a

File tree

1 file changed

+24
-12
lines changed

1 file changed

+24
-12
lines changed

drivers/crypto/ccp/tee-dev.c

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,29 @@ static inline void tee_free_cmd_buffer(struct tee_init_ring_cmd *cmd)
8686
kfree(cmd);
8787
}
8888

89+
static bool tee_send_destroy_cmd(struct psp_tee_device *tee)
90+
{
91+
unsigned int reg;
92+
int ret;
93+
94+
ret = psp_mailbox_command(tee->psp, PSP_CMD_TEE_RING_DESTROY, NULL,
95+
TEE_DEFAULT_CMD_TIMEOUT, &reg);
96+
if (ret) {
97+
dev_err(tee->dev, "tee: ring destroy command timed out, disabling TEE support\n");
98+
psp_dead = true;
99+
return false;
100+
}
101+
102+
if (FIELD_GET(PSP_CMDRESP_STS, reg)) {
103+
dev_err(tee->dev, "tee: ring destroy command failed (%#010lx)\n",
104+
FIELD_GET(PSP_CMDRESP_STS, reg));
105+
psp_dead = true;
106+
return false;
107+
}
108+
109+
return true;
110+
}
111+
89112
static int tee_init_ring(struct psp_tee_device *tee)
90113
{
91114
int ring_size = MAX_RING_BUFFER_ENTRIES * sizeof(struct tee_ring_cmd);
@@ -136,24 +159,13 @@ static int tee_init_ring(struct psp_tee_device *tee)
136159

137160
static void tee_destroy_ring(struct psp_tee_device *tee)
138161
{
139-
unsigned int reg;
140-
int ret;
141-
142162
if (!tee->rb_mgr.ring_start)
143163
return;
144164

145165
if (psp_dead)
146166
goto free_ring;
147167

148-
ret = psp_mailbox_command(tee->psp, PSP_CMD_TEE_RING_DESTROY, NULL,
149-
TEE_DEFAULT_CMD_TIMEOUT, &reg);
150-
if (ret) {
151-
dev_err(tee->dev, "tee: ring destroy command timed out, disabling TEE support\n");
152-
psp_dead = true;
153-
} else if (FIELD_GET(PSP_CMDRESP_STS, reg)) {
154-
dev_err(tee->dev, "tee: ring destroy command failed (%#010lx)\n",
155-
FIELD_GET(PSP_CMDRESP_STS, reg));
156-
}
168+
tee_send_destroy_cmd(tee);
157169

158170
free_ring:
159171
tee_free_ring(tee);

0 commit comments

Comments
 (0)