Skip to content

Commit

Permalink
Merge remote-tracking branch 'asoc/fix/intel' into asoc-linus
Browse files Browse the repository at this point in the history
  • Loading branch information
Mark Brown committed Mar 16, 2015
2 parents 06e5801 + 3fe0607 commit 016e81f
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 11 deletions.
3 changes: 0 additions & 3 deletions sound/soc/intel/sst-haswell-dsp.c
Original file line number Diff line number Diff line change
Expand Up @@ -207,9 +207,6 @@ static int hsw_parse_fw_image(struct sst_fw *sst_fw)
module = (void *)module + sizeof(*module) + module->mod_size;
}

/* allocate scratch mem regions */
sst_block_alloc_scratch(dsp);

return 0;
}

Expand Down
32 changes: 24 additions & 8 deletions sound/soc/intel/sst-haswell-ipc.c
Original file line number Diff line number Diff line change
Expand Up @@ -1732,6 +1732,7 @@ static void sst_hsw_drop_all(struct sst_hsw *hsw)
int sst_hsw_dsp_load(struct sst_hsw *hsw)
{
struct sst_dsp *dsp = hsw->dsp;
struct sst_fw *sst_fw, *t;
int ret;

dev_dbg(hsw->dev, "loading audio DSP....");
Expand All @@ -1748,12 +1749,17 @@ int sst_hsw_dsp_load(struct sst_hsw *hsw)
return ret;
}

ret = sst_fw_reload(hsw->sst_fw);
if (ret < 0) {
dev_err(hsw->dev, "error: SST FW reload failed\n");
sst_dsp_dma_put_channel(dsp);
return -ENOMEM;
list_for_each_entry_safe_reverse(sst_fw, t, &dsp->fw_list, list) {
ret = sst_fw_reload(sst_fw);
if (ret < 0) {
dev_err(hsw->dev, "error: SST FW reload failed\n");
sst_dsp_dma_put_channel(dsp);
return -ENOMEM;
}
}
ret = sst_block_alloc_scratch(hsw->dsp);
if (ret < 0)
return -EINVAL;

sst_dsp_dma_put_channel(dsp);
return 0;
Expand Down Expand Up @@ -1809,12 +1815,17 @@ int sst_hsw_dsp_runtime_suspend(struct sst_hsw *hsw)

int sst_hsw_dsp_runtime_sleep(struct sst_hsw *hsw)
{
sst_fw_unload(hsw->sst_fw);
sst_block_free_scratch(hsw->dsp);
struct sst_fw *sst_fw, *t;
struct sst_dsp *dsp = hsw->dsp;

list_for_each_entry_safe(sst_fw, t, &dsp->fw_list, list) {
sst_fw_unload(sst_fw);
}
sst_block_free_scratch(dsp);

hsw->boot_complete = false;

sst_dsp_sleep(hsw->dsp);
sst_dsp_sleep(dsp);

return 0;
}
Expand Down Expand Up @@ -1943,6 +1954,11 @@ int sst_hsw_dsp_init(struct device *dev, struct sst_pdata *pdata)
goto fw_err;
}

/* allocate scratch mem regions */
ret = sst_block_alloc_scratch(hsw->dsp);
if (ret < 0)
goto boot_err;

/* wait for DSP boot completion */
sst_dsp_boot(hsw->dsp);
ret = wait_event_timeout(hsw->boot_wait, hsw->boot_complete,
Expand Down

0 comments on commit 016e81f

Please sign in to comment.