Lines Matching +full:ipc +full:- +full:3
1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
14 #include "sof-priv.h"
19 struct snd_sof_pdata *plat_data = sdev->pdata; in snd_sof_load_firmware_raw()
25 if (plat_data->fw) in snd_sof_load_firmware_raw()
29 plat_data->fw_filename_prefix, in snd_sof_load_firmware_raw()
30 plat_data->fw_filename); in snd_sof_load_firmware_raw()
32 return -ENOMEM; in snd_sof_load_firmware_raw()
34 ret = request_firmware(&plat_data->fw, fw_filename, sdev->dev); in snd_sof_load_firmware_raw()
37 dev_err(sdev->dev, in snd_sof_load_firmware_raw()
39 dev_err(sdev->dev, in snd_sof_load_firmware_raw()
40 " download it from https://github.com/thesofproject/sof-bin/\n"); in snd_sof_load_firmware_raw()
43 dev_dbg(sdev->dev, "request_firmware %s successful\n", in snd_sof_load_firmware_raw()
48 ext_man_size = sdev->ipc->ops->fw_loader->parse_ext_manifest(sdev); in snd_sof_load_firmware_raw()
51 plat_data->fw_offset = ext_man_size; in snd_sof_load_firmware_raw()
54 dev_dbg(sdev->dev, "firmware doesn't contain extended manifest\n"); in snd_sof_load_firmware_raw()
57 dev_err(sdev->dev, "error: firmware %s contains unsupported or invalid extended manifest: %d\n", in snd_sof_load_firmware_raw()
70 struct snd_sof_pdata *plat_data = sdev->pdata; in snd_sof_load_firmware_memcpy()
78 ret = sdev->ipc->ops->fw_loader->validate(sdev); in snd_sof_load_firmware_memcpy()
80 dev_err(sdev->dev, "error: invalid FW header\n"); in snd_sof_load_firmware_memcpy()
87 dev_err(sdev->dev, "error: failed to reset DSP\n"); in snd_sof_load_firmware_memcpy()
92 if (sdev->ipc->ops->fw_loader->load_fw_to_dsp) { in snd_sof_load_firmware_memcpy()
93 ret = sdev->ipc->ops->fw_loader->load_fw_to_dsp(sdev); in snd_sof_load_firmware_memcpy()
95 dev_err(sdev->dev, "Firmware loading failed\n"); in snd_sof_load_firmware_memcpy()
103 release_firmware(plat_data->fw); in snd_sof_load_firmware_memcpy()
104 plat_data->fw = NULL; in snd_sof_load_firmware_memcpy()
114 init_waitqueue_head(&sdev->boot_wait); in snd_sof_run_firmware()
116 /* (re-)enable dsp dump */ in snd_sof_run_firmware()
117 sdev->dbg_dump_printed = false; in snd_sof_run_firmware()
118 sdev->ipc_dump_printed = false; in snd_sof_run_firmware()
120 /* create read-only fw_version debugfs to store boot version info */ in snd_sof_run_firmware()
121 if (sdev->first_boot) { in snd_sof_run_firmware()
122 ret = snd_sof_debugfs_buf_item(sdev, &sdev->fw_version, in snd_sof_run_firmware()
123 sizeof(sdev->fw_version), in snd_sof_run_firmware()
127 dev_err(sdev->dev, "error: snd_sof_debugfs_buf_item failed\n"); in snd_sof_run_firmware()
135 dev_err(sdev->dev, "error: failed pre fw run op\n"); in snd_sof_run_firmware()
139 dev_dbg(sdev->dev, "booting DSP firmware\n"); in snd_sof_run_firmware()
150 * now wait for the DSP to boot. There are 3 possible outcomes: in snd_sof_run_firmware()
153 * 3. FW boots but fw_ready op fails. in snd_sof_run_firmware()
155 ret = wait_event_timeout(sdev->boot_wait, in snd_sof_run_firmware()
156 sdev->fw_state > SOF_FW_BOOT_IN_PROGRESS, in snd_sof_run_firmware()
157 msecs_to_jiffies(sdev->boot_timeout)); in snd_sof_run_firmware()
162 return -EIO; in snd_sof_run_firmware()
165 if (sdev->fw_state == SOF_FW_BOOT_READY_FAILED) in snd_sof_run_firmware()
166 return -EIO; /* FW boots but fw_ready op failed */ in snd_sof_run_firmware()
171 dev_err(sdev->dev, "error: failed post fw run op\n"); in snd_sof_run_firmware()
175 dev_dbg(sdev->dev, "firmware boot complete\n"); in snd_sof_run_firmware()
178 if (sdev->first_boot && sdev->ipc->ops->fw_loader->query_fw_configuration) in snd_sof_run_firmware()
179 return sdev->ipc->ops->fw_loader->query_fw_configuration(sdev); in snd_sof_run_firmware()
188 release_firmware(sdev->pdata->fw); in snd_sof_fw_unload()
189 sdev->pdata->fw = NULL; in snd_sof_fw_unload()