lkml.org 
[lkml]   [2020]   [Oct]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRE: [PATCH v2 2/5] firmware: imx: scu-irq: Add API to retrieve status of IRQ
    Date
    > From: Franck Lenormand (OSS) <franck.lenormand@oss.nxp.com>
    > Sent: Tuesday, July 21, 2020 11:21 PM
    >
    > This patch adds the API to retrieve the status of an IRQ.
    >
    > It also adds values used to process SECVIO IRQ from the SCU.
    >
    > Signed-off-by: Franck LENORMAND <franck.lenormand@oss.nxp.com>
    > ---
    > drivers/firmware/imx/imx-scu-irq.c | 37
    > ++++++++++++++++++++++++++++++++++++-
    > include/linux/firmware/imx/sci.h | 4 ++++
    > 2 files changed, 40 insertions(+), 1 deletion(-)
    >
    > diff --git a/drivers/firmware/imx/imx-scu-irq.c
    > b/drivers/firmware/imx/imx-scu-irq.c
    > index d9dcc20..d31d600 100644
    > --- a/drivers/firmware/imx/imx-scu-irq.c
    > +++ b/drivers/firmware/imx/imx-scu-irq.c
    > @@ -1,6 +1,6 @@
    > // SPDX-License-Identifier: GPL-2.0+
    > /*
    > - * Copyright 2019 NXP
    > + * Copyright 2019-2020 NXP
    > *
    > * Implementation of the SCU IRQ functions using MU.
    > *
    > @@ -97,6 +97,41 @@ static void imx_scu_irq_work_handler(struct
    > work_struct *work)
    > }
    > }
    >
    > +/**
    > + * imx_scu_irq_get_status() - Get the status of the IRQs of a group

    This API is a little duplicated with the exist imx_scu_irq_work_handler.
    Can we refactor the exist code into this API?

    Regards
    Aisheng

    > + *
    > + * @group: The group of IRQ to retrieve status
    > + * @irq_status: Status of the IRQs retrieved
    > + *
    > + * Return:
    > + * 0 - OK
    > + * < 0 - error.
    > + */
    > +int imx_scu_irq_get_status(u8 group, u32 *irq_status) {
    > + struct imx_sc_msg_irq_get_status msg;
    > + struct imx_sc_rpc_msg *hdr = &msg.hdr;
    > + int ret;
    > +
    > + hdr->ver = IMX_SC_RPC_VERSION;
    > + hdr->svc = IMX_SC_RPC_SVC_IRQ;
    > + hdr->func = IMX_SC_IRQ_FUNC_STATUS;
    > + hdr->size = 2;
    > +
    > + msg.data.req.resource = mu_resource_id;
    > + msg.data.req.group = group;
    > +
    > + ret = imx_scu_call_rpc(imx_sc_irq_ipc_handle, &msg, true);
    > + if (ret)
    > + return ret;
    > +
    > + if (irq_status)
    > + *irq_status = msg.data.resp.status;
    > +
    > + return 0;
    > +}
    > +EXPORT_SYMBOL(imx_scu_irq_get_status);
    > +
    > int imx_scu_irq_group_enable(u8 group, u32 mask, u8 enable) {
    > struct imx_sc_msg_irq_enable msg;
    > diff --git a/include/linux/firmware/imx/sci.h b/include/linux/firmware/imx/sci.h
    > index 914dce1..20a16a7 100644
    > --- a/include/linux/firmware/imx/sci.h
    > +++ b/include/linux/firmware/imx/sci.h
    > @@ -17,9 +17,13 @@
    > #include <linux/firmware/imx/svc/rm.h>
    > #include <linux/firmware/imx/svc/seco.h>
    >
    > +#define IMX_SC_IRQ_GROUP_WAKE 3U /* Wakeup interrupts */
    > +#define IMX_SC_IRQ_SECVIO BIT(6) /* Security violation */
    > +
    > int imx_scu_enable_general_irq_channel(struct device *dev); int
    > imx_scu_irq_register_notifier(struct notifier_block *nb); int
    > imx_scu_irq_unregister_notifier(struct notifier_block *nb); int
    > imx_scu_irq_group_enable(u8 group, u32 mask, u8 enable); int
    > imx_scu_soc_init(struct device *dev);
    > +int imx_scu_irq_get_status(u8 group, u32 *irq_status);
    > #endif /* _SC_SCI_H */
    > --
    > 2.7.4

    \
     
     \ /
      Last update: 2020-10-18 06:49    [W:4.734 / U:0.188 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site