Commit c01422a4 authored by Nariman Poushin's avatar Nariman Poushin Committed by Mark Brown

ASoC: wm_adsp: Interpret ADSP memory region lengths as 32 bit words

Pad the ADSP word (3 bytes) to 4 bytes in the kernel and calculate
lengths based on padded ADSP words instead of treating them as bytes
Signed-off-by: default avatarNariman Poushin <nariman@opensource.wolfsonmicro.com>
Signed-off-by: default avatarDimitris Papastamos <dp@opensource.wolfsonmicro.com>
Signed-off-by: default avatarMark Brown <broonie@linaro.org>
Cc: stable@vger.kernel.org
parent 5e01dc7b
...@@ -1062,6 +1062,7 @@ static int wm_adsp_setup_algs(struct wm_adsp *dsp) ...@@ -1062,6 +1062,7 @@ static int wm_adsp_setup_algs(struct wm_adsp *dsp)
if (i + 1 < algs) { if (i + 1 < algs) {
region->len = be32_to_cpu(adsp1_alg[i + 1].dm); region->len = be32_to_cpu(adsp1_alg[i + 1].dm);
region->len -= be32_to_cpu(adsp1_alg[i].dm); region->len -= be32_to_cpu(adsp1_alg[i].dm);
region->len *= 4;
wm_adsp_create_control(dsp, region); wm_adsp_create_control(dsp, region);
} else { } else {
adsp_warn(dsp, "Missing length info for region DM with ID %x\n", adsp_warn(dsp, "Missing length info for region DM with ID %x\n",
...@@ -1079,6 +1080,7 @@ static int wm_adsp_setup_algs(struct wm_adsp *dsp) ...@@ -1079,6 +1080,7 @@ static int wm_adsp_setup_algs(struct wm_adsp *dsp)
if (i + 1 < algs) { if (i + 1 < algs) {
region->len = be32_to_cpu(adsp1_alg[i + 1].zm); region->len = be32_to_cpu(adsp1_alg[i + 1].zm);
region->len -= be32_to_cpu(adsp1_alg[i].zm); region->len -= be32_to_cpu(adsp1_alg[i].zm);
region->len *= 4;
wm_adsp_create_control(dsp, region); wm_adsp_create_control(dsp, region);
} else { } else {
adsp_warn(dsp, "Missing length info for region ZM with ID %x\n", adsp_warn(dsp, "Missing length info for region ZM with ID %x\n",
...@@ -1108,6 +1110,7 @@ static int wm_adsp_setup_algs(struct wm_adsp *dsp) ...@@ -1108,6 +1110,7 @@ static int wm_adsp_setup_algs(struct wm_adsp *dsp)
if (i + 1 < algs) { if (i + 1 < algs) {
region->len = be32_to_cpu(adsp2_alg[i + 1].xm); region->len = be32_to_cpu(adsp2_alg[i + 1].xm);
region->len -= be32_to_cpu(adsp2_alg[i].xm); region->len -= be32_to_cpu(adsp2_alg[i].xm);
region->len *= 4;
wm_adsp_create_control(dsp, region); wm_adsp_create_control(dsp, region);
} else { } else {
adsp_warn(dsp, "Missing length info for region XM with ID %x\n", adsp_warn(dsp, "Missing length info for region XM with ID %x\n",
...@@ -1125,6 +1128,7 @@ static int wm_adsp_setup_algs(struct wm_adsp *dsp) ...@@ -1125,6 +1128,7 @@ static int wm_adsp_setup_algs(struct wm_adsp *dsp)
if (i + 1 < algs) { if (i + 1 < algs) {
region->len = be32_to_cpu(adsp2_alg[i + 1].ym); region->len = be32_to_cpu(adsp2_alg[i + 1].ym);
region->len -= be32_to_cpu(adsp2_alg[i].ym); region->len -= be32_to_cpu(adsp2_alg[i].ym);
region->len *= 4;
wm_adsp_create_control(dsp, region); wm_adsp_create_control(dsp, region);
} else { } else {
adsp_warn(dsp, "Missing length info for region YM with ID %x\n", adsp_warn(dsp, "Missing length info for region YM with ID %x\n",
...@@ -1142,6 +1146,7 @@ static int wm_adsp_setup_algs(struct wm_adsp *dsp) ...@@ -1142,6 +1146,7 @@ static int wm_adsp_setup_algs(struct wm_adsp *dsp)
if (i + 1 < algs) { if (i + 1 < algs) {
region->len = be32_to_cpu(adsp2_alg[i + 1].zm); region->len = be32_to_cpu(adsp2_alg[i + 1].zm);
region->len -= be32_to_cpu(adsp2_alg[i].zm); region->len -= be32_to_cpu(adsp2_alg[i].zm);
region->len *= 4;
wm_adsp_create_control(dsp, region); wm_adsp_create_control(dsp, region);
} else { } else {
adsp_warn(dsp, "Missing length info for region ZM with ID %x\n", adsp_warn(dsp, "Missing length info for region ZM with ID %x\n",
......
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