Skip to content

Commit

Permalink
ASoC: SOF: ipc4-control: Use SOF_CTRL_CMD_BINARY as numid for bytes_ext
Browse files Browse the repository at this point in the history
The header.numid is set to scontrol->comp_id in bytes_ext_get and it is
ignored during bytes_ext_put.
The use of comp_id is not quite great as it is kernel internal
identification number.

Set the header.numid to SOF_CTRL_CMD_BINARY during get and validate the
numid during put to provide consistent and compatible identification
number as IPC3.

For IPC4 existing tooling also ignored the numid but with the use of
SOF_CTRL_CMD_BINARY the different handling of the blobs can be dropped,
providing better user experience.

Reported-by: Seppo Ingalsuo <[email protected]>
Closes: thesofproject#5282
Fixes: a062c88 ("ASoC: SOF: ipc4-control: Add support for bytes control get and put")
Cc: [email protected]
Signed-off-by: Peter Ujfalusi <[email protected]>
  • Loading branch information
ujfalusi committed Jan 3, 2025
1 parent b6d3bb5 commit afa5ed6
Showing 1 changed file with 10 additions and 1 deletion.
11 changes: 10 additions & 1 deletion sound/soc/sof/ipc4-control.c
Original file line number Diff line number Diff line change
Expand Up @@ -531,6 +531,14 @@ static int sof_ipc4_bytes_ext_put(struct snd_sof_control *scontrol,
return -EINVAL;
}

/* Check header id */
if (header.numid != SOF_CTRL_CMD_BINARY) {
dev_err_ratelimited(scomp->dev,
"Incorrect numid for bytes put %d\n",
header.numid);
return -EINVAL;
}

/* Verify the ABI header first */
if (copy_from_user(&abi_hdr, tlvd->tlv, sizeof(abi_hdr)))
return -EFAULT;
Expand Down Expand Up @@ -613,7 +621,8 @@ static int _sof_ipc4_bytes_ext_get(struct snd_sof_control *scontrol,
if (data_size > size)
return -ENOSPC;

header.numid = scontrol->comp_id;
/* Set header id and length */
header.numid = SOF_CTRL_CMD_BINARY;
header.length = data_size;

if (copy_to_user(tlvd, &header, sizeof(struct snd_ctl_tlv)))
Expand Down

0 comments on commit afa5ed6

Please sign in to comment.