Lines Matching defs:sdev
80 static int sof_ipc4_check_reply_status(struct snd_sof_dev *sdev, u32 status)
91 dev_err(sdev->dev, "FW reported error: %u - %s\n",
98 dev_err(sdev->dev, "FW reported error: %u - Unknown\n", status);
250 static void sof_ipc4_dump_payload(struct snd_sof_dev *sdev,
257 static int sof_ipc4_get_reply(struct snd_sof_dev *sdev)
259 struct snd_sof_ipc_msg *msg = sdev->msg;
266 sof_ipc4_log_header(sdev->dev, "ipc tx reply", ipc4_reply, false);
268 ret = sof_ipc4_check_reply_status(sdev, ipc4_reply->primary);
278 snd_sof_dsp_mailbox_read(sdev, sdev->dsp_box.offset, ipc4_reply->data_ptr,
289 struct snd_sof_dev *sdev = ipc->sdev;
294 msecs_to_jiffies(sdev->ipc_timeout));
296 dev_err(sdev->dev, "ipc timed out for %#x|%#x\n",
298 snd_sof_handle_fw_exception(ipc->sdev, "IPC timeout");
303 dev_err(sdev->dev, "ipc error for msg %#x|%#x\n",
322 sof_ipc4_log_header(sdev->dev, "ipc tx done ", ipc4_msg, true);
326 if (sdev->ipc_dump_printed) {
327 sdev->dbg_dump_printed = false;
328 sdev->ipc_dump_printed = false;
339 struct snd_sof_dev *sdev = ipc->sdev;
345 sof_ipc4_log_header(sdev->dev, "ipc tx ", msg_data, true);
347 ret = sof_ipc_send_msg(sdev, msg_data, msg_bytes, reply_bytes);
349 dev_err_ratelimited(sdev->dev,
359 static int sof_ipc4_tx_msg(struct snd_sof_dev *sdev, void *msg_data, size_t msg_bytes,
362 struct snd_sof_ipc *ipc = sdev->ipc;
374 ret = snd_sof_dsp_set_power_state(sdev, &target_state);
394 sof_ipc4_dump_payload(sdev, msg->data_ptr, msg->data_size);
402 static int sof_ipc4_set_get_data(struct snd_sof_dev *sdev, void *data,
408 size_t payload_limit = sdev->ipc->max_payload_size;
439 ret = snd_sof_dsp_set_power_state(sdev, &target_state);
444 mutex_lock(&sdev->ipc->tx_mutex);
480 ret = ipc4_tx_msg_unlocked(sdev->ipc, &tx, tx_size, &rx, rx_size);
482 dev_err(sdev->dev,
493 dev_err(sdev->dev,
517 sof_ipc4_dump_payload(sdev, ipc4_msg->data_ptr, ipc4_msg->data_size);
520 mutex_unlock(&sdev->ipc->tx_mutex);
525 static int sof_ipc4_init_msg_memory(struct snd_sof_dev *sdev)
528 struct snd_sof_ipc_msg *msg = &sdev->ipc->msg;
531 sdev->ipc->max_payload_size = SOF_IPC4_MSG_MAX_SIZE;
534 msg->reply_data = devm_kzalloc(sdev->dev, sdev->ipc->max_payload_size +
545 static int ipc4_fw_ready(struct snd_sof_dev *sdev, struct sof_ipc4_msg *ipc4_msg)
550 if (!sdev->first_boot)
554 inbox_offset = snd_sof_dsp_get_mailbox_offset(sdev);
556 dev_err(sdev->dev, "%s: No mailbox offset\n", __func__);
560 outbox_offset = snd_sof_dsp_get_window_offset(sdev, SOF_IPC4_OUTBOX_WINDOW_IDX);
563 sdev->fw_info_box.offset = snd_sof_dsp_get_window_offset(sdev, SOF_IPC4_INBOX_WINDOW_IDX);
564 sdev->fw_info_box.size = sizeof(struct sof_ipc4_fw_registers);
565 sdev->dsp_box.offset = inbox_offset;
566 sdev->dsp_box.size = inbox_size;
567 sdev->host_box.offset = outbox_offset;
568 sdev->host_box.size = outbox_size;
570 sdev->debug_box.offset = snd_sof_dsp_get_window_offset(sdev,
573 dev_dbg(sdev->dev, "mailbox upstream 0x%x - size 0x%x\n",
575 dev_dbg(sdev->dev, "mailbox downstream 0x%x - size 0x%x\n",
577 dev_dbg(sdev->dev, "debug box 0x%x\n", sdev->debug_box.offset);
579 return sof_ipc4_init_msg_memory(sdev);
582 static void sof_ipc4_rx_msg(struct snd_sof_dev *sdev)
584 struct sof_ipc4_msg *ipc4_msg = sdev->ipc->msg.rx_data;
594 sof_ipc4_log_header(sdev->dev, "ipc rx ", ipc4_msg, false);
599 if (sdev->fw_state == SOF_FW_BOOT_IN_PROGRESS) {
600 err = ipc4_fw_ready(sdev, ipc4_msg);
602 sof_set_fw_state(sdev, SOF_FW_BOOT_READY_FAILED);
604 sof_set_fw_state(sdev, SOF_FW_BOOT_READY_OK);
607 wake_up(&sdev->boot_wait);
615 sof_ipc4_mtrace_update_pos(sdev, SOF_IPC4_LOG_CORE_GET(ipc4_msg->primary));
618 snd_sof_dsp_panic(sdev, 0, true);
621 dev_dbg(sdev->dev, "Unhandled DSP message: %#x|%#x\n",
632 snd_sof_ipc_msg_data(sdev, NULL, ipc4_msg->data_ptr, ipc4_msg->data_size);
635 sof_ipc4_log_header(sdev->dev, "ipc rx done ", ipc4_msg, true);
644 static int sof_ipc4_set_core_state(struct snd_sof_dev *sdev, int core_idx, bool on)
662 return sof_ipc4_tx_msg(sdev, &msg, msg.data_size, NULL, 0, false);
674 static int sof_ipc4_ctx_save(struct snd_sof_dev *sdev)
676 return sof_ipc4_set_core_state(sdev, SOF_DSP_PRIMARY_CORE, false);
679 static int sof_ipc4_set_pm_gate(struct snd_sof_dev *sdev, u32 flags)
688 return sof_ipc4_tx_msg(sdev, &msg, 0, NULL, 0, true);
697 static int sof_ipc4_init(struct snd_sof_dev *sdev)
699 struct sof_ipc4_fw_data *ipc4_data = sdev->private;
708 static void sof_ipc4_exit(struct snd_sof_dev *sdev)
710 struct sof_ipc4_fw_data *ipc4_data = sdev->private;
728 static int sof_ipc4_post_boot(struct snd_sof_dev *sdev)
730 if (sdev->first_boot)
731 return sof_ipc4_query_fw_configuration(sdev);
733 return sof_ipc4_reload_fw_libraries(sdev);