lkml.org 
[lkml]   [2020]   [Mar]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 09/13] soc: mediatek: cmdq: add write_s value function
    Date
    add write_s function in cmdq helper functions which
    writes a constant value to address with large dma
    access support.

    Signed-off-by: Dennis YC Hsieh <dennis-yc.hsieh@mediatek.com>
    Reviewed-by: CK Hu <ck.hu@mediatek.com>
    ---
    drivers/soc/mediatek/mtk-cmdq-helper.c | 26 ++++++++++++++++++++++++++
    include/linux/soc/mediatek/mtk-cmdq.h | 14 ++++++++++++++
    2 files changed, 40 insertions(+)

    diff --git a/drivers/soc/mediatek/mtk-cmdq-helper.c b/drivers/soc/mediatek/mtk-cmdq-helper.c
    index 03c129230cd7..a9ebbabb7439 100644
    --- a/drivers/soc/mediatek/mtk-cmdq-helper.c
    +++ b/drivers/soc/mediatek/mtk-cmdq-helper.c
    @@ -269,6 +269,32 @@ int cmdq_pkt_write_s(struct cmdq_pkt *pkt, u16 high_addr_reg_idx,
    }
    EXPORT_SYMBOL(cmdq_pkt_write_s);

    +int cmdq_pkt_write_s_value(struct cmdq_pkt *pkt, u16 high_addr_reg_idx,
    + u16 addr_low, u32 value, u32 mask)
    +{
    + struct cmdq_instruction inst = { {0} };
    + int err;
    +
    + if (mask != U32_MAX) {
    + inst.op = CMDQ_CODE_MASK;
    + inst.mask = ~mask;
    + err = cmdq_pkt_append_command(pkt, inst);
    + if (err < 0)
    + return err;
    +
    + inst.op = CMDQ_CODE_WRITE_S_MASK;
    + } else {
    + inst.op = CMDQ_CODE_WRITE_S;
    + }
    +
    + inst.sop = high_addr_reg_idx;
    + inst.offset = addr_low;
    + inst.value = value;
    +
    + return cmdq_pkt_append_command(pkt, inst);
    +}
    +EXPORT_SYMBOL(cmdq_pkt_write_s_value);
    +
    int cmdq_pkt_wfe(struct cmdq_pkt *pkt, u16 event)
    {
    struct cmdq_instruction inst = { {0} };
    diff --git a/include/linux/soc/mediatek/mtk-cmdq.h b/include/linux/soc/mediatek/mtk-cmdq.h
    index 01b4184af310..fec292aac83c 100644
    --- a/include/linux/soc/mediatek/mtk-cmdq.h
    +++ b/include/linux/soc/mediatek/mtk-cmdq.h
    @@ -135,6 +135,20 @@ int cmdq_pkt_read_s(struct cmdq_pkt *pkt, u16 high_addr_reg_idx, u16 addr_low,
    int cmdq_pkt_write_s(struct cmdq_pkt *pkt, u16 high_addr_reg_idx,
    u16 addr_low, u16 src_reg_idx, u32 mask);

    +/**
    + * cmdq_pkt_write_s_value() - append write_s command with mask to the CMDQ
    + * packet which write value to a physical address
    + * @pkt: the CMDQ packet
    + * @high_addr_reg_idx: internal regisger ID which contains high address of pa
    + * @addr_low: low address of pa
    + * @value: the specified target value
    + * @mask: the specified target mask
    + *
    + * Return: 0 for success; else the error code is returned
    + */
    +int cmdq_pkt_write_s_value(struct cmdq_pkt *pkt, u16 high_addr_reg_idx,
    + u16 addr_low, u32 value, u32 mask);
    +
    /**
    * cmdq_pkt_wfe() - append wait for event command to the CMDQ packet
    * @pkt: the CMDQ packet
    --
    2.18.0
    \
     
     \ /
      Last update: 2020-03-08 11:54    [W:4.044 / U:0.156 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site