Lines Matching refs:ipc

267 static void skl_ipc_tx_msg(struct sst_generic_ipc *ipc, struct ipc_message *msg)  in skl_ipc_tx_msg()  argument
272 sst_dsp_outbox_write(ipc->dsp, msg->tx_data, msg->tx_size); in skl_ipc_tx_msg()
273 sst_dsp_shim_write_unlocked(ipc->dsp, SKL_ADSP_REG_HIPCIE, in skl_ipc_tx_msg()
275 sst_dsp_shim_write_unlocked(ipc->dsp, SKL_ADSP_REG_HIPCI, in skl_ipc_tx_msg()
279 static struct ipc_message *skl_ipc_reply_get_msg(struct sst_generic_ipc *ipc, in skl_ipc_reply_get_msg() argument
285 if (list_empty(&ipc->rx_list)) { in skl_ipc_reply_get_msg()
286 dev_err(ipc->dev, "ipc: rx list is empty but received 0x%x\n", in skl_ipc_reply_get_msg()
291 msg = list_first_entry(&ipc->rx_list, struct ipc_message, list); in skl_ipc_reply_get_msg()
298 static int skl_ipc_process_notification(struct sst_generic_ipc *ipc, in skl_ipc_process_notification() argument
301 struct skl_sst *skl = container_of(ipc, struct skl_sst, ipc); in skl_ipc_process_notification()
307 dev_err(ipc->dev, "FW Underrun %x\n", header.primary); in skl_ipc_process_notification()
311 dev_err(ipc->dev, "MCPS Budget Violation: %x\n", in skl_ipc_process_notification()
321 dev_err(ipc->dev, "ipc: Unhandled error msg=%x", in skl_ipc_process_notification()
330 static void skl_ipc_process_reply(struct sst_generic_ipc *ipc, in skl_ipc_process_reply() argument
337 msg = skl_ipc_reply_get_msg(ipc, *ipc_header); in skl_ipc_process_reply()
339 dev_dbg(ipc->dev, "ipc: rx list is empty\n"); in skl_ipc_process_reply()
346 dev_info(ipc->dev, "ipc FW reply %x: success\n", header.primary); in skl_ipc_process_reply()
350 dev_err(ipc->dev, "ipc fw reply: %x: no memory\n", header.primary); in skl_ipc_process_reply()
355 dev_err(ipc->dev, "ipc fw reply: %x: Busy\n", header.primary); in skl_ipc_process_reply()
360 dev_err(ipc->dev, "Unknown ipc reply: 0x%x", reply); in skl_ipc_process_reply()
366 dev_err(ipc->dev, "ipc FW reply: reply=%d", reply); in skl_ipc_process_reply()
367 dev_err(ipc->dev, "FW Error Code: %u\n", in skl_ipc_process_reply()
368 ipc->dsp->fw_ops.get_fw_errcode(ipc->dsp)); in skl_ipc_process_reply()
372 sst_ipc_tx_msg_reply_complete(ipc, msg); in skl_ipc_process_reply()
379 struct sst_generic_ipc *ipc = &skl->ipc; in skl_dsp_irq_thread_handler() local
422 skl_ipc_process_reply(ipc, header); in skl_dsp_irq_thread_handler()
425 skl_ipc_process_notification(ipc, header); in skl_dsp_irq_thread_handler()
439 queue_kthread_work(&ipc->kworker, &ipc->kwork); in skl_dsp_irq_thread_handler()
487 struct sst_generic_ipc *ipc; in skl_ipc_init() local
490 ipc = &skl->ipc; in skl_ipc_init()
491 ipc->dsp = skl->dsp; in skl_ipc_init()
492 ipc->dev = dev; in skl_ipc_init()
494 ipc->tx_data_max_size = SKL_ADSP_W1_SZ; in skl_ipc_init()
495 ipc->rx_data_max_size = SKL_ADSP_W0_UP_SZ; in skl_ipc_init()
497 err = sst_ipc_init(ipc); in skl_ipc_init()
501 ipc->ops.tx_msg = skl_ipc_tx_msg; in skl_ipc_init()
502 ipc->ops.tx_data_copy = skl_ipc_tx_data_copy; in skl_ipc_init()
503 ipc->ops.is_dsp_busy = skl_ipc_is_dsp_busy; in skl_ipc_init()
508 void skl_ipc_free(struct sst_generic_ipc *ipc) in skl_ipc_free() argument
511 sst_dsp_shim_update_bits(ipc->dsp, SKL_ADSP_REG_HIPCCTL, in skl_ipc_free()
515 sst_dsp_shim_update_bits(ipc->dsp, SKL_ADSP_REG_HIPCCTL, in skl_ipc_free()
518 sst_ipc_fini(ipc); in skl_ipc_free()
521 int skl_ipc_create_pipeline(struct sst_generic_ipc *ipc, in skl_ipc_create_pipeline() argument
535 dev_dbg(ipc->dev, "In %s header=%d\n", __func__, header.primary); in skl_ipc_create_pipeline()
536 ret = sst_ipc_tx_message_wait(ipc, *ipc_header, NULL, 0, NULL, 0); in skl_ipc_create_pipeline()
538 dev_err(ipc->dev, "ipc: create pipeline fail, err: %d\n", ret); in skl_ipc_create_pipeline()
546 int skl_ipc_delete_pipeline(struct sst_generic_ipc *ipc, u8 instance_id) in skl_ipc_delete_pipeline() argument
557 dev_dbg(ipc->dev, "In %s header=%d\n", __func__, header.primary); in skl_ipc_delete_pipeline()
558 ret = sst_ipc_tx_message_wait(ipc, *ipc_header, NULL, 0, NULL, 0); in skl_ipc_delete_pipeline()
560 dev_err(ipc->dev, "ipc: delete pipeline failed, err %d\n", ret); in skl_ipc_delete_pipeline()
568 int skl_ipc_set_pipeline_state(struct sst_generic_ipc *ipc, in skl_ipc_set_pipeline_state() argument
581 dev_dbg(ipc->dev, "In %s header=%d\n", __func__, header.primary); in skl_ipc_set_pipeline_state()
582 ret = sst_ipc_tx_message_wait(ipc, *ipc_header, NULL, 0, NULL, 0); in skl_ipc_set_pipeline_state()
584 dev_err(ipc->dev, "ipc: set pipeline state failed, err: %d\n", ret); in skl_ipc_set_pipeline_state()
592 skl_ipc_save_pipeline(struct sst_generic_ipc *ipc, u8 instance_id, int dma_id) in skl_ipc_save_pipeline() argument
604 dev_dbg(ipc->dev, "In %s header=%d\n", __func__, header.primary); in skl_ipc_save_pipeline()
605 ret = sst_ipc_tx_message_wait(ipc, *ipc_header, NULL, 0, NULL, 0); in skl_ipc_save_pipeline()
607 dev_err(ipc->dev, "ipc: save pipeline failed, err: %d\n", ret); in skl_ipc_save_pipeline()
615 int skl_ipc_restore_pipeline(struct sst_generic_ipc *ipc, u8 instance_id) in skl_ipc_restore_pipeline() argument
626 dev_dbg(ipc->dev, "In %s header=%d\n", __func__, header.primary); in skl_ipc_restore_pipeline()
627 ret = sst_ipc_tx_message_wait(ipc, *ipc_header, NULL, 0, NULL, 0); in skl_ipc_restore_pipeline()
629 dev_err(ipc->dev, "ipc: restore pipeline failed, err: %d\n", ret); in skl_ipc_restore_pipeline()
637 int skl_ipc_set_dx(struct sst_generic_ipc *ipc, u8 instance_id, in skl_ipc_set_dx() argument
650 dev_dbg(ipc->dev, "In %s primary =%x ext=%x\n", __func__, in skl_ipc_set_dx()
652 ret = sst_ipc_tx_message_wait(ipc, *ipc_header, in skl_ipc_set_dx()
655 dev_err(ipc->dev, "ipc: set dx failed, err %d\n", ret); in skl_ipc_set_dx()
663 int skl_ipc_init_instance(struct sst_generic_ipc *ipc, in skl_ipc_init_instance() argument
686 dev_dbg(ipc->dev, "In %s primary =%x ext=%x\n", __func__, in skl_ipc_init_instance()
688 ret = sst_ipc_tx_message_wait(ipc, *ipc_header, param_data, in skl_ipc_init_instance()
692 dev_err(ipc->dev, "ipc: init instance failed\n"); in skl_ipc_init_instance()
700 int skl_ipc_bind_unbind(struct sst_generic_ipc *ipc, in skl_ipc_bind_unbind() argument
719 dev_dbg(ipc->dev, "In %s hdr=%x ext=%x\n", __func__, header.primary, in skl_ipc_bind_unbind()
721 ret = sst_ipc_tx_message_wait(ipc, *ipc_header, NULL, 0, NULL, 0); in skl_ipc_bind_unbind()
723 dev_err(ipc->dev, "ipc: bind/unbind faileden"); in skl_ipc_bind_unbind()
731 int skl_ipc_set_large_config(struct sst_generic_ipc *ipc, in skl_ipc_set_large_config() argument
758 dev_dbg(ipc->dev, "In %s primary=%#x ext=%#x\n", __func__, in skl_ipc_set_large_config()
760 dev_dbg(ipc->dev, "transmitting offset: %#x, size: %#x\n", in skl_ipc_set_large_config()
762 ret = sst_ipc_tx_message_wait(ipc, *ipc_header, in skl_ipc_set_large_config()
766 dev_err(ipc->dev, in skl_ipc_set_large_config()