Merge branch 'for-5.4' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie...
[sfrench/cifs-2.6.git] / sound / soc / sof / ipc.c
index b2f359d2f7e530b3813ce2b78ae6175272f17e4b..5994e10733642afc2bcc710798c541ed7722884d 100644 (file)
@@ -210,9 +210,7 @@ static int tx_wait_done(struct snd_sof_ipc *ipc, struct snd_sof_ipc_msg *msg,
        if (ret == 0) {
                dev_err(sdev->dev, "error: ipc timed out for 0x%x size %d\n",
                        hdr->cmd, hdr->size);
-               snd_sof_dsp_dbg_dump(ipc->sdev, SOF_DBG_REGS | SOF_DBG_MBOX);
-               snd_sof_ipc_dump(ipc->sdev);
-               snd_sof_trace_notify_for_error(ipc->sdev);
+               snd_sof_handle_fw_exception(ipc->sdev);
                ret = -ETIMEDOUT;
        } else {
                /* copy the data returned from DSP */
@@ -572,8 +570,10 @@ static int sof_set_get_large_ctrl_data(struct snd_sof_dev *sdev,
        else
                err = sof_get_ctrl_copy_params(cdata->type, partdata, cdata,
                                               sparams);
-       if (err < 0)
+       if (err < 0) {
+               kfree(partdata);
                return err;
+       }
 
        msg_bytes = sparams->msg_bytes;
        pl_size = sparams->pl_size;
@@ -794,12 +794,6 @@ struct snd_sof_ipc *snd_sof_ipc_init(struct snd_sof_dev *sdev)
        struct snd_sof_ipc *ipc;
        struct snd_sof_ipc_msg *msg;
 
-       /* check if mandatory ops required for ipc are defined */
-       if (!sof_ops(sdev)->fw_ready) {
-               dev_err(sdev->dev, "error: ipc mandatory ops not defined\n");
-               return NULL;
-       }
-
        ipc = devm_kzalloc(sdev->dev, sizeof(*ipc), GFP_KERNEL);
        if (!ipc)
                return NULL;