lkml.org 
[lkml]   [2020]   [Sep]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH v3 7/9] soc: mediatek: cmdq: add jump function
    From
    Date


    On 07/07/2020 17:45, Dennis YC Hsieh wrote:
    > Add jump function so that client can jump to any address which
    > contains instruction.
    >
    > Signed-off-by: Dennis YC Hsieh <dennis-yc.hsieh@mediatek.com>

    Now pushed to v5.9-next/soc

    Thanks!

    > ---
    > drivers/soc/mediatek/mtk-cmdq-helper.c | 13 +++++++++++++
    > include/linux/soc/mediatek/mtk-cmdq.h | 11 +++++++++++
    > 2 files changed, 24 insertions(+)
    >
    > diff --git a/drivers/soc/mediatek/mtk-cmdq-helper.c b/drivers/soc/mediatek/mtk-cmdq-helper.c
    > index b6e25f216605..d55dc3296105 100644
    > --- a/drivers/soc/mediatek/mtk-cmdq-helper.c
    > +++ b/drivers/soc/mediatek/mtk-cmdq-helper.c
    > @@ -13,6 +13,7 @@
    > #define CMDQ_POLL_ENABLE_MASK BIT(0)
    > #define CMDQ_EOC_IRQ_EN BIT(0)
    > #define CMDQ_REG_TYPE 1
    > +#define CMDQ_JUMP_RELATIVE 1
    >
    > struct cmdq_instruction {
    > union {
    > @@ -407,6 +408,18 @@ int cmdq_pkt_assign(struct cmdq_pkt *pkt, u16 reg_idx, u32 value)
    > }
    > EXPORT_SYMBOL(cmdq_pkt_assign);
    >
    > +int cmdq_pkt_jump(struct cmdq_pkt *pkt, dma_addr_t addr)
    > +{
    > + struct cmdq_instruction inst = {};
    > +
    > + inst.op = CMDQ_CODE_JUMP;
    > + inst.offset = CMDQ_JUMP_RELATIVE;
    > + inst.value = addr >>
    > + cmdq_get_shift_pa(((struct cmdq_client *)pkt->cl)->chan);
    > + return cmdq_pkt_append_command(pkt, inst);
    > +}
    > +EXPORT_SYMBOL(cmdq_pkt_jump);
    > +
    > int cmdq_pkt_finalize(struct cmdq_pkt *pkt)
    > {
    > struct cmdq_instruction inst = { {0} };
    > diff --git a/include/linux/soc/mediatek/mtk-cmdq.h b/include/linux/soc/mediatek/mtk-cmdq.h
    > index d9390d76ee14..34354e952f60 100644
    > --- a/include/linux/soc/mediatek/mtk-cmdq.h
    > +++ b/include/linux/soc/mediatek/mtk-cmdq.h
    > @@ -253,6 +253,17 @@ int cmdq_pkt_poll_mask(struct cmdq_pkt *pkt, u8 subsys,
    > int cmdq_pkt_assign(struct cmdq_pkt *pkt, u16 reg_idx, u32 value);
    >
    > /**
    > + * cmdq_pkt_jump() - Append jump command to the CMDQ packet, ask GCE
    > + * to execute an instruction that change current thread PC to
    > + * a physical address which should contains more instruction.
    > + * @pkt: the CMDQ packet
    > + * @addr: physical address of target instruction buffer
    > + *
    > + * Return: 0 for success; else the error code is returned
    > + */
    > +int cmdq_pkt_jump(struct cmdq_pkt *pkt, dma_addr_t addr);
    > +
    > +/**
    > * cmdq_pkt_finalize() - Append EOC and jump command to pkt.
    > * @pkt: the CMDQ packet
    > *
    >

    \
     
     \ /
      Last update: 2020-09-21 18:19    [W:4.587 / U:4.828 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site