Skip to content
/ linux Public

Commit 90c1858

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 809fd69 commit 90c1858

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);
@@ -137,24 +160,13 @@ static int tee_init_ring(struct psp_tee_device *tee)
137160

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

146166
if (psp_dead)
147167
goto free_ring;
148168

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

159171
free_ring:
160172
tee_free_ring(tee);

0 commit comments

Comments
 (0)