* Paul Walmsley <paul@xxxxxxxxx> [080723 08:11]: > [ This is the second version of these patches - they now check the > SIH_CTRL.COR bit to determine whether to read or write to clear ] > > At boot, twl_init_irq() tries to mask off all TWL4030 secondary > interrupts and clear them, since no secondary interrupt handlers are > registered yet (that happens later in the boot). > > However, this code is flawed. MADC, BCI, keypad, and GPIO ISRs are > either not cleared or are incompletely cleared. Some BCI register > addresses are nonsensical. And some code attempts to clear ISRs > before masking IMRs, which is race-prone (an interrupt could occur > after the ISR clear, but before the mask). > > These problems can cause large numbers of boot messages similar to > this: > > TWL4030 module irq 368 is disabled but can't be masked! > > and I2C transmit overflows, both observed during boot on the > BeagleBoard here. The actual IRQ number sometimes varied depending on > which interrupt was unacknowledged. > > This series fixes these issues and does some code cleanup, saving 272 > bytes. > > Thanks to Philip Balister <philip@xxxxxxxxxxxx>, Koen Kooi > <k.kooi@xxxxxxxxxxxxxxxxxx>, Måns Rullgård <mans@xxxxxxxxx>, Steve > Sakoman <sakoman@xxxxxxxxx> and others on #beagle for help tracing > these problems. > > Thanks also to Peter De Schrijver <peter.de-schrijver@xxxxxxxxx> for > help with this second version, allowing several unnecessary I2C > transactions to be elided from twl_init_irq(). > > Tested on BeagleBoard rev B4 (3530ES2.2). Pushing this series today. Tony > > > - Paul > > --- > > size: > text data bss dec hex filename > 3076157 142840 104248 3323245 32b56d vmlinux.beagle.orig > 3075885 142840 104248 3322973 32b45d vmlinux.beagle > > diffstat: > > drivers/i2c/chips/twl4030-core.c | 383 ++++++++++++++++++++++-------------- > drivers/i2c/chips/twl4030-gpio.c | 48 ----- > drivers/i2c/chips/twl4030-pwrirq.c | 15 + > include/linux/i2c/twl4030-gpio.h | 76 +++++++ > include/linux/i2c/twl4030-pwrirq.h | 37 +++ > 5 files changed, 359 insertions(+), 200 deletions(-) > create mode 100644 include/linux/i2c/twl4030-gpio.h > create mode 100644 include/linux/i2c/twl4030-pwrirq.h > > -- > To unsubscribe from this list: send the line "unsubscribe linux-omap" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html