Message ID | 1583664775-19382-14-git-send-email-dennis-yc.hsieh@mediatek.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | support gce on mt6779 platform | expand |
On 08/03/2020 11:52, Dennis YC Hsieh wrote: > Add set event function in cmdq helper functions to set specific event. > > 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 | 15 +++++++++++++++ > include/linux/mailbox/mtk-cmdq-mailbox.h | 1 + > include/linux/soc/mediatek/mtk-cmdq.h | 9 +++++++++ > 3 files changed, 25 insertions(+) > > diff --git a/drivers/soc/mediatek/mtk-cmdq-helper.c b/drivers/soc/mediatek/mtk-cmdq-helper.c > index ec5637d43254..3294c9285994 100644 > --- a/drivers/soc/mediatek/mtk-cmdq-helper.c > +++ b/drivers/soc/mediatek/mtk-cmdq-helper.c > @@ -327,6 +327,21 @@ int cmdq_pkt_clear_event(struct cmdq_pkt *pkt, u16 event) > } > EXPORT_SYMBOL(cmdq_pkt_clear_event); > > +int cmdq_pkt_set_event(struct cmdq_pkt *pkt, u16 event) > +{ > + struct cmdq_instruction inst = { {0} }; > + > + if (event >= CMDQ_MAX_EVENT) > + return -EINVAL; > + > + inst.op = CMDQ_CODE_WFE; > + inst.value = CMDQ_WFE_UPDATE | CMDQ_WFE_UPDATE_VALUE; > + inst.event = event; > + > + return cmdq_pkt_append_command(pkt, inst); > +} > +EXPORT_SYMBOL(cmdq_pkt_set_event); > + > int cmdq_pkt_poll(struct cmdq_pkt *pkt, u8 subsys, > u16 offset, u32 value) > { > diff --git a/include/linux/mailbox/mtk-cmdq-mailbox.h b/include/linux/mailbox/mtk-cmdq-mailbox.h > index 42d2a30e6a70..ba2d811183a9 100644 > --- a/include/linux/mailbox/mtk-cmdq-mailbox.h > +++ b/include/linux/mailbox/mtk-cmdq-mailbox.h > @@ -17,6 +17,7 @@ > #define CMDQ_JUMP_PASS CMDQ_INST_SIZE > > #define CMDQ_WFE_UPDATE BIT(31) > +#define CMDQ_WFE_UPDATE_VALUE BIT(16) > #define CMDQ_WFE_WAIT BIT(15) > #define CMDQ_WFE_WAIT_VALUE 0x1 > > diff --git a/include/linux/soc/mediatek/mtk-cmdq.h b/include/linux/soc/mediatek/mtk-cmdq.h > index d63749440697..ca70296ae120 100644 > --- a/include/linux/soc/mediatek/mtk-cmdq.h > +++ b/include/linux/soc/mediatek/mtk-cmdq.h > @@ -168,6 +168,15 @@ int cmdq_pkt_wfe(struct cmdq_pkt *pkt, u16 event, bool clear); > */ > int cmdq_pkt_clear_event(struct cmdq_pkt *pkt, u16 event); > > +/** > + * cmdq_pkt_set_event() - append set event command to the CMDQ packet > + * @pkt: the CMDQ packet > + * @event: the desired event to be set Can we add the events and their code, so that later on, when a consumer calls cmdq_pkt_set_event() we don't have any magic values that are hard to understand? Regards, Matthias > + * > + * Return: 0 for success; else the error code is returned > + */ > +int cmdq_pkt_set_event(struct cmdq_pkt *pkt, u16 event); > + > /** > * cmdq_pkt_poll() - Append polling command to the CMDQ packet, ask GCE to > * execute an instruction that wait for a specified >
Hi Matthias, Thanks for your comment. On Sat, 2020-05-16 at 20:32 +0200, Matthias Brugger wrote: > > On 08/03/2020 11:52, Dennis YC Hsieh wrote: > > Add set event function in cmdq helper functions to set specific event. > > > > 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 | 15 +++++++++++++++ > > include/linux/mailbox/mtk-cmdq-mailbox.h | 1 + > > include/linux/soc/mediatek/mtk-cmdq.h | 9 +++++++++ > > 3 files changed, 25 insertions(+) > > > > diff --git a/drivers/soc/mediatek/mtk-cmdq-helper.c b/drivers/soc/mediatek/mtk-cmdq-helper.c > > index ec5637d43254..3294c9285994 100644 > > --- a/drivers/soc/mediatek/mtk-cmdq-helper.c > > +++ b/drivers/soc/mediatek/mtk-cmdq-helper.c > > @@ -327,6 +327,21 @@ int cmdq_pkt_clear_event(struct cmdq_pkt *pkt, u16 event) > > } > > EXPORT_SYMBOL(cmdq_pkt_clear_event); > > > > +int cmdq_pkt_set_event(struct cmdq_pkt *pkt, u16 event) > > +{ > > + struct cmdq_instruction inst = { {0} }; > > + > > + if (event >= CMDQ_MAX_EVENT) > > + return -EINVAL; > > + > > + inst.op = CMDQ_CODE_WFE; > > + inst.value = CMDQ_WFE_UPDATE | CMDQ_WFE_UPDATE_VALUE; > > + inst.event = event; > > + > > + return cmdq_pkt_append_command(pkt, inst); > > +} > > +EXPORT_SYMBOL(cmdq_pkt_set_event); > > + > > int cmdq_pkt_poll(struct cmdq_pkt *pkt, u8 subsys, > > u16 offset, u32 value) > > { > > diff --git a/include/linux/mailbox/mtk-cmdq-mailbox.h b/include/linux/mailbox/mtk-cmdq-mailbox.h > > index 42d2a30e6a70..ba2d811183a9 100644 > > --- a/include/linux/mailbox/mtk-cmdq-mailbox.h > > +++ b/include/linux/mailbox/mtk-cmdq-mailbox.h > > @@ -17,6 +17,7 @@ > > #define CMDQ_JUMP_PASS CMDQ_INST_SIZE > > > > #define CMDQ_WFE_UPDATE BIT(31) > > +#define CMDQ_WFE_UPDATE_VALUE BIT(16) > > #define CMDQ_WFE_WAIT BIT(15) > > #define CMDQ_WFE_WAIT_VALUE 0x1 > > > > diff --git a/include/linux/soc/mediatek/mtk-cmdq.h b/include/linux/soc/mediatek/mtk-cmdq.h > > index d63749440697..ca70296ae120 100644 > > --- a/include/linux/soc/mediatek/mtk-cmdq.h > > +++ b/include/linux/soc/mediatek/mtk-cmdq.h > > @@ -168,6 +168,15 @@ int cmdq_pkt_wfe(struct cmdq_pkt *pkt, u16 event, bool clear); > > */ > > int cmdq_pkt_clear_event(struct cmdq_pkt *pkt, u16 event); > > > > +/** > > + * cmdq_pkt_set_event() - append set event command to the CMDQ packet > > + * @pkt: the CMDQ packet > > + * @event: the desired event to be set > > Can we add the events and their code, so that later on, when a consumer calls > cmdq_pkt_set_event() we don't have any magic values that are hard to understand? Please see patch 02/13: http://lists.infradead.org/pipermail/linux-mediatek/2020-March/027801.html Definitions begin with CMDQ_EVENT_ is the event id to this function. Since the event id is different between platform, client must parse it from device tree. So no magic values require when call this function. Regard, Dennis > > Regards, > Matthias > > > + * > > + * Return: 0 for success; else the error code is returned > > + */ > > +int cmdq_pkt_set_event(struct cmdq_pkt *pkt, u16 event); > > + > > /** > > * cmdq_pkt_poll() - Append polling command to the CMDQ packet, ask GCE to > > * execute an instruction that wait for a specified > >
On 24/05/2020 19:39, Dennis-YC Hsieh wrote: > Hi Matthias, > > Thanks for your comment. > > > On Sat, 2020-05-16 at 20:32 +0200, Matthias Brugger wrote: >> >> On 08/03/2020 11:52, Dennis YC Hsieh wrote: >>> Add set event function in cmdq helper functions to set specific event. >>> >>> 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 | 15 +++++++++++++++ >>> include/linux/mailbox/mtk-cmdq-mailbox.h | 1 + >>> include/linux/soc/mediatek/mtk-cmdq.h | 9 +++++++++ >>> 3 files changed, 25 insertions(+) >>> >>> diff --git a/drivers/soc/mediatek/mtk-cmdq-helper.c b/drivers/soc/mediatek/mtk-cmdq-helper.c >>> index ec5637d43254..3294c9285994 100644 >>> --- a/drivers/soc/mediatek/mtk-cmdq-helper.c >>> +++ b/drivers/soc/mediatek/mtk-cmdq-helper.c >>> @@ -327,6 +327,21 @@ int cmdq_pkt_clear_event(struct cmdq_pkt *pkt, u16 event) >>> } >>> EXPORT_SYMBOL(cmdq_pkt_clear_event); >>> >>> +int cmdq_pkt_set_event(struct cmdq_pkt *pkt, u16 event) >>> +{ >>> + struct cmdq_instruction inst = { {0} }; >>> + >>> + if (event >= CMDQ_MAX_EVENT) >>> + return -EINVAL; >>> + >>> + inst.op = CMDQ_CODE_WFE; >>> + inst.value = CMDQ_WFE_UPDATE | CMDQ_WFE_UPDATE_VALUE; >>> + inst.event = event; >>> + >>> + return cmdq_pkt_append_command(pkt, inst); >>> +} >>> +EXPORT_SYMBOL(cmdq_pkt_set_event); >>> + >>> int cmdq_pkt_poll(struct cmdq_pkt *pkt, u8 subsys, >>> u16 offset, u32 value) >>> { >>> diff --git a/include/linux/mailbox/mtk-cmdq-mailbox.h b/include/linux/mailbox/mtk-cmdq-mailbox.h >>> index 42d2a30e6a70..ba2d811183a9 100644 >>> --- a/include/linux/mailbox/mtk-cmdq-mailbox.h >>> +++ b/include/linux/mailbox/mtk-cmdq-mailbox.h >>> @@ -17,6 +17,7 @@ >>> #define CMDQ_JUMP_PASS CMDQ_INST_SIZE >>> >>> #define CMDQ_WFE_UPDATE BIT(31) >>> +#define CMDQ_WFE_UPDATE_VALUE BIT(16) >>> #define CMDQ_WFE_WAIT BIT(15) >>> #define CMDQ_WFE_WAIT_VALUE 0x1 >>> >>> diff --git a/include/linux/soc/mediatek/mtk-cmdq.h b/include/linux/soc/mediatek/mtk-cmdq.h >>> index d63749440697..ca70296ae120 100644 >>> --- a/include/linux/soc/mediatek/mtk-cmdq.h >>> +++ b/include/linux/soc/mediatek/mtk-cmdq.h >>> @@ -168,6 +168,15 @@ int cmdq_pkt_wfe(struct cmdq_pkt *pkt, u16 event, bool clear); >>> */ >>> int cmdq_pkt_clear_event(struct cmdq_pkt *pkt, u16 event); >>> >>> +/** >>> + * cmdq_pkt_set_event() - append set event command to the CMDQ packet >>> + * @pkt: the CMDQ packet >>> + * @event: the desired event to be set >> >> Can we add the events and their code, so that later on, when a consumer calls >> cmdq_pkt_set_event() we don't have any magic values that are hard to understand? > > Please see patch 02/13: > http://lists.infradead.org/pipermail/linux-mediatek/2020-March/027801.html > > Definitions begin with CMDQ_EVENT_ is the event id to this function. > Since the event id is different between platform, client must parse it > from device tree. So no magic values require when call this function. > > Got it, thanks for clarification. Matthias
diff --git a/drivers/soc/mediatek/mtk-cmdq-helper.c b/drivers/soc/mediatek/mtk-cmdq-helper.c index ec5637d43254..3294c9285994 100644 --- a/drivers/soc/mediatek/mtk-cmdq-helper.c +++ b/drivers/soc/mediatek/mtk-cmdq-helper.c @@ -327,6 +327,21 @@ int cmdq_pkt_clear_event(struct cmdq_pkt *pkt, u16 event) } EXPORT_SYMBOL(cmdq_pkt_clear_event); +int cmdq_pkt_set_event(struct cmdq_pkt *pkt, u16 event) +{ + struct cmdq_instruction inst = { {0} }; + + if (event >= CMDQ_MAX_EVENT) + return -EINVAL; + + inst.op = CMDQ_CODE_WFE; + inst.value = CMDQ_WFE_UPDATE | CMDQ_WFE_UPDATE_VALUE; + inst.event = event; + + return cmdq_pkt_append_command(pkt, inst); +} +EXPORT_SYMBOL(cmdq_pkt_set_event); + int cmdq_pkt_poll(struct cmdq_pkt *pkt, u8 subsys, u16 offset, u32 value) { diff --git a/include/linux/mailbox/mtk-cmdq-mailbox.h b/include/linux/mailbox/mtk-cmdq-mailbox.h index 42d2a30e6a70..ba2d811183a9 100644 --- a/include/linux/mailbox/mtk-cmdq-mailbox.h +++ b/include/linux/mailbox/mtk-cmdq-mailbox.h @@ -17,6 +17,7 @@ #define CMDQ_JUMP_PASS CMDQ_INST_SIZE #define CMDQ_WFE_UPDATE BIT(31) +#define CMDQ_WFE_UPDATE_VALUE BIT(16) #define CMDQ_WFE_WAIT BIT(15) #define CMDQ_WFE_WAIT_VALUE 0x1 diff --git a/include/linux/soc/mediatek/mtk-cmdq.h b/include/linux/soc/mediatek/mtk-cmdq.h index d63749440697..ca70296ae120 100644 --- a/include/linux/soc/mediatek/mtk-cmdq.h +++ b/include/linux/soc/mediatek/mtk-cmdq.h @@ -168,6 +168,15 @@ int cmdq_pkt_wfe(struct cmdq_pkt *pkt, u16 event, bool clear); */ int cmdq_pkt_clear_event(struct cmdq_pkt *pkt, u16 event); +/** + * cmdq_pkt_set_event() - append set event command to the CMDQ packet + * @pkt: the CMDQ packet + * @event: the desired event to be set + * + * Return: 0 for success; else the error code is returned + */ +int cmdq_pkt_set_event(struct cmdq_pkt *pkt, u16 event); + /** * cmdq_pkt_poll() - Append polling command to the CMDQ packet, ask GCE to * execute an instruction that wait for a specified