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

Michael Walle
2020-04-27T17:40:18Z

Hi Thomas,

thanks for the review.

Am 2020-04-27 13:40, schrieb Thomas Gleixner:
> Michael Walle <michael@walle.cc> 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