* [PATCH] irqchip: vt8500: Switch to a simple write clear for Interrupt Status Register
@ 2014-04-27 15:13 Axel Lin
2014-04-27 18:34 ` Thomas Gleixner
0 siblings, 1 reply; 3+ messages in thread
From: Axel Lin @ 2014-04-27 15:13 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: Tony Prisk, linux-kernel
According to the datasheet, the attribute of Interrupt Status Register is RW0S,
which means:
Software can read the register.
Software can also "write 1 to clear". "write 0" has no effect.
Thus switch the read/modify/write to a simple write clear.
A read/modify/write does not make sense for an irq status register like this,
since otherwise a read/modify/write can race with a device raising an interrupt
and then clear the pending bit unintentionally.
Signed-off-by: Axel Lin <axel.lin@ingics.com>
---
Hi Tony,
I don't have this h/w to test, I'd appreciate if you can review and test this
patch.
Regards,
Axel
drivers/irqchip/irq-vt8500.c | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/drivers/irqchip/irq-vt8500.c b/drivers/irqchip/irq-vt8500.c
index eb6e91e..a0085bc 100644
--- a/drivers/irqchip/irq-vt8500.c
+++ b/drivers/irqchip/irq-vt8500.c
@@ -87,14 +87,10 @@ static void vt8500_irq_mask(struct irq_data *d)
void __iomem *base = priv->base;
void __iomem *stat_reg = base + VT8500_ICIS + (d->hwirq < 32 ? 0 : 4);
u8 edge, dctr;
- u32 status;
edge = readb(base + VT8500_ICDC + d->hwirq) & VT8500_EDGE;
if (edge) {
- status = readl(stat_reg);
-
- status |= (1 << (d->hwirq & 0x1f));
- writel(status, stat_reg);
+ writel(BIT(d->hwirq & 0x1f), stat_reg);
} else {
dctr = readb(base + VT8500_ICDC + d->hwirq);
dctr &= ~VT8500_INT_ENABLE;
--
1.8.3.2
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] irqchip: vt8500: Switch to a simple write clear for Interrupt Status Register
2014-04-27 15:13 [PATCH] irqchip: vt8500: Switch to a simple write clear for Interrupt Status Register Axel Lin
@ 2014-04-27 18:34 ` Thomas Gleixner
2014-04-28 3:34 ` Axel Lin
0 siblings, 1 reply; 3+ messages in thread
From: Thomas Gleixner @ 2014-04-27 18:34 UTC (permalink / raw)
To: Axel Lin; +Cc: Tony Prisk, linux-kernel
On Sun, 27 Apr 2014, Axel Lin wrote:
> According to the datasheet, the attribute of Interrupt Status Register is RW0S,
> which means:
> Software can read the register.
> Software can also "write 1 to clear". "write 0" has no effect.
> Thus switch the read/modify/write to a simple write clear.
>
> A read/modify/write does not make sense for an irq status register like this,
> since otherwise a read/modify/write can race with a device raising an interrupt
> and then clear the pending bit unintentionally.
That's right, but what you are not seeing is that this is the mask
callback which is supposed to mask the interrupt at the interrupt
controller level.
I have a hard time to see (even without reading the data sheet) how
clearing a potentially pending interrupt in the status register will
mask the interrupt line.
Thanks,
tglx
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] irqchip: vt8500: Switch to a simple write clear for Interrupt Status Register
2014-04-27 18:34 ` Thomas Gleixner
@ 2014-04-28 3:34 ` Axel Lin
0 siblings, 0 replies; 3+ messages in thread
From: Axel Lin @ 2014-04-28 3:34 UTC (permalink / raw)
To: Thomas Gleixner; +Cc: Tony Prisk, linux-kernel@vger.kernel.org
2014-04-28 2:34 GMT+08:00 Thomas Gleixner <tglx@linutronix.de>:
> On Sun, 27 Apr 2014, Axel Lin wrote:
>
>> According to the datasheet, the attribute of Interrupt Status Register is RW0S,
>> which means:
>> Software can read the register.
>> Software can also "write 1 to clear". "write 0" has no effect.
>> Thus switch the read/modify/write to a simple write clear.
>>
>> A read/modify/write does not make sense for an irq status register like this,
>> since otherwise a read/modify/write can race with a device raising an interrupt
>> and then clear the pending bit unintentionally.
>
> That's right, but what you are not seeing is that this is the mask
> callback which is supposed to mask the interrupt at the interrupt
> controller level.
>
> I have a hard time to see (even without reading the data sheet) how
> clearing a potentially pending interrupt in the status register will
> mask the interrupt line.
ok, I'll send a v2 to update the commit log.
Thanks for the review.
Regards,
Axel
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2014-04-28 3:34 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-04-27 15:13 [PATCH] irqchip: vt8500: Switch to a simple write clear for Interrupt Status Register Axel Lin
2014-04-27 18:34 ` Thomas Gleixner
2014-04-28 3:34 ` Axel Lin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox