Lines Matching +full:mtk +full:- +full:gce

1 // SPDX-License-Identifier: GPL-2.0
7 #include <linux/dma-mapping.h>
11 #include <linux/soc/mediatek/mtk-cmdq.h>
53 return -ENOENT; in cmdq_dev_get_client_reg()
55 err = of_parse_phandle_with_fixed_args(dev->of_node, in cmdq_dev_get_client_reg()
56 "mediatek,gce-client-reg", in cmdq_dev_get_client_reg()
60 "error %d can't parse gce-client-reg property (%d)", in cmdq_dev_get_client_reg()
66 client_reg->subsys = (u8)spec.args[0]; in cmdq_dev_get_client_reg()
67 client_reg->offset = (u16)spec.args[1]; in cmdq_dev_get_client_reg()
68 client_reg->size = (u16)spec.args[2]; in cmdq_dev_get_client_reg()
81 return (struct cmdq_client *)-ENOMEM; in cmdq_mbox_create()
83 client->client.dev = dev; in cmdq_mbox_create()
84 client->client.tx_block = false; in cmdq_mbox_create()
85 client->client.knows_txdone = true; in cmdq_mbox_create()
86 client->chan = mbox_request_channel(&client->client, index); in cmdq_mbox_create()
88 if (IS_ERR(client->chan)) { in cmdq_mbox_create()
92 err = PTR_ERR(client->chan); in cmdq_mbox_create()
104 mbox_free_channel(client->chan); in cmdq_mbox_destroy()
117 return ERR_PTR(-ENOMEM); in cmdq_pkt_create()
118 pkt->va_base = kzalloc(size, GFP_KERNEL); in cmdq_pkt_create()
119 if (!pkt->va_base) { in cmdq_pkt_create()
121 return ERR_PTR(-ENOMEM); in cmdq_pkt_create()
123 pkt->buf_size = size; in cmdq_pkt_create()
124 pkt->cl = (void *)client; in cmdq_pkt_create()
126 dev = client->chan->mbox->dev; in cmdq_pkt_create()
127 dma_addr = dma_map_single(dev, pkt->va_base, pkt->buf_size, in cmdq_pkt_create()
131 kfree(pkt->va_base); in cmdq_pkt_create()
133 return ERR_PTR(-ENOMEM); in cmdq_pkt_create()
136 pkt->pa_base = dma_addr; in cmdq_pkt_create()
144 struct cmdq_client *client = (struct cmdq_client *)pkt->cl; in cmdq_pkt_destroy()
146 dma_unmap_single(client->chan->mbox->dev, pkt->pa_base, pkt->buf_size, in cmdq_pkt_destroy()
148 kfree(pkt->va_base); in cmdq_pkt_destroy()
158 if (unlikely(pkt->cmd_buf_size + CMDQ_INST_SIZE > pkt->buf_size)) { in cmdq_pkt_append_command()
160 * In the case of allocated buffer size (pkt->buf_size) is used in cmdq_pkt_append_command()
161 * up, the real required size (pkt->cmdq_buf_size) is still in cmdq_pkt_append_command()
167 pkt->cmd_buf_size += CMDQ_INST_SIZE; in cmdq_pkt_append_command()
169 __func__, (u32)pkt->buf_size); in cmdq_pkt_append_command()
170 return -ENOMEM; in cmdq_pkt_append_command()
173 cmd_ptr = pkt->va_base + pkt->cmd_buf_size; in cmdq_pkt_append_command()
175 pkt->cmd_buf_size += CMDQ_INST_SIZE; in cmdq_pkt_append_command()
309 return -EINVAL; in cmdq_pkt_wfe()
324 return -EINVAL; in cmdq_pkt_clear_event()
339 return -EINVAL; in cmdq_pkt_set_event()
403 cmdq_get_shift_pa(((struct cmdq_client *)pkt->cl)->chan); in cmdq_pkt_jump()
423 cmdq_get_shift_pa(((struct cmdq_client *)pkt->cl)->chan); in cmdq_pkt_finalize()
433 struct cmdq_client *client = (struct cmdq_client *)pkt->cl; in cmdq_pkt_flush_async()
435 err = mbox_send_message(client->chan, pkt); in cmdq_pkt_flush_async()
439 mbox_client_txdone(client->chan, 0); in cmdq_pkt_flush_async()