Hi, Mark:
Sorry to trouble you, I have a question about the interrupt handling
of regmap framework;
in the regmap_irq_thread(), from the following code, we only handle
the unmasked interrupt;
256 data->status_buf[i] &= ~data->mask_buf[i];
but in the following sequence, irq storm will happen;
do you think we should do a change here to handle all the interrupt here?
thanks very much;
1) interrupt is triggered;
2) a thread disables it(then the mask bit is set);
3) _Then_ the interrupt thread is executed, it _ignore _ and doesn’t
handle this interrupt;
because the interrupt is not ACKed, the interrupt status is not cleared;
4) in Marvell's PMIC, the interrupt line to SOC is always asserted,
then irq storm happens;
------------------------
Yi Zhang
On Sat, Oct 12, 2013 at 11:14:27AM +0800, yi zhang wrote:
> 1) interrupt is triggered;
> 2) a thread disables it(then the mask bit is set);
> 3) _Then_ the interrupt thread is executed, it _ignore _ and doesn’t
> handle this interrupt;
> because the interrupt is not ACKed, the interrupt status is not cleared;
> 4) in Marvell's PMIC, the interrupt line to SOC is always asserted,
> then irq storm happens;
This sounds like you need the workaround activated by init_ack_masked.
It's basically the hardware failing to implement masking sensibly - the
general expectation for a mask bit is that it will have no effect on the
actual state of the interrupt, only on if it's reported.
2013/10/12 Mark Brown <[email protected]>:
> On Sat, Oct 12, 2013 at 11:14:27AM +0800, yi zhang wrote:
>
>> 1) interrupt is triggered;
>> 2) a thread disables it(then the mask bit is set);
>> 3) _Then_ the interrupt thread is executed, it _ignore _ and doesn’t
>> handle this interrupt;
>> because the interrupt is not ACKed, the interrupt status is not cleared;
>> 4) in Marvell's PMIC, the interrupt line to SOC is always asserted,
>> then irq storm happens;
>
> This sounds like you need the workaround activated by init_ack_masked.
> It's basically the hardware failing to implement masking sensibly - the
> general expectation for a mask bit is that it will have no effect on the
> actual state of the interrupt, only on if it's reported.
Thanks Mark;
As I understand it, this "init_ack_masked" is used in initialization
(please correct me if I'm wrong);
but if the sequence above happens not in the initialization, then what
should we do to handle this?
could you please give us advice?
thanks very much;
On Sat, Oct 12, 2013 at 08:50:57PM +0800, yi zhang wrote:
> As I understand it, this "init_ack_masked" is used in initialization
> (please correct me if I'm wrong);
> but if the sequence above happens not in the initialization, then what
> should we do to handle this?
> could you please give us advice?
Just do the same thing during masking.