Lines Matching refs:ipc
23 struct ivpu_ipc_hdr ipc;
65 struct ivpu_ipc_info *ipc = vdev->ipc;
67 ivpu_bo_free_internal(ipc->mem_rx);
68 ivpu_bo_free_internal(ipc->mem_tx);
75 struct ivpu_ipc_info *ipc = vdev->ipc;
80 tx_buf_vpu_addr = gen_pool_alloc(ipc->mm_tx, sizeof(*tx_buf));
87 tx_buf = ivpu_to_cpu_addr(ipc->mem_tx, tx_buf_vpu_addr);
89 gen_pool_free(ipc->mm_tx, tx_buf_vpu_addr, sizeof(*tx_buf));
95 if (tx_buf->ipc.status != IVPU_IPC_HDR_FREE)
104 tx_buf->ipc.data_addr = jsm_vpu_addr;
106 tx_buf->ipc.data_size = sizeof(*req);
107 tx_buf->ipc.channel = cons->channel;
108 tx_buf->ipc.src_node = 0;
109 tx_buf->ipc.dst_node = 1;
110 tx_buf->ipc.status = IVPU_IPC_HDR_ALLOCATED;
115 req->request_id = atomic_inc_return(&ipc->request_id);
123 ivpu_ipc_msg_dump(vdev, "TX", &tx_buf->ipc, tx_buf_vpu_addr);
130 struct ivpu_ipc_info *ipc = vdev->ipc;
133 gen_pool_free(ipc->mm_tx, vpu_addr, sizeof(struct ivpu_ipc_tx_buf));
144 struct ivpu_ipc_info *ipc = vdev->ipc;
154 spin_lock_irq(&ipc->cons_list_lock);
155 list_add_tail(&cons->link, &ipc->cons_list);
156 spin_unlock_irq(&ipc->cons_list_lock);
161 struct ivpu_ipc_info *ipc = vdev->ipc;
164 spin_lock_irq(&ipc->cons_list_lock);
166 spin_unlock_irq(&ipc->cons_list_lock);
172 atomic_dec(&ipc->rx_msg_count);
183 struct ivpu_ipc_info *ipc = vdev->ipc;
186 mutex_lock(&ipc->lock);
188 if (!ipc->on) {
200 mutex_unlock(&ipc->lock);
208 struct ivpu_ipc_info *ipc = vdev->ipc;
247 atomic_dec(&ipc->rx_msg_count);
334 struct ivpu_ipc_info *ipc = vdev->ipc;
338 lockdep_assert_held(&ipc->cons_list_lock);
346 atomic_inc(&ipc->rx_msg_count);
360 struct ivpu_ipc_info *ipc = vdev->ipc;
379 ipc_hdr = ivpu_to_cpu_addr(ipc->mem_rx, vpu_addr);
388 jsm_msg = ivpu_to_cpu_addr(ipc->mem_rx, ipc_hdr->data_addr);
397 if (atomic_read(&ipc->rx_msg_count) > IPC_MAX_RX_MSG) {
404 spin_lock_irqsave(&ipc->cons_list_lock, flags);
405 list_for_each_entry(cons, &ipc->cons_list, link) {
412 spin_unlock_irqrestore(&ipc->cons_list_lock, flags);
425 struct ivpu_ipc_info *ipc = vdev->ipc;
428 ipc->mem_tx = ivpu_bo_alloc_internal(vdev, 0, SZ_16K, DRM_IVPU_BO_WC);
429 if (!ipc->mem_tx)
432 ipc->mem_rx = ivpu_bo_alloc_internal(vdev, 0, SZ_16K, DRM_IVPU_BO_WC);
433 if (!ipc->mem_rx)
436 ipc->mm_tx = devm_gen_pool_create(vdev->drm.dev, __ffs(IVPU_IPC_ALIGNMENT),
438 if (IS_ERR(ipc->mm_tx)) {
439 ret = PTR_ERR(ipc->mm_tx);
440 ivpu_err(vdev, "Failed to create gen pool, %pe\n", ipc->mm_tx);
444 ret = gen_pool_add(ipc->mm_tx, ipc->mem_tx->vpu_addr, ipc->mem_tx->base.size, -1);
450 INIT_LIST_HEAD(&ipc->cons_list);
451 spin_lock_init(&ipc->cons_list_lock);
452 drmm_mutex_init(&vdev->drm, &ipc->lock);
458 ivpu_bo_free_internal(ipc->mem_rx);
460 ivpu_bo_free_internal(ipc->mem_tx);
471 struct ivpu_ipc_info *ipc = vdev->ipc;
473 mutex_lock(&ipc->lock);
474 ipc->on = true;
475 mutex_unlock(&ipc->lock);
480 struct ivpu_ipc_info *ipc = vdev->ipc;
484 mutex_lock(&ipc->lock);
485 ipc->on = false;
486 mutex_unlock(&ipc->lock);
488 spin_lock_irqsave(&ipc->cons_list_lock, flags);
489 list_for_each_entry_safe(cons, c, &ipc->cons_list, link)
491 spin_unlock_irqrestore(&ipc->cons_list_lock, flags);
496 struct ivpu_ipc_info *ipc = vdev->ipc;
498 mutex_lock(&ipc->lock);
500 memset(ipc->mem_tx->kvaddr, 0, ipc->mem_tx->base.size);
501 memset(ipc->mem_rx->kvaddr, 0, ipc->mem_rx->base.size);
504 mutex_unlock(&ipc->lock);