lkml.org 
[lkml]   [2019]   [Mar]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 09/10] 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 | 24 ++++++++++++++++++++++++
    include/linux/soc/mediatek/mtk-cmdq.h | 17 +++++++++++++++++
    2 files changed, 41 insertions(+)

    diff --git a/drivers/soc/mediatek/mtk-cmdq-helper.c b/drivers/soc/mediatek/mtk-cmdq-helper.c
    index 71c167c..0a9609e 100644
    --- a/drivers/soc/mediatek/mtk-cmdq-helper.c
    +++ b/drivers/soc/mediatek/mtk-cmdq-helper.c
    @@ -47,6 +47,30 @@ 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-subsys",
    + "#subsys-cells", idx, &spec)) {
    + dev_err(dev, "can't parse gce-subsys property");
    +
    + return -ENODEV;
    + }
    +
    + subsys->base = spec.args[0];
    + subsys->id = spec.args[1];
    + 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 0651a0b..e39ba1e 100644
    --- a/include/linux/soc/mediatek/mtk-cmdq.h
    +++ b/include/linux/soc/mediatek/mtk-cmdq.h
    @@ -15,6 +15,11 @@

    struct cmdq_pkt;

    +struct cmdq_subsys {
    + u32 base;
    + u8 id;
    +};
    +
    struct cmdq_client {
    spinlock_t lock;
    u32 pkt_cnt;
    @@ -142,4 +147,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__ */
    --
    1.9.1
    \
     
     \ /
      Last update: 2019-03-06 10:52    [W:4.226 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site