Lines Matching refs:vdev
33 static void ivpu_ipc_msg_dump(struct ivpu_device *vdev, char *c, in ivpu_ipc_msg_dump() argument
36 ivpu_dbg(vdev, IPC, in ivpu_ipc_msg_dump()
42 static void ivpu_jsm_msg_dump(struct ivpu_device *vdev, char *c, in ivpu_jsm_msg_dump() argument
47 ivpu_dbg(vdev, JSM, in ivpu_jsm_msg_dump()
54 ivpu_ipc_rx_mark_free(struct ivpu_device *vdev, struct ivpu_ipc_hdr *ipc_hdr, in ivpu_ipc_rx_mark_free() argument
63 static void ivpu_ipc_mem_fini(struct ivpu_device *vdev) in ivpu_ipc_mem_fini() argument
65 struct ivpu_ipc_info *ipc = vdev->ipc; in ivpu_ipc_mem_fini()
72 ivpu_ipc_tx_prepare(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons, in ivpu_ipc_tx_prepare() argument
75 struct ivpu_ipc_info *ipc = vdev->ipc; in ivpu_ipc_tx_prepare()
82 ivpu_err(vdev, "Failed to reserve IPC buffer, size %ld\n", in ivpu_ipc_tx_prepare()
88 if (drm_WARN_ON(&vdev->drm, !tx_buf)) { in ivpu_ipc_tx_prepare()
96 ivpu_warn(vdev, "IPC message vpu:0x%x not released by firmware\n", in ivpu_ipc_tx_prepare()
100 ivpu_warn(vdev, "JSM message vpu:0x%x not released by firmware\n", in ivpu_ipc_tx_prepare()
122 ivpu_jsm_msg_dump(vdev, "TX", &tx_buf->jsm, jsm_vpu_addr); in ivpu_ipc_tx_prepare()
123 ivpu_ipc_msg_dump(vdev, "TX", &tx_buf->ipc, tx_buf_vpu_addr); in ivpu_ipc_tx_prepare()
128 static void ivpu_ipc_tx_release(struct ivpu_device *vdev, u32 vpu_addr) in ivpu_ipc_tx_release() argument
130 struct ivpu_ipc_info *ipc = vdev->ipc; in ivpu_ipc_tx_release()
136 static void ivpu_ipc_tx(struct ivpu_device *vdev, u32 vpu_addr) in ivpu_ipc_tx() argument
138 ivpu_hw_reg_ipc_tx_set(vdev, vpu_addr); in ivpu_ipc_tx()
142 ivpu_ipc_consumer_add(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons, u32 channel) in ivpu_ipc_consumer_add() argument
144 struct ivpu_ipc_info *ipc = vdev->ipc; in ivpu_ipc_consumer_add()
159 void ivpu_ipc_consumer_del(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons) in ivpu_ipc_consumer_del() argument
161 struct ivpu_ipc_info *ipc = vdev->ipc; in ivpu_ipc_consumer_del()
171 ivpu_ipc_rx_mark_free(vdev, rx_msg->ipc_hdr, rx_msg->jsm_msg); in ivpu_ipc_consumer_del()
177 ivpu_ipc_tx_release(vdev, cons->tx_vpu_addr); in ivpu_ipc_consumer_del()
181 ivpu_ipc_send(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons, struct vpu_jsm_msg *req) in ivpu_ipc_send() argument
183 struct ivpu_ipc_info *ipc = vdev->ipc; in ivpu_ipc_send()
193 ret = ivpu_ipc_tx_prepare(vdev, cons, req); in ivpu_ipc_send()
197 ivpu_ipc_tx(vdev, cons->tx_vpu_addr); in ivpu_ipc_send()
204 int ivpu_ipc_receive(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons, in ivpu_ipc_receive() argument
208 struct ivpu_ipc_info *ipc = vdev->ipc; in ivpu_ipc_receive()
238 ivpu_dbg(vdev, IPC, "IPC resp result error: %d\n", rx_msg->jsm_msg->result); in ivpu_ipc_receive()
246 ivpu_ipc_rx_mark_free(vdev, rx_msg->ipc_hdr, rx_msg->jsm_msg); in ivpu_ipc_receive()
254 ivpu_ipc_send_receive_internal(struct ivpu_device *vdev, struct vpu_jsm_msg *req, in ivpu_ipc_send_receive_internal() argument
262 ivpu_ipc_consumer_add(vdev, &cons, channel); in ivpu_ipc_send_receive_internal()
264 ret = ivpu_ipc_send(vdev, &cons, req); in ivpu_ipc_send_receive_internal()
266 ivpu_warn(vdev, "IPC send failed: %d\n", ret); in ivpu_ipc_send_receive_internal()
270 ret = ivpu_ipc_receive(vdev, &cons, NULL, resp, timeout_ms); in ivpu_ipc_send_receive_internal()
272 ivpu_warn(vdev, "IPC receive failed: type 0x%x, ret %d\n", req->type, ret); in ivpu_ipc_send_receive_internal()
277 ivpu_warn(vdev, "Invalid JSM response type: 0x%x\n", resp->type); in ivpu_ipc_send_receive_internal()
282 ivpu_ipc_consumer_del(vdev, &cons); in ivpu_ipc_send_receive_internal()
286 int ivpu_ipc_send_receive(struct ivpu_device *vdev, struct vpu_jsm_msg *req, in ivpu_ipc_send_receive() argument
295 ret = ivpu_rpm_get(vdev); in ivpu_ipc_send_receive()
299 ret = ivpu_ipc_send_receive_internal(vdev, req, expected_resp_type, resp, in ivpu_ipc_send_receive()
304 hb_ret = ivpu_ipc_send_receive_internal(vdev, &hb_req, VPU_JSM_MSG_QUERY_ENGINE_HB_DONE, in ivpu_ipc_send_receive()
306 vdev->timeout.jsm); in ivpu_ipc_send_receive()
308 ivpu_hw_diagnose_failure(vdev); in ivpu_ipc_send_receive()
309 ivpu_pm_schedule_recovery(vdev); in ivpu_ipc_send_receive()
313 ivpu_rpm_put(vdev); in ivpu_ipc_send_receive()
318 ivpu_ipc_match_consumer(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons, in ivpu_ipc_match_consumer() argument
331 ivpu_ipc_dispatch(struct ivpu_device *vdev, struct ivpu_ipc_consumer *cons, in ivpu_ipc_dispatch() argument
334 struct ivpu_ipc_info *ipc = vdev->ipc; in ivpu_ipc_dispatch()
342 ivpu_ipc_rx_mark_free(vdev, ipc_hdr, jsm_msg); in ivpu_ipc_dispatch()
358 int ivpu_ipc_irq_handler(struct ivpu_device *vdev) in ivpu_ipc_irq_handler() argument
360 struct ivpu_ipc_info *ipc = vdev->ipc; in ivpu_ipc_irq_handler()
372 while (ivpu_hw_reg_ipc_rx_count_get(vdev)) { in ivpu_ipc_irq_handler()
373 vpu_addr = ivpu_hw_reg_ipc_rx_addr_get(vdev); in ivpu_ipc_irq_handler()
375 ivpu_err(vdev, "Failed to read IPC rx addr register\n"); in ivpu_ipc_irq_handler()
381 ivpu_warn(vdev, "IPC msg 0x%x out of range\n", vpu_addr); in ivpu_ipc_irq_handler()
384 ivpu_ipc_msg_dump(vdev, "RX", ipc_hdr, vpu_addr); in ivpu_ipc_irq_handler()
390 ivpu_warn(vdev, "JSM msg 0x%x out of range\n", ipc_hdr->data_addr); in ivpu_ipc_irq_handler()
391 ivpu_ipc_rx_mark_free(vdev, ipc_hdr, NULL); in ivpu_ipc_irq_handler()
394 ivpu_jsm_msg_dump(vdev, "RX", jsm_msg, ipc_hdr->data_addr); in ivpu_ipc_irq_handler()
398 ivpu_warn(vdev, "IPC RX msg dropped, msg count %d\n", IPC_MAX_RX_MSG); in ivpu_ipc_irq_handler()
399 ivpu_ipc_rx_mark_free(vdev, ipc_hdr, jsm_msg); in ivpu_ipc_irq_handler()
406 if (ivpu_ipc_match_consumer(vdev, cons, ipc_hdr, jsm_msg)) { in ivpu_ipc_irq_handler()
407 ivpu_ipc_dispatch(vdev, cons, ipc_hdr, jsm_msg); in ivpu_ipc_irq_handler()
415 ivpu_dbg(vdev, IPC, "IPC RX msg 0x%x dropped (no consumer)\n", vpu_addr); in ivpu_ipc_irq_handler()
416 ivpu_ipc_rx_mark_free(vdev, ipc_hdr, jsm_msg); in ivpu_ipc_irq_handler()
423 int ivpu_ipc_init(struct ivpu_device *vdev) in ivpu_ipc_init() argument
425 struct ivpu_ipc_info *ipc = vdev->ipc; in ivpu_ipc_init()
428 ipc->mem_tx = ivpu_bo_alloc_internal(vdev, 0, SZ_16K, DRM_IVPU_BO_WC); in ivpu_ipc_init()
432 ipc->mem_rx = ivpu_bo_alloc_internal(vdev, 0, SZ_16K, DRM_IVPU_BO_WC); in ivpu_ipc_init()
436 ipc->mm_tx = devm_gen_pool_create(vdev->drm.dev, __ffs(IVPU_IPC_ALIGNMENT), in ivpu_ipc_init()
440 ivpu_err(vdev, "Failed to create gen pool, %pe\n", ipc->mm_tx); in ivpu_ipc_init()
446 ivpu_err(vdev, "gen_pool_add failed, ret %d\n", ret); in ivpu_ipc_init()
452 drmm_mutex_init(&vdev->drm, &ipc->lock); in ivpu_ipc_init()
454 ivpu_ipc_reset(vdev); in ivpu_ipc_init()
464 void ivpu_ipc_fini(struct ivpu_device *vdev) in ivpu_ipc_fini() argument
466 ivpu_ipc_mem_fini(vdev); in ivpu_ipc_fini()
469 void ivpu_ipc_enable(struct ivpu_device *vdev) in ivpu_ipc_enable() argument
471 struct ivpu_ipc_info *ipc = vdev->ipc; in ivpu_ipc_enable()
478 void ivpu_ipc_disable(struct ivpu_device *vdev) in ivpu_ipc_disable() argument
480 struct ivpu_ipc_info *ipc = vdev->ipc; in ivpu_ipc_disable()
494 void ivpu_ipc_reset(struct ivpu_device *vdev) in ivpu_ipc_reset() argument
496 struct ivpu_ipc_info *ipc = vdev->ipc; in ivpu_ipc_reset()