Re: [PATCH v7 1/2] mfd: loongson-se: Add multi-node support
From: Lee Jones
Date: Wed Sep 23 2026 - 12:41:33 EST
On Fri, 11 Sep 2026, Qunqin Zhao wrote:
> From: Qunqin Zhao <zhaoqunqin@xxxxxxxxxxx>
>
> On the Loongson platform, each node is equipped with a security engine
> device. However, due to a hardware flaw, only the device on node 0 can
> trigger interrupts. Therefore, interrupts from other nodes are forwarded
> by node 0. We need to check in the interrupt handler of node 0 whether
> this interrupt is intended for other nodes, this can be accomplished via
> shared interrupt handling.
>
> Signed-off-by: Qunqin Zhao <zhaoqunqin@xxxxxxxxxxx>
> ---
> drivers/mfd/loongson-se.c | 15 +++++++++++----
> 1 file changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/mfd/loongson-se.c b/drivers/mfd/loongson-se.c
> index 3902ba377..7f552a8ee 100644
> --- a/drivers/mfd/loongson-se.c
> +++ b/drivers/mfd/loongson-se.c
> @@ -140,6 +140,11 @@ static irqreturn_t se_irq_handler(int irq, void *dev_id)
>
> int_status = readl(se->base + SE_S2LINT_STAT);
>
Nit: Checks should follow immediately from the call that allocated them.
Thus, remove this empty line please.
> + if (int_status == 0) {
> + spin_unlock(&se->dev_lock);
> + return IRQ_NONE;
> + }
> +
> /* For controller */
> if (int_status & SE_INT_CONTROLLER) {
> complete(&se->cmd_completion);
> @@ -211,24 +216,26 @@ static int loongson_se_probe(struct platform_device *pdev)
> if (IS_ERR(se->base))
> return PTR_ERR(se->base);
>
> - writel(SE_INT_ALL, se->base + SE_S2LINT_EN);
> -
> nr_irq = platform_irq_count(pdev);
> if (nr_irq <= 0)
> return -ENODEV;
>
> + writel(SE_INT_ALL, se->base + SE_S2LINT_CL);
> +
> for (i = 0; i < nr_irq; i++) {
> irq = platform_get_irq(pdev, i);
> - err = devm_request_irq(dev, irq, se_irq_handler, 0, "loongson-se", se);
> + err = devm_request_irq(dev, irq, se_irq_handler, IRQF_SHARED, "loongson-se", se);
> if (err)
> dev_err(dev, "failed to request IRQ: %d\n", irq);
> }
>
> + writel(SE_INT_ALL, se->base + SE_S2LINT_EN);
> +
> err = loongson_se_init(se, paddr, se->dmam_size);
> if (err)
> return err;
>
> - return devm_mfd_add_devices(dev, PLATFORM_DEVID_NONE, engines,
> + return devm_mfd_add_devices(dev, PLATFORM_DEVID_AUTO, engines,
> ARRAY_SIZE(engines), NULL, 0, NULL);
> }
>
> --
> 2.47.2
>
--
Lee Jones