lkml.org 
[lkml]   [2019]   [Apr]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 10/12] soc: mediatek: cmdq: add cmdq_dev_get_subsys function
    Date
    GCE cannot know the register base address, this function
    can help cmdq client to get the relationship of subsys
    and register base address.

    Signed-off-by: Bibby Hsieh <bibby.hsieh@mediatek.com>
    ---
    drivers/soc/mediatek/mtk-cmdq-helper.c | 25 +++++++++++++++++++++++++
    include/linux/soc/mediatek/mtk-cmdq.h | 18 ++++++++++++++++++
    2 files changed, 43 insertions(+)

    diff --git a/drivers/soc/mediatek/mtk-cmdq-helper.c b/drivers/soc/mediatek/mtk-cmdq-helper.c
    index 80856b8c2385..d86f800d40dc 100644
    --- a/drivers/soc/mediatek/mtk-cmdq-helper.c
    +++ b/drivers/soc/mediatek/mtk-cmdq-helper.c
    @@ -47,6 +47,31 @@ static void cmdq_pkt_instr_encoder(struct cmdq_pkt *pkt, s16 arg_c, s16 arg_b,
    pkt->cmd_buf_size += CMDQ_INST_SIZE;
    }

    +struct cmdq_subsys *cmdq_dev_get_subsys(struct device *dev, int idx)
    +{
    + struct cmdq_subsys *subsys;
    + struct of_phandle_args spec;
    +
    + subsys = devm_kzalloc(dev, sizeof(*subsys), GFP_KERNEL);
    + if (!subsys)
    + return NULL;
    +
    + if (of_parse_phandle_with_args(dev->of_node, "mediatek,gce-client-reg",
    + "#subsys-cells", idx, &spec)) {
    + dev_err(dev, "can't parse gce-client-reg property");
    +
    + return (struct cmdq_subsys *)-ENODEV;
    + }
    +
    + subsys->id = spec.args[0];
    + subsys->offset = spec.args[1];
    + subsys->size = spec.args[2];
    + of_node_put(spec.np);
    +
    + return subsys;
    +}
    +EXPORT_SYMBOL(cmdq_dev_get_subsys);
    +
    static void cmdq_client_timeout(struct timer_list *t)
    {
    struct cmdq_client *client = from_timer(client, t, timer);
    diff --git a/include/linux/soc/mediatek/mtk-cmdq.h b/include/linux/soc/mediatek/mtk-cmdq.h
    index 0651a0bffa54..574006c5cd76 100644
    --- a/include/linux/soc/mediatek/mtk-cmdq.h
    +++ b/include/linux/soc/mediatek/mtk-cmdq.h
    @@ -15,6 +15,12 @@

    struct cmdq_pkt;

    +struct cmdq_subsys {
    + u8 id;
    + u16 offset;
    + u16 size;
    +};
    +
    struct cmdq_client {
    spinlock_t lock;
    u32 pkt_cnt;
    @@ -142,4 +148,16 @@ int cmdq_pkt_flush_async(struct cmdq_pkt *pkt, cmdq_async_flush_cb cb,
    */
    int cmdq_pkt_flush(struct cmdq_pkt *pkt);

    +/**
    + * cmdq_dev_get_subsys() - parse sub system from the device node of CMDQ client
    + * @dev: device of CMDQ mailbox client
    + * @idx: the index of desired subsys
    + *
    + * Return: CMDQ subsys pointer
    + *
    + * Help CMDQ client pasing the sub system number
    + * from the device node of CMDQ client.
    + */
    +struct cmdq_subsys *cmdq_dev_get_subsys(struct device *dev, int idx);
    +
    #endif /* __MTK_CMDQ_H__ */
    --
    2.18.0
    \
     
     \ /
      Last update: 2019-04-15 14:59    [W:3.000 / U:0.088 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site