Skip to content

Commit

Permalink
ASoC: wm_adsp: Ensure that block writes are from DMA aligned addresses
Browse files Browse the repository at this point in the history
Otherwise we won't run correctly on systems that require this for larger
data transfers.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
  • Loading branch information
Mark Brown committed Jan 7, 2013
1 parent d1c3ed6 commit a76fefa
Showing 1 changed file with 22 additions and 1 deletion.
23 changes: 22 additions & 1 deletion sound/soc/codecs/wm_adsp.c
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,7 @@ static int wm_adsp_load(struct wm_adsp *dsp)
const struct wm_adsp_region *mem;
const char *region_name;
char *file, *text;
void *buf;
unsigned int reg;
int regions = 0;
int ret, offset, type, sizes;
Expand Down Expand Up @@ -322,8 +323,18 @@ static int wm_adsp_load(struct wm_adsp *dsp)
}

if (reg) {
ret = regmap_raw_write(regmap, reg, region->data,
buf = kmemdup(region->data, le32_to_cpu(region->len),
GFP_KERNEL);
if (!buf) {
adsp_err(dsp, "Out of memory\n");
return -ENOMEM;
}

ret = regmap_raw_write(regmap, reg, buf,
le32_to_cpu(region->len));

kfree(buf);

if (ret != 0) {
adsp_err(dsp,
"%s.%d: Failed to write %d bytes at %d in %s: %d\n",
Expand Down Expand Up @@ -359,6 +370,7 @@ static int wm_adsp_load_coeff(struct wm_adsp *dsp)
const char *region_name;
int ret, pos, blocks, type, offset, reg;
char *file;
void *buf;

file = kzalloc(PAGE_SIZE, GFP_KERNEL);
if (file == NULL)
Expand Down Expand Up @@ -426,13 +438,22 @@ static int wm_adsp_load_coeff(struct wm_adsp *dsp)
}

if (reg) {
buf = kmemdup(blk->data, le32_to_cpu(blk->len),
GFP_KERNEL);
if (!buf) {
adsp_err(dsp, "Out of memory\n");
return -ENOMEM;
}

ret = regmap_raw_write(regmap, reg, blk->data,
le32_to_cpu(blk->len));
if (ret != 0) {
adsp_err(dsp,
"%s.%d: Failed to write to %x in %s\n",
file, blocks, reg, region_name);
}

kfree(buf);
}

pos += le32_to_cpu(blk->len) + sizeof(*blk);
Expand Down

0 comments on commit a76fefa

Please sign in to comment.