[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <f8945f1b-aaa7-4f4a-59e5-8e817aeb46ae@gmail.com>
Date: Tue, 27 Aug 2019 12:13:56 +0200
From: Matthias Brugger <matthias.bgg@...il.com>
To: Bibby Hsieh <bibby.hsieh@...iatek.com>
Cc: Jassi Brar <jassisinghbrar@...il.com>,
Rob Herring <robh+dt@...nel.org>, CK HU <ck.hu@...iatek.com>,
Daniel Kurtz <djkurtz@...omium.org>,
Sascha Hauer <s.hauer@...gutronix.de>,
devicetree@...r.kernel.org, linux-kernel@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org,
linux-mediatek@...ts.infradead.org, srv_heupstream@...iatek.com,
Sascha Hauer <kernel@...gutronix.de>,
Philipp Zabel <p.zabel@...gutronix.de>,
Nicolas Boichat <drinkcat@...omium.org>,
YT Shen <yt.shen@...iatek.com>,
Daoyuan Huang <daoyuan.huang@...iatek.com>,
Jiaguang Zhang <jiaguang.zhang@...iatek.com>,
Dennis-YC Hsieh <dennis-yc.hsieh@...iatek.com>,
Houlong Wei <houlong.wei@...iatek.com>, ginny.chen@...iatek.com
Subject: Re: [RESEND, PATCH v13 11/12] soc: mediatek: cmdq: add
cmdq_dev_get_client_reg function
On 27/08/2019 05:59, Bibby Hsieh wrote:
> On Fri, 2019-08-23 at 16:21 +0200, Matthias Brugger wrote:
>>
>> 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@...iatek.com>
>>> Reviewed-by: CK Hu <ck.hu@...iatek.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
>
> I don't think we need to keep the cmdq_client_reg in cmdq_client
> structure.
> Because our client will have own data structure, they will copy the
> client_reg information into their own structure.
>
> In the design now, we do not allocate the cmdq_client_reg, client pass
> the cmdq_client_reg pointer into this API.
> Client will destroy the pointer after they get the information they
> want.
>
My point wasn't so much about the lifecycle of the object, but the fact that we
add another call, which can be already full-filled by a necessary previous call
to cmdq_mbox_create. So I would prefer to add the information gathering for
cmdq_client_reg in this call, and let it live there for the time cmdq_client
lives. In the end we are talking about 40 bits of memory.
Regards,
Matthias
> Thanks for the comments so much.
>
> Bibby
>
>>
>>> + 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
>>>
>
>
Powered by blists - more mailing lists