mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-17 18:56:24 +00:00
firmware: imx: scu-irq: add imx_scu_irq_get_status
Extract the scu irq get status code from imx_scu_irq_work_handler and make into a new function imx_scu_irq_get_status which could be used by others, such as SECO. Signed-off-by: Peng Fan <peng.fan@nxp.com> Signed-off-by: Shawn Guo <shawnguo@kernel.org>
This commit is contained in:
parent
19a72e0cb0
commit
d2bd250cef
@ -1,6 +1,6 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0+
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
/*
|
/*
|
||||||
* Copyright 2019 NXP
|
* Copyright 2019,2023 NXP
|
||||||
*
|
*
|
||||||
* Implementation of the SCU IRQ functions using MU.
|
* Implementation of the SCU IRQ functions using MU.
|
||||||
*
|
*
|
||||||
@ -66,29 +66,18 @@ static int imx_scu_irq_notifier_call_chain(unsigned long status, u8 *group)
|
|||||||
|
|
||||||
static void imx_scu_irq_work_handler(struct work_struct *work)
|
static void imx_scu_irq_work_handler(struct work_struct *work)
|
||||||
{
|
{
|
||||||
struct imx_sc_msg_irq_get_status msg;
|
|
||||||
struct imx_sc_rpc_msg *hdr = &msg.hdr;
|
|
||||||
u32 irq_status;
|
u32 irq_status;
|
||||||
int ret;
|
int ret;
|
||||||
u8 i;
|
u8 i;
|
||||||
|
|
||||||
for (i = 0; i < IMX_SC_IRQ_NUM_GROUP; i++) {
|
for (i = 0; i < IMX_SC_IRQ_NUM_GROUP; i++) {
|
||||||
hdr->ver = IMX_SC_RPC_VERSION;
|
ret = imx_scu_irq_get_status(i, &irq_status);
|
||||||
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 = i;
|
|
||||||
|
|
||||||
ret = imx_scu_call_rpc(imx_sc_irq_ipc_handle, &msg, true);
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
pr_err("get irq group %d status failed, ret %d\n",
|
pr_err("get irq group %d status failed, ret %d\n",
|
||||||
i, ret);
|
i, ret);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
irq_status = msg.data.resp.status;
|
|
||||||
if (!irq_status)
|
if (!irq_status)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -97,6 +86,31 @@ static void imx_scu_irq_work_handler(struct work_struct *work)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
int imx_scu_irq_group_enable(u8 group, u32 mask, u8 enable)
|
||||||
{
|
{
|
||||||
struct imx_sc_msg_irq_enable msg;
|
struct imx_sc_msg_irq_enable msg;
|
||||||
|
@ -21,6 +21,7 @@ int imx_scu_enable_general_irq_channel(struct device *dev);
|
|||||||
int imx_scu_irq_register_notifier(struct notifier_block *nb);
|
int imx_scu_irq_register_notifier(struct notifier_block *nb);
|
||||||
int imx_scu_irq_unregister_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_irq_group_enable(u8 group, u32 mask, u8 enable);
|
||||||
|
int imx_scu_irq_get_status(u8 group, u32 *irq_status);
|
||||||
int imx_scu_soc_init(struct device *dev);
|
int imx_scu_soc_init(struct device *dev);
|
||||||
#else
|
#else
|
||||||
static inline int imx_scu_soc_init(struct device *dev)
|
static inline int imx_scu_soc_init(struct device *dev)
|
||||||
@ -47,5 +48,10 @@ static inline int imx_scu_irq_group_enable(u8 group, u32 mask, u8 enable)
|
|||||||
{
|
{
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int imx_scu_irq_get_status(u8 group, u32 *irq_status)
|
||||||
|
{
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif /* _SC_SCI_H */
|
#endif /* _SC_SCI_H */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user