Re: [PATCH v3 06/16] irqchip: add sl28cpld interrupt controller support

From: Michael Walle
Date: Mon Apr 27 2020 - 13:40:19 EST


Hi Thomas,

thanks for the review.

Am 2020-04-27 13:40, schrieb Thomas Gleixner:
Michael Walle <michael@xxxxxxxx> writes:

This patch adds support for the interrupt controller inside the sl28

git grep 'This patch' Documentation/process/

ok.


CPLD management controller.

+static int sl28cpld_intc_probe(struct platform_device *pdev)
+{
+ struct sl28cpld_intc *irqchip;
+ struct resource *res;
+ unsigned int irq;
+ int ret;
+
+ if (!pdev->dev.parent)
+ return -ENODEV;
+
+ irqchip = devm_kzalloc(&pdev->dev, sizeof(*irqchip), GFP_KERNEL);
+ if (!irqchip)
+ return -ENOMEM;
+
+ irqchip->regmap = dev_get_regmap(pdev->dev.parent, NULL);
+ if (!irqchip->regmap)
+ return -ENODEV;
+
+ irq = platform_get_irq(pdev, 0);
+ if (irq < 0)
+ return irq;
+
+ res = platform_get_resource(pdev, IORESOURCE_REG, 0);
+ if (!res)
+ return -EINVAL;
+
+ irqchip->chip.name = "sl28cpld-intc";
+ irqchip->chip.irqs = sl28cpld_irqs;
+ irqchip->chip.num_irqs = ARRAY_SIZE(sl28cpld_irqs);
+ irqchip->chip.num_regs = 1;
+ irqchip->chip.status_base = res->start + INTC_IP;
+ irqchip->chip.mask_base = res->start + INTC_IE;
+ irqchip->chip.mask_invert = true,
+ irqchip->chip.ack_base = res->start + INTC_IP;
+
+ ret = devm_regmap_add_irq_chip(&pdev->dev, irqchip->regmap, irq,
+ IRQF_SHARED | IRQF_ONESHOT, 0,

What's the point of IRQF_SHARED | IRQF_ONESHOT here?

IRQF_SHARED because this interrupt is shared with all the blocks
which can generate interrupts, i.e. the GPIO contollers.

IRQF_ONESHOT, because its is a threaded interrupt with no primary
handler. But I just noticed, that regmap-irq will also set the
IRQF_ONESHOT. But that the commit 09cadf6e088b ("regmap-irq:
set IRQF_ONESHOT flag to ensure IRQ request") reads like it is
just there to be sure. So I don't know if it should also be set
here.

-michael


+ &irqchip->chip, &irqchip->irq_data);

Thanks,

tglx