lkml.org 
[lkml]   [2024]   [Apr]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 4/9] soc: mediatek: cmdq: Add cmdq_pkt_write_s_reg_value to support write value to reg
    Date
    From: "Jason-JH.Lin" <jason-jh.lin@mediatek.com>

    Add cmdq_pkt_write_s_reg_value to support write a value to a register.

    It appends write_s command to the command buffer in a CMDQ packet,
    ask GCE to excute a write instruction to write a value to a register
    with low 16 bits physical address offset.

    Signed-off-by: Jason-JH.Lin <jason-jh.lin@mediatek.com>
    Signed-off-by: Hsiao Chien Sung <shawn.sung@mediatek.com>
    ---
    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 818e6ab24370a..1d79a127f2d3e 100644
    --- a/drivers/soc/mediatek/mtk-cmdq-helper.c
    +++ b/drivers/soc/mediatek/mtk-cmdq-helper.c
    @@ -289,6 +289,19 @@ int cmdq_pkt_write_s_value(struct cmdq_pkt *pkt, u8 high_addr_reg_idx,
    }
    EXPORT_SYMBOL(cmdq_pkt_write_s_value);

    +int cmdq_pkt_write_s_reg_value(struct cmdq_pkt *pkt, u8 high_addr_reg_idx, u32 value)
    +{
    + struct cmdq_instruction inst = {};
    +
    + inst.op = CMDQ_CODE_WRITE_S;
    + inst.dst_t = CMDQ_REG_TYPE;
    + inst.reg_dst = high_addr_reg_idx;
    + inst.value = value;
    +
    + return cmdq_pkt_append_command(pkt, inst);
    +}
    +EXPORT_SYMBOL(cmdq_pkt_write_s_reg_value);
    +
    int cmdq_pkt_write_s_mask_value(struct cmdq_pkt *pkt, u8 high_addr_reg_idx,
    u16 addr_low, u32 value, u32 mask)
    {
    diff --git a/include/linux/soc/mediatek/mtk-cmdq.h b/include/linux/soc/mediatek/mtk-cmdq.h
    index 1edb391ec604a..854b8b3d6fad0 100644
    --- a/include/linux/soc/mediatek/mtk-cmdq.h
    +++ b/include/linux/soc/mediatek/mtk-cmdq.h
    @@ -219,6 +219,17 @@ int cmdq_pkt_write_s_mask_value(struct cmdq_pkt *pkt, u8 high_addr_reg_idx,
    */
    int cmdq_pkt_mem_move(struct cmdq_pkt *pkt, dma_addr_t src_addr, dma_addr_t dst_addr);

    +/**
    + * cmdq_pkt_write_s_reg_value() - append write_s command to the CMDQ packet which
    + * write value to a register with low address pa
    + * @pkt: the CMDQ packet
    + * @high_addr_reg_idx: internal register ID which contains high address of pa
    + * @value: the specified target value
    + *
    + * Return: 0 for success; else the error code is returned
    + */
    +int cmdq_pkt_write_s_reg_value(struct cmdq_pkt *pkt, u8 high_addr_reg_idx, u32 value);
    +
    /**
    * cmdq_pkt_wfe() - append wait for event command to the CMDQ packet
    * @pkt: the CMDQ packet
    --
    2.18.0

    \
     
     \ /
      Last update: 2024-05-27 16:20    [W:2.635 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site