Messages in this thread Patch in this message | | | From | CK Hu (胡俊光) <> | Subject | Re: [PATCH v2 02/11] soc: mediatek: Support GCE jump to absolute | Date | Mon, 18 Sep 2023 08:51:27 +0000 |
| |
Hi, Hsiao-chien:
On Mon, 2023-09-18 at 16:41 +0800, Hsiao Chien Sung wrote: > Add a new API to jump to the head of cmdq packet by > appending a jump command at the end of it. > > Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com> > --- > drivers/soc/mediatek/mtk-cmdq-helper.c | 16 ++++++++++++++++ > include/linux/soc/mediatek/mtk-cmdq.h | 2 ++ > 2 files changed, 18 insertions(+) > > diff --git a/drivers/soc/mediatek/mtk-cmdq-helper.c > b/drivers/soc/mediatek/mtk-cmdq-helper.c > index b0cd071c4719..e029ce231df1 100644 > --- a/drivers/soc/mediatek/mtk-cmdq-helper.c > +++ b/drivers/soc/mediatek/mtk-cmdq-helper.c > @@ -441,4 +441,20 @@ int cmdq_pkt_flush_async(struct cmdq_pkt *pkt) > } > EXPORT_SYMBOL(cmdq_pkt_flush_async); > > +int cmdq_pkt_jump_absolute(struct cmdq_pkt *pkt)
CMDQ provide ability to jump to any physical address, but this interface limit the jump to head of packet. So I would like the interface to be
int cmdq_pkt_jump_absolute(struct cmdq_pkt *pkt, dma_addr_t pa);
For client driver, it could jump to anywhere it want.
Regards, CK
> +{ > + struct cmdq_instruction inst = { 0 }; > + u8 shift_pa; > + > + shift_pa = cmdq_get_shift_pa(((struct cmdq_client *)pkt->cl)- > >chan); > + > + /* jump to head of the packet */ > + inst.op = CMDQ_CODE_JUMP; > + inst.offset = CMDQ_JUMP_RELATIVE; > + inst.value = pkt->pa_base >> shift_pa; > + > + return cmdq_pkt_append_command(pkt, inst); > +} > +EXPORT_SYMBOL(cmdq_pkt_jump_absolute); > + > MODULE_LICENSE("GPL v2"); > diff --git a/include/linux/soc/mediatek/mtk-cmdq.h > b/include/linux/soc/mediatek/mtk-cmdq.h > index a253c001c861..106988cc5f01 100644 > --- a/include/linux/soc/mediatek/mtk-cmdq.h > +++ b/include/linux/soc/mediatek/mtk-cmdq.h > @@ -276,6 +276,8 @@ int cmdq_pkt_jump(struct cmdq_pkt *pkt, > dma_addr_t addr); > */ > int cmdq_pkt_finalize(struct cmdq_pkt *pkt); > > +int cmdq_pkt_jump_absolute(struct cmdq_pkt *pkt); > + > /** > * cmdq_pkt_flush_async() - trigger CMDQ to asynchronously execute > the CMDQ > * packet and call back at the end of done > packet
| |