mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-17 15:25:22 -04:00
crypto: ccp - Factor out ring destroy handling to a helper
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>
This commit is contained in:
committed by
Ilpo Järvinen
parent
0ba2035026
commit
d95f87a65b
@@ -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, ®);
|
||||
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 @@ static int tee_init_ring(struct psp_tee_device *tee)
|
||||
|
||||
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, ®);
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user