Commit b2e9eb3a authored by Peter Ujfalusi's avatar Peter Ujfalusi Committed by Mark Brown

ASoC: SOF: Introduce new firmware state: SOF_FW_BOOT_READY_OK

The SOF_FW_BOOT_READY_OK fw_state indicates that the boot ready message has
been received and there were no errors found.

The SOF_FW_BOOT_COMPLETE state will be reached after the
snd_sof_dsp_post_fw_run() completes without error.
Signed-off-by: default avatarPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: default avatarRanjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: default avatarKai Vehmanen <kai.vehmanen@linux.intel.com>
Reviewed-by: default avatarPaul Olaru <paul.olaru@oss.nxp.com>
Link: https://lore.kernel.org/r/20211223113628.18582-9-peter.ujfalusi@linux.intel.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
parent 4e1f8648
...@@ -938,6 +938,7 @@ static const struct soc_fw_state_info { ...@@ -938,6 +938,7 @@ static const struct soc_fw_state_info {
{SOF_FW_BOOT_IN_PROGRESS, "SOF_FW_BOOT_IN_PROGRESS"}, {SOF_FW_BOOT_IN_PROGRESS, "SOF_FW_BOOT_IN_PROGRESS"},
{SOF_FW_BOOT_FAILED, "SOF_FW_BOOT_FAILED"}, {SOF_FW_BOOT_FAILED, "SOF_FW_BOOT_FAILED"},
{SOF_FW_BOOT_READY_FAILED, "SOF_FW_BOOT_READY_FAILED"}, {SOF_FW_BOOT_READY_FAILED, "SOF_FW_BOOT_READY_FAILED"},
{SOF_FW_BOOT_READY_OK, "SOF_FW_BOOT_READY_OK"},
{SOF_FW_BOOT_COMPLETE, "SOF_FW_BOOT_COMPLETE"}, {SOF_FW_BOOT_COMPLETE, "SOF_FW_BOOT_COMPLETE"},
{SOF_FW_CRASHED, "SOF_FW_CRASHED"}, {SOF_FW_CRASHED, "SOF_FW_CRASHED"},
}; };
......
...@@ -536,7 +536,7 @@ void snd_sof_ipc_msgs_rx(struct snd_sof_dev *sdev) ...@@ -536,7 +536,7 @@ void snd_sof_ipc_msgs_rx(struct snd_sof_dev *sdev)
if (err < 0) if (err < 0)
sof_set_fw_state(sdev, SOF_FW_BOOT_READY_FAILED); sof_set_fw_state(sdev, SOF_FW_BOOT_READY_FAILED);
else else
sof_set_fw_state(sdev, SOF_FW_BOOT_COMPLETE); sof_set_fw_state(sdev, SOF_FW_BOOT_READY_OK);
/* wake up firmware loader */ /* wake up firmware loader */
wake_up(&sdev->boot_wait); wake_up(&sdev->boot_wait);
......
...@@ -842,9 +842,7 @@ int snd_sof_run_firmware(struct snd_sof_dev *sdev) ...@@ -842,9 +842,7 @@ int snd_sof_run_firmware(struct snd_sof_dev *sdev)
return -EIO; return -EIO;
} }
if (sdev->fw_state == SOF_FW_BOOT_COMPLETE) if (sdev->fw_state == SOF_FW_BOOT_READY_FAILED)
dev_dbg(sdev->dev, "firmware boot complete\n");
else
return -EIO; /* FW boots but fw_ready op failed */ return -EIO; /* FW boots but fw_ready op failed */
/* perform post fw run operations */ /* perform post fw run operations */
...@@ -854,6 +852,9 @@ int snd_sof_run_firmware(struct snd_sof_dev *sdev) ...@@ -854,6 +852,9 @@ int snd_sof_run_firmware(struct snd_sof_dev *sdev)
return ret; return ret;
} }
dev_dbg(sdev->dev, "firmware boot complete\n");
sof_set_fw_state(sdev, SOF_FW_BOOT_COMPLETE);
return 0; return 0;
} }
EXPORT_SYMBOL(snd_sof_run_firmware); EXPORT_SYMBOL(snd_sof_run_firmware);
......
...@@ -381,6 +381,7 @@ enum snd_sof_fw_state { ...@@ -381,6 +381,7 @@ enum snd_sof_fw_state {
SOF_FW_BOOT_IN_PROGRESS, SOF_FW_BOOT_IN_PROGRESS,
SOF_FW_BOOT_FAILED, SOF_FW_BOOT_FAILED,
SOF_FW_BOOT_READY_FAILED, /* firmware booted but fw_ready op failed */ SOF_FW_BOOT_READY_FAILED, /* firmware booted but fw_ready op failed */
SOF_FW_BOOT_READY_OK,
SOF_FW_BOOT_COMPLETE, SOF_FW_BOOT_COMPLETE,
SOF_FW_CRASHED, SOF_FW_CRASHED,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment