Lines Matching refs:vdev

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