ASoC: SOF: Introduce macro to set the firmware state
Add sof_set_fw_state() macro to wrap the sdev->fw_state management to allow actions to be taken when certain state is set or when state is changing. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Link: https://lore.kernel.org/r/20211006110645.26679-15-peter.ujfalusi@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Родитель
705f4539c4
Коммит
58a5c9a4aa
|
@ -147,7 +147,7 @@ static int sof_probe_continue(struct snd_sof_dev *sdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
sdev->fw_state = SOF_FW_BOOT_PREPARE;
|
||||
sof_set_fw_state(sdev, SOF_FW_BOOT_PREPARE);
|
||||
|
||||
/* check machine info */
|
||||
ret = sof_machine_check(sdev);
|
||||
|
@ -189,7 +189,7 @@ static int sof_probe_continue(struct snd_sof_dev *sdev)
|
|||
goto fw_load_err;
|
||||
}
|
||||
|
||||
sdev->fw_state = SOF_FW_BOOT_IN_PROGRESS;
|
||||
sof_set_fw_state(sdev, SOF_FW_BOOT_IN_PROGRESS);
|
||||
|
||||
/*
|
||||
* Boot the firmware. The FW boot status will be modified
|
||||
|
@ -265,7 +265,7 @@ dsp_err:
|
|||
snd_sof_remove(sdev);
|
||||
|
||||
/* all resources freed, update state to match */
|
||||
sdev->fw_state = SOF_FW_BOOT_NOT_STARTED;
|
||||
sof_set_fw_state(sdev, SOF_FW_BOOT_NOT_STARTED);
|
||||
sdev->first_boot = true;
|
||||
|
||||
return ret;
|
||||
|
@ -300,7 +300,7 @@ int snd_sof_device_probe(struct device *dev, struct snd_sof_pdata *plat_data)
|
|||
|
||||
sdev->pdata = plat_data;
|
||||
sdev->first_boot = true;
|
||||
sdev->fw_state = SOF_FW_BOOT_NOT_STARTED;
|
||||
sof_set_fw_state(sdev, SOF_FW_BOOT_NOT_STARTED);
|
||||
#if IS_ENABLED(CONFIG_SND_SOC_SOF_DEBUG_PROBES)
|
||||
sdev->extractor_stream_tag = SOF_PROBE_INVALID_NODE_ID;
|
||||
#endif
|
||||
|
|
|
@ -458,9 +458,9 @@ void snd_sof_ipc_msgs_rx(struct snd_sof_dev *sdev)
|
|||
if (sdev->fw_state == SOF_FW_BOOT_IN_PROGRESS) {
|
||||
err = sof_ops(sdev)->fw_ready(sdev, cmd);
|
||||
if (err < 0)
|
||||
sdev->fw_state = SOF_FW_BOOT_READY_FAILED;
|
||||
sof_set_fw_state(sdev, SOF_FW_BOOT_READY_FAILED);
|
||||
else
|
||||
sdev->fw_state = SOF_FW_BOOT_COMPLETE;
|
||||
sof_set_fw_state(sdev, SOF_FW_BOOT_COMPLETE);
|
||||
|
||||
/* wake up firmware loader */
|
||||
wake_up(&sdev->boot_wait);
|
||||
|
|
|
@ -838,7 +838,7 @@ int snd_sof_run_firmware(struct snd_sof_dev *sdev)
|
|||
dev_err(sdev->dev, "error: firmware boot failure\n");
|
||||
snd_sof_dsp_dbg_dump(sdev, SOF_DBG_DUMP_REGS | SOF_DBG_DUMP_MBOX |
|
||||
SOF_DBG_DUMP_TEXT | SOF_DBG_DUMP_PCI);
|
||||
sdev->fw_state = SOF_FW_BOOT_FAILED;
|
||||
sof_set_fw_state(sdev, SOF_FW_BOOT_FAILED);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
|
|
|
@ -122,7 +122,7 @@ static int sof_resume(struct device *dev, bool runtime_resume)
|
|||
old_state == SOF_DSP_PM_D0)
|
||||
return 0;
|
||||
|
||||
sdev->fw_state = SOF_FW_BOOT_PREPARE;
|
||||
sof_set_fw_state(sdev, SOF_FW_BOOT_PREPARE);
|
||||
|
||||
/* load the firmware */
|
||||
ret = snd_sof_load_firmware(sdev);
|
||||
|
@ -133,7 +133,7 @@ static int sof_resume(struct device *dev, bool runtime_resume)
|
|||
return ret;
|
||||
}
|
||||
|
||||
sdev->fw_state = SOF_FW_BOOT_IN_PROGRESS;
|
||||
sof_set_fw_state(sdev, SOF_FW_BOOT_IN_PROGRESS);
|
||||
|
||||
/*
|
||||
* Boot the firmware. The FW boot status will be modified
|
||||
|
@ -257,7 +257,7 @@ suspend:
|
|||
return ret;
|
||||
|
||||
/* reset FW state */
|
||||
sdev->fw_state = SOF_FW_BOOT_NOT_STARTED;
|
||||
sof_set_fw_state(sdev, SOF_FW_BOOT_NOT_STARTED);
|
||||
sdev->enabled_cores_mask = 0;
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -561,6 +561,19 @@ static inline void sof_oops(struct snd_sof_dev *sdev, void *oops)
|
|||
|
||||
extern const struct dsp_arch_ops sof_xtensa_arch_ops;
|
||||
|
||||
/*
|
||||
* Firmware state tracking
|
||||
*/
|
||||
static inline void sof_set_fw_state(struct snd_sof_dev *sdev,
|
||||
enum snd_sof_fw_state new_state)
|
||||
{
|
||||
if (sdev->fw_state == new_state)
|
||||
return;
|
||||
|
||||
dev_dbg(sdev->dev, "fw_state change: %d -> %d\n", sdev->fw_state, new_state);
|
||||
sdev->fw_state = new_state;
|
||||
}
|
||||
|
||||
/*
|
||||
* Utilities
|
||||
*/
|
||||
|
|
Загрузка…
Ссылка в новой задаче