<html><body><p>
<pre>
Hi, Matthias:

On Mon, 2024-09-02 at 17:31 +0200, Matthias Brugger wrote:
>
> External email : Please do not click links or open attachments until you have verified the sender or the content.
>
>
> On 01/09/2024 16:32, Chun-Kuang Hu wrote:
> > Use cmdq_pkt_create() and cmdq_pkt_destroy() common function
> > instead of implementing mdp3 version.
> >
> > Signed-off-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>
> > ---
> > .../platform/mediatek/mdp3/mtk-mdp3-cmdq.c | 46 ++-----------------
> > .../platform/mediatek/mdp3/mtk-mdp3-cmdq.h | 1 +
> > 2 files changed, 6 insertions(+), 41 deletions(-)
> >
> > diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c
> > index ef5dade35fd3..740a484c8eb4 100644
> > --- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c
> > +++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.c
> > @@ -471,43 +471,6 @@ static int mdp_path_config(struct mdp_dev *mdp, struct mdp_cmdq_cmd *cmd,
> > return 0;
> > }
> >
> > -static int mdp_cmdq_pkt_create(struct cmdq_client *client, struct cmdq_pkt *pkt,
> > - size_t size)
> > -{
> > -struct device *dev;
> > -dma_addr_t dma_addr;
> > -
> > -pkt->va_base = kzalloc(size, GFP_KERNEL);
> > -if (!pkt->va_base)
> > -return -ENOMEM;
> > -
> > -pkt->buf_size = size;
> > -pkt->cl = (void *)client;
>
> cmdq_pkt_create does not set the callback. Why doesn't that break things?
> Same holds for the crtc driver that is already in linux-next.

This series is to remove pkt->cl.
For the helper function whick need pkt->cl, add parameter to pass the cmdq_client information.
Up to now, only cmdq_pkt_finalize() use pkt->cl, but it is replaced by cmdq_pkt_eoc() and cmdq_pkt_jump_rel() in [PATCH v4 1/3].
So this would not break any thing.

Regards,
CK

>
> Regards,
> Matthias
>
> > -
> > -dev = client->chan->mbox->dev;
> > -dma_addr = dma_map_single(dev, pkt->va_base, pkt->buf_size,
> > - DMA_TO_DEVICE);
> > -if (dma_mapping_error(dev, dma_addr)) {
> > -dev_err(dev, "dma map failed, size=%u\n", (u32)(u64)size);
> > -kfree(pkt->va_base);
> > -return -ENOMEM;
> > -}
> > -
> > -pkt->pa_base = dma_addr;
> > -
> > -return 0;
> > -}
> > -
> > -static void mdp_cmdq_pkt_destroy(struct cmdq_pkt *pkt)
> > -{
> > -struct cmdq_client *client = (struct cmdq_client *)pkt->cl;
> > -
> > -dma_unmap_single(client->chan->mbox->dev, pkt->pa_base, pkt->buf_size,
> > - DMA_TO_DEVICE);
> > -kfree(pkt->va_base);
> > -pkt->va_base = NULL;
> > -}
> > -
> > static void mdp_auto_release_work(struct work_struct *work)
> > {
> > struct mdp_cmdq_cmd *cmd;
> > @@ -538,7 +501,7 @@ static void mdp_auto_release_work(struct work_struct *work)
> > wake_up(&mdp->callback_wq);
> > }
> >
> > -mdp_cmdq_pkt_destroy(&cmd->pkt);
> > +cmdq_pkt_destroy(mdp->cmdq_clt[cmd->pp_idx], &cmd->pkt);
> > kfree(cmd->comps);
> > cmd->comps = NULL;
> > kfree(cmd);
> > @@ -578,7 +541,7 @@ static void mdp_handle_cmdq_callback(struct mbox_client *cl, void *mssg)
> > if (refcount_dec_and_test(&mdp->job_count))
> > wake_up(&mdp->callback_wq);
> >
> > -mdp_cmdq_pkt_destroy(&cmd->pkt);
> > +cmdq_pkt_destroy(mdp->cmdq_clt[cmd->pp_idx], &cmd->pkt);
> > kfree(cmd->comps);
> > cmd->comps = NULL;
> > kfree(cmd);
> > @@ -620,7 +583,7 @@ static struct mdp_cmdq_cmd *mdp_cmdq_prepare(struct mdp_dev *mdp,
> > goto err_uninit;
> > }
> >
> > -ret = mdp_cmdq_pkt_create(mdp->cmdq_clt[pp_idx], &cmd->pkt, SZ_16K);
> > +ret = cmdq_pkt_create(mdp->cmdq_clt[pp_idx], &cmd->pkt, SZ_16K);
> > if (ret)
> > goto err_free_cmd;
> >
> > @@ -700,6 +663,7 @@ static struct mdp_cmdq_cmd *mdp_cmdq_prepare(struct mdp_dev *mdp,
> > cmd->comps = comps;
> > cmd->num_comps = num_comp;
> > cmd->mdp_ctx = param->mdp_ctx;
> > +cmd->pp_idx = pp_idx;
> >
> > kfree(path);
> > return cmd;
> > @@ -711,7 +675,7 @@ static struct mdp_cmdq_cmd *mdp_cmdq_prepare(struct mdp_dev *mdp,
> > err_free_comps:
> > kfree(comps);
> > err_destroy_pkt:
> > -mdp_cmdq_pkt_destroy(&cmd->pkt);
> > +cmdq_pkt_destroy(mdp->cmdq_clt[pp_idx], &cmd->pkt);
> > err_free_cmd:
> > kfree(cmd);
> > err_uninit:
> > diff --git a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.h b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.h
> > index 53a30ad7e0b0..935ae9825728 100644
> > --- a/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.h
> > +++ b/drivers/media/platform/mediatek/mdp3/mtk-mdp3-cmdq.h
> > @@ -35,6 +35,7 @@ struct mdp_cmdq_cmd {
> > struct mdp_comp *comps;
> > void *mdp_ctx;
> > u8 num_comps;
> > +u8 pp_idx;
> > };
> >
> > struct mdp_dev;

</pre>
</p></body></html><!--type:text--><!--{--><pre>************* MEDIATEK Confidentiality Notice ********************
The information contained in this e-mail message (including any 
attachments) may be confidential, proprietary, privileged, or otherwise
exempt from disclosure under applicable laws. It is intended to be 
conveyed only to the designated recipient(s). Any use, dissemination, 
distribution, printing, retaining or copying of this e-mail (including its 
attachments) by unintended recipient(s) is strictly prohibited and may 
be unlawful. If you are not an intended recipient of this e-mail, or believe 
that you have received this e-mail in error, please notify the sender 
immediately (by replying to this e-mail), delete any and all copies of 
this e-mail (including any attachments) from your system, and do not
disclose the content of this e-mail to any other person. Thank you!
</pre><!--}-->