lkml.org 
[lkml]   [2019]   [Aug]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [RESEND, PATCH v13 11/12] soc: mediatek: cmdq: add cmdq_dev_get_client_reg function
    From
    Date


    On 20/08/2019 10:49, Bibby Hsieh wrote:
    > GCE cannot know the register base address, this function
    > can help cmdq client to get the cmdq_client_reg structure.
    >
    > Signed-off-by: Bibby Hsieh <bibby.hsieh@mediatek.com>
    > Reviewed-by: CK Hu <ck.hu@mediatek.com>
    > ---
    > drivers/soc/mediatek/mtk-cmdq-helper.c | 29 ++++++++++++++++++++++++++
    > include/linux/soc/mediatek/mtk-cmdq.h | 21 +++++++++++++++++++
    > 2 files changed, 50 insertions(+)
    >
    > diff --git a/drivers/soc/mediatek/mtk-cmdq-helper.c b/drivers/soc/mediatek/mtk-cmdq-helper.c
    > index c53f8476c68d..80f75a1075b4 100644
    > --- a/drivers/soc/mediatek/mtk-cmdq-helper.c
    > +++ b/drivers/soc/mediatek/mtk-cmdq-helper.c
    > @@ -27,6 +27,35 @@ struct cmdq_instruction {
    > u8 op;
    > };
    >
    > +int cmdq_dev_get_client_reg(struct device *dev,
    > + struct cmdq_client_reg *client_reg, int idx)
    > +{

    Can't we do/call this in cmdq_mbox_create parsing the number of gce-client-reg
    properties we have and allocating these using a pointer to cmdq_client_reg in
    cmdq_client?
    We will have to free the pointer then in cmdq_mbox_destroy.

    Regards,
    Matthias

    > + struct of_phandle_args spec;
    > + int err;
    > +
    > + if (!client_reg)
    > + return -ENOENT;
    > +
    > + err = of_parse_phandle_with_fixed_args(dev->of_node,
    > + "mediatek,gce-client-reg",
    > + 3, idx, &spec);
    > + if (err < 0) {
    > + dev_err(dev,
    > + "error %d can't parse gce-client-reg property (%d)",
    > + err, idx);
    > +
    > + return err;
    > + }
    > +
    > + client_reg->subsys = (u8)spec.args[0];
    > + client_reg->offset = (u16)spec.args[1];
    > + client_reg->size = (u16)spec.args[2];
    > + of_node_put(spec.np);
    > +
    > + return 0;
    > +}
    > +EXPORT_SYMBOL(cmdq_dev_get_client_reg);
    > +
    > 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 a345870a6d10..02ddd60b212f 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_client_reg {
    > + u8 subsys;
    > + u16 offset;
    > + u16 size;
    > +};
    > +
    > struct cmdq_client {
    > spinlock_t lock;
    > u32 pkt_cnt;
    > @@ -24,6 +30,21 @@ struct cmdq_client {
    > u32 timeout_ms; /* in unit of microsecond */
    > };
    >
    > +/**
    > + * cmdq_dev_get_client_reg() - parse cmdq client reg from the device
    > + * node of CMDQ client
    > + * @dev: device of CMDQ mailbox client
    > + * @client_reg: CMDQ client reg pointer
    > + * @idx: the index of desired reg
    > + *
    > + * Return: 0 for success; else the error code is returned
    > + *
    > + * Help CMDQ client parsing the cmdq client reg
    > + * from the device node of CMDQ client.
    > + */
    > +int cmdq_dev_get_client_reg(struct device *dev,
    > + struct cmdq_client_reg *client_reg, int idx);
    > +
    > /**
    > * cmdq_mbox_create() - create CMDQ mailbox client and channel
    > * @dev: device of CMDQ mailbox client
    >

    \
     
     \ /
      Last update: 2019-08-23 16:22    [W:4.160 / U:0.304 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site