ASoC: SOF: Intel: remove unnecessary waitq before loading firmware
authorAmery Song <chao.song@intel.com>
Thu, 12 Mar 2020 20:06:21 +0000 (15:06 -0500)
committerMark Brown <broonie@kernel.org>
Fri, 13 Mar 2020 15:13:25 +0000 (15:13 +0000)
The HDA_DSP_IPC_PURGE_FW IPC from ROM is already handled in
cl_dsp_init(), and it will never be received in the IRQ thread,
so the wait condition on this IPC will never be satisfied. The
wait before loading firmware is redundant and can be removed safely.

Signed-off-by: Amery Song <chao.song@intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Keyon Jie <yang.jie@linux.intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Reviewed-by: Pierre Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
Link: https://lore.kernel.org/r/20200312200622.24477-6-pierre-louis.bossart@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/intel/cnl.c
sound/soc/sof/intel/hda-ipc.c
sound/soc/sof/intel/hda-loader.c
sound/soc/sof/intel/hda.c
sound/soc/sof/intel/hda.h
sound/soc/sof/loader.c
sound/soc/sof/sof-priv.h

index 05125cb0be6e28166933d0a46b3df8498ada7bb9..e427d00eca71fd60cd6a02f296574541603728ac 100644 (file)
@@ -65,11 +65,6 @@ static irqreturn_t cnl_ipc_irq_thread(int irq, void *context)
                hda_dsp_ipc_get_reply(sdev);
                snd_sof_ipc_reply(sdev, msg);
 
-               if (sdev->code_loading) {
-                       sdev->code_loading = 0;
-                       wake_up(&sdev->waitq);
-               }
-
                cnl_ipc_dsp_done(sdev);
 
                spin_unlock_irq(&sdev->ipc_lock);
index a6052849555196b2b6099116d7f178cf117557f1..6062bb6011fb7b860af6e4b70b6e87f4344895dd 100644 (file)
@@ -174,12 +174,6 @@ irqreturn_t hda_dsp_ipc_irq_thread(int irq, void *context)
                hda_dsp_ipc_get_reply(sdev);
                snd_sof_ipc_reply(sdev, msg);
 
-               /* wake up sleeper if we are loading code */
-               if (sdev->code_loading) {
-                       sdev->code_loading = 0;
-                       wake_up(&sdev->waitq);
-               }
-
                /* set the done bit */
                hda_dsp_ipc_dsp_done(sdev);
 
index 03b05d7f66da3df2e316fcf6fecdf6a50094e17d..0633b76dab49100b0985219ef116672f42c62c13 100644 (file)
@@ -179,9 +179,6 @@ static int cl_trigger(struct snd_sof_dev *sdev,
        /* code loader is special case that reuses stream ops */
        switch (cmd) {
        case SNDRV_PCM_TRIGGER_START:
-               wait_event_timeout(sdev->waitq, !sdev->code_loading,
-                                  HDA_DSP_CL_TRIGGER_TIMEOUT);
-
                snd_sof_dsp_update_bits(sdev, HDA_DSP_HDA_BAR, SOF_HDA_INTCTL,
                                        1 << hstream->index,
                                        1 << hstream->index);
index 7ca887041a3441e616d723aa08e4e26d72a10c61..b2681245daafb7ac3896b3d952e66f1c81d2b407 100644 (file)
@@ -585,9 +585,6 @@ int hda_dsp_probe(struct snd_sof_dev *sdev)
        hda_dsp_ctrl_ppcap_enable(sdev, true);
        hda_dsp_ctrl_ppcap_int_enable(sdev, true);
 
-       /* initialize waitq for code loading */
-       init_waitqueue_head(&sdev->waitq);
-
        /* set default mailbox offset for FW ready message */
        sdev->dsp_box.offset = HDA_DSP_MBOX_UPLINK_OFFSET;
 
index 537c0a930a15c82d559df5ffb456ab82fe70ec56..2a57fc9f3e58952620dc8d58f5dd5389b9f16710 100644 (file)
  * value cannot be read back within the specified time.
  */
 #define HDA_DSP_STREAM_RUN_TIMEOUT             300
-#define HDA_DSP_CL_TRIGGER_TIMEOUT             300
 
 #define HDA_DSP_SPIB_ENABLE                    1
 #define HDA_DSP_SPIB_DISABLE                   0
index 67fc95ace42b501406230eaf65ea2d4e1088bf2c..1f2e0be812bd9d6d3673ccabd3efefcd24be2c67 100644 (file)
@@ -466,9 +466,6 @@ int snd_sof_load_firmware_raw(struct snd_sof_dev *sdev)
        const char *fw_filename;
        int ret;
 
-       /* set code loading condition to true */
-       sdev->code_loading = 1;
-
        /* Don't request firmware again if firmware is already requested */
        if (plat_data->fw)
                return 0;
index 38dce54755a6c986d7dbf225eb512ac3be16ed50..a4b297c842dfceb0d91eb6a1013d636e71ba7528 100644 (file)
@@ -421,10 +421,6 @@ struct snd_sof_dev {
        int ipc_timeout;
        int boot_timeout;
 
-       /* Wait queue for code loading */
-       wait_queue_head_t waitq;
-       int code_loading;
-
 #if IS_ENABLED(CONFIG_SND_SOC_SOF_DEBUG_PROBES)
        unsigned int extractor_stream_tag;
 #endif