Commit e1cfd5fe authored by Charles Keepax's avatar Charles Keepax Committed by Mark Brown

ASoC: intel: sof_sdw: Check link mask validity in get_dailink_info

As get_dailink_info spins through all the links anyway simply check the
link masks there. This saves an extra check and means the code will
fail earlier if the mask is invalid.
Reviewed-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: default avatarCharles Keepax <ckeepax@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20230808132013.889419-3-ckeepax@opensource.cirrus.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 3003ea9c
...@@ -1053,6 +1053,10 @@ static int get_dailink_info(struct device *dev, ...@@ -1053,6 +1053,10 @@ static int get_dailink_info(struct device *dev,
int stream; int stream;
u64 adr; u64 adr;
/* make sure the link mask has a single bit set */
if (!is_power_of_2(adr_link->mask))
return -EINVAL;
for (i = 0; i < adr_link->num_adr; i++) { for (i = 0; i < adr_link->num_adr; i++) {
adr = adr_link->adr_d[i].adr; adr = adr_link->adr_d[i].adr;
codec_index = find_codec_info_part(adr); codec_index = find_codec_info_part(adr);
...@@ -1302,10 +1306,6 @@ static int get_slave_info(const struct snd_soc_acpi_link_adr *adr_link, ...@@ -1302,10 +1306,6 @@ static int get_slave_info(const struct snd_soc_acpi_link_adr *adr_link,
no_aggregation = sof_sdw_quirk & SOF_SDW_NO_AGGREGATION; no_aggregation = sof_sdw_quirk & SOF_SDW_NO_AGGREGATION;
adr_d = &adr_link->adr_d[adr_index]; adr_d = &adr_link->adr_d[adr_index];
/* make sure the link mask has a single bit set */
if (!is_power_of_2(adr_link->mask))
return -EINVAL;
cpu_dai_id[index++] = ffs(adr_link->mask) - 1; cpu_dai_id[index++] = ffs(adr_link->mask) - 1;
if (!adr_d->endpoints->aggregated || no_aggregation) { if (!adr_d->endpoints->aggregated || no_aggregation) {
*cpu_dai_num = 1; *cpu_dai_num = 1;
...@@ -1334,10 +1334,6 @@ static int get_slave_info(const struct snd_soc_acpi_link_adr *adr_link, ...@@ -1334,10 +1334,6 @@ static int get_slave_info(const struct snd_soc_acpi_link_adr *adr_link,
endpoint->group_id != *group_id) endpoint->group_id != *group_id)
continue; continue;
/* make sure the link mask has a single bit set */
if (!is_power_of_2(adr_next->mask))
return -EINVAL;
if (index >= SDW_MAX_CPU_DAIS) { if (index >= SDW_MAX_CPU_DAIS) {
dev_err(dev, "cpu_dai_id array overflows\n"); dev_err(dev, "cpu_dai_id array overflows\n");
return -EINVAL; return -EINVAL;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment