* [PATCH 2/4] mfd: update irq handler in max8925 @ 2010-01-25 11:08 Haojian Zhuang 2010-01-25 11:59 ` Mark Brown 0 siblings, 1 reply; 9+ messages in thread From: Haojian Zhuang @ 2010-01-25 11:08 UTC (permalink / raw) To: linux-arm-kernel ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/4] mfd: update irq handler in max8925 2010-01-25 11:08 [PATCH 2/4] mfd: update irq handler in max8925 Haojian Zhuang @ 2010-01-25 11:59 ` Mark Brown 2010-01-26 3:12 ` Haojian Zhuang 0 siblings, 1 reply; 9+ messages in thread From: Mark Brown @ 2010-01-25 11:59 UTC (permalink / raw) To: linux-arm-kernel On Mon, Jan 25, 2010 at 06:08:19AM -0500, Haojian Zhuang wrote: > +static struct resource power_supply_resources[] = { > + { > + .name = "max8925-power", > + .start = MAX8925_CHG_IRQ1, > + .end = MAX8925_CHG_IRQ1, > + .flags = IORESOURCE_IO, These should be IORESOURCE_IRQ. > + else if (value & irq_data->offs) { > + dev_err(chip->dev, "Noboday cares IRQ #%d. Mask it\n", > + chip->irq_base + i); > + max8925_set_bits(i2c, irq_data->mask_reg, > + irq_data->offs, irq_data->offs); genirq ought to be handling this for you? > + for (i = 0; i < ARRAY_SIZE(max8925_irqs); i++) { > + irq_data = &max8925_irqs[i]; > + /* non TSC IRQ should be serviced in max8925_irq() */ > + if (!irq_data->tsc_irq) > + continue; Shouldn't the interrupt handlers be able to avoid having to iterate through the array? It's unlikely to be expensive in the context of the I/O but it looks a bit odd. > + * clear_irq: operation on clearing status of nIRQ pin in platform > + * clear_tsc_irq: operation on clearing status of nTIRQ pin in platform > + */ Shouldn't these also be handled by genirq as functions of the interrupt controller that the chip is chained from? ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/4] mfd: update irq handler in max8925 2010-01-25 11:59 ` Mark Brown @ 2010-01-26 3:12 ` Haojian Zhuang 2010-01-26 3:14 ` Haojian Zhuang 2010-01-26 11:28 ` Mark Brown 0 siblings, 2 replies; 9+ messages in thread From: Haojian Zhuang @ 2010-01-26 3:12 UTC (permalink / raw) To: linux-arm-kernel On Mon, Jan 25, 2010 at 6:59 AM, Mark Brown <broonie@opensource.wolfsonmicro.com> wrote: > On Mon, Jan 25, 2010 at 06:08:19AM -0500, Haojian Zhuang wrote: > >> +static struct resource power_supply_resources[] = { >> + ? ? { >> + ? ? ? ? ? ? .name ? = "max8925-power", >> + ? ? ? ? ? ? .start ?= MAX8925_CHG_IRQ1, >> + ? ? ? ? ? ? .end ? ?= MAX8925_CHG_IRQ1, >> + ? ? ? ? ? ? .flags ?= IORESOURCE_IO, > > These should be IORESOURCE_IRQ. > Now I changed .start and .end. I only need declare IO resources. >> + ? ? ? ? ? ? else if (value & irq_data->offs) { >> + ? ? ? ? ? ? ? ? ? ? dev_err(chip->dev, "Noboday cares IRQ #%d. Mask it\n", >> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? chip->irq_base + i); >> + ? ? ? ? ? ? ? ? ? ? max8925_set_bits(i2c, irq_data->mask_reg, >> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? irq_data->offs, irq_data->offs); > > genirq ought to be handling this for you? > No, genirq doesn't know this. I let the thread_fn to take this job. >> + ? ? for (i = 0; i < ARRAY_SIZE(max8925_irqs); i++) { >> + ? ? ? ? ? ? irq_data = &max8925_irqs[i]; >> + ? ? ? ? ? ? /* non TSC IRQ should be serviced in max8925_irq() */ >> + ? ? ? ? ? ? if (!irq_data->tsc_irq) >> + ? ? ? ? ? ? ? ? ? ? continue; > > Shouldn't the interrupt handlers be able to avoid having to iterate > through the array? ?It's unlikely to be expensive in the context of the > I/O but it looks a bit odd. > There're multiple IRQ & IRQ_MASK registers. If I use bitmap at here, I would use more code on composing it. Since some bits are not defined in IRQ, I need to take care on it. If I use array at here, the code is clean and simple. Although it looks a bit odd. >> + * clear_irq: operation on clearing status of nIRQ pin in platform >> + * clear_tsc_irq: operation on clearing status of nTIRQ pin in platform >> + */ > > Shouldn't these also be handled by genirq as functions of the interrupt > controller that the chip is chained from? > Because PMIC IRQ is connected to the special pin of CPU. CPU needs to clear pin status in external. genirq shouldn't take care on it. I have to use this ugly way to clear pin status. Thanks Haojian -------------- next part -------------- A non-text attachment was scrubbed... Name: 0002-mfd-update-irq-handler-in-max8925.patch Type: text/x-patch Size: 29093 bytes Desc: not available URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20100125/98120427/attachment-0001.bin> ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/4] mfd: update irq handler in max8925 2010-01-26 3:12 ` Haojian Zhuang @ 2010-01-26 3:14 ` Haojian Zhuang 2010-01-26 11:28 ` Mark Brown 1 sibling, 0 replies; 9+ messages in thread From: Haojian Zhuang @ 2010-01-26 3:14 UTC (permalink / raw) To: linux-arm-kernel On Mon, Jan 25, 2010 at 10:12 PM, Haojian Zhuang <haojian.zhuang@gmail.com> wrote: > On Mon, Jan 25, 2010 at 6:59 AM, Mark Brown > <broonie@opensource.wolfsonmicro.com> wrote: >> On Mon, Jan 25, 2010 at 06:08:19AM -0500, Haojian Zhuang wrote: >> >>> +static struct resource power_supply_resources[] = { >>> + ? ? { >>> + ? ? ? ? ? ? .name ? = "max8925-power", >>> + ? ? ? ? ? ? .start ?= MAX8925_CHG_IRQ1, >>> + ? ? ? ? ? ? .end ? ?= MAX8925_CHG_IRQ1, >>> + ? ? ? ? ? ? .flags ?= IORESOURCE_IO, >> >> These should be IORESOURCE_IRQ. >> > Now I changed .start and .end. I only need declare IO resources. > >>> + ? ? ? ? ? ? else if (value & irq_data->offs) { >>> + ? ? ? ? ? ? ? ? ? ? dev_err(chip->dev, "Noboday cares IRQ #%d. Mask it\n", >>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? chip->irq_base + i); >>> + ? ? ? ? ? ? ? ? ? ? max8925_set_bits(i2c, irq_data->mask_reg, >>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? irq_data->offs, irq_data->offs); >> >> genirq ought to be handling this for you? >> > No, genirq doesn't know this. I let the thread_fn to take this job. > >>> + ? ? for (i = 0; i < ARRAY_SIZE(max8925_irqs); i++) { >>> + ? ? ? ? ? ? irq_data = &max8925_irqs[i]; >>> + ? ? ? ? ? ? /* non TSC IRQ should be serviced in max8925_irq() */ >>> + ? ? ? ? ? ? if (!irq_data->tsc_irq) >>> + ? ? ? ? ? ? ? ? ? ? continue; >> >> Shouldn't the interrupt handlers be able to avoid having to iterate >> through the array? ?It's unlikely to be expensive in the context of the >> I/O but it looks a bit odd. >> > There're multiple IRQ & IRQ_MASK registers. If I use bitmap at here, I > would use more code on composing it. Since some bits are not defined > in IRQ, I need to take care on it. If I use array at here, the code is > clean and simple. Although it looks a bit odd. > >>> + * clear_irq: operation on clearing status of nIRQ pin in platform >>> + * clear_tsc_irq: operation on clearing status of nTIRQ pin in platform >>> + */ >> >> Shouldn't these also be handled by genirq as functions of the interrupt >> controller that the chip is chained from? >> > Because PMIC IRQ is connected to the special pin of CPU. CPU needs to > clear pin status in external. genirq shouldn't take care on it. I have > to use this ugly way to clear pin status. > > Thanks > Haojian > Update the patch now. -------------- next part -------------- A non-text attachment was scrubbed... Name: 0002-mfd-update-irq-handler-in-max8925.patch Type: text/x-patch Size: 29103 bytes Desc: not available URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20100125/31cf6460/attachment-0001.bin> ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/4] mfd: update irq handler in max8925 2010-01-26 3:12 ` Haojian Zhuang 2010-01-26 3:14 ` Haojian Zhuang @ 2010-01-26 11:28 ` Mark Brown 2010-01-26 11:31 ` Haojian Zhuang 1 sibling, 1 reply; 9+ messages in thread From: Mark Brown @ 2010-01-26 11:28 UTC (permalink / raw) To: linux-arm-kernel On Mon, Jan 25, 2010 at 10:12:39PM -0500, Haojian Zhuang wrote: > On Mon, Jan 25, 2010 at 6:59 AM, Mark Brown > > On Mon, Jan 25, 2010 at 06:08:19AM -0500, Haojian Zhuang wrote: > >> + ? ? ? ? ? ? else if (value & irq_data->offs) { > >> + ? ? ? ? ? ? ? ? ? ? dev_err(chip->dev, "Noboday cares IRQ #%d. Mask it\n", > >> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? chip->irq_base + i); > >> + ? ? ? ? ? ? ? ? ? ? max8925_set_bits(i2c, irq_data->mask_reg, > >> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? irq_data->offs, irq_data->offs); > > genirq ought to be handling this for you? > No, genirq doesn't know this. I let the thread_fn to take this job. This suggests that something is wrong somewhere else - genirq will normally warn if an interrupt is reported without being handled which looks like what this code is trying to achieve. Looking at the patch I expect you should just be able to drop the test you're doing immediately before the quoted code to see if the interrupt is enabled and call handle_nested_irq() unconditionally, genirq should generate a warning and mask the IRQ if it's not handled which is what your code here is doing. > >> + * clear_irq: operation on clearing status of nIRQ pin in platform > >> + * clear_tsc_irq: operation on clearing status of nTIRQ pin in platform > >> + */ > > Shouldn't these also be handled by genirq as functions of the interrupt > > controller that the chip is chained from? > Because PMIC IRQ is connected to the special pin of CPU. CPU needs to > clear pin status in external. genirq shouldn't take care on it. I have > to use this ugly way to clear pin status. I would expect this to be handled by the special pin on the CPU being an irq_chip, or by having the existing interrupt controller handle this pin properly. The need to ack is going to be there for anything that ends up hanging off this special IRQ, isn't it? ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/4] mfd: update irq handler in max8925 2010-01-26 11:28 ` Mark Brown @ 2010-01-26 11:31 ` Haojian Zhuang 2010-01-26 12:06 ` Mark Brown 0 siblings, 1 reply; 9+ messages in thread From: Haojian Zhuang @ 2010-01-26 11:31 UTC (permalink / raw) To: linux-arm-kernel On Tue, Jan 26, 2010 at 6:28 AM, Mark Brown <broonie@opensource.wolfsonmicro.com> wrote: > On Mon, Jan 25, 2010 at 10:12:39PM -0500, Haojian Zhuang wrote: >> On Mon, Jan 25, 2010 at 6:59 AM, Mark Brown >> > On Mon, Jan 25, 2010 at 06:08:19AM -0500, Haojian Zhuang wrote: > >> >> + ? ? ? ? ? ? else if (value & irq_data->offs) { >> >> + ? ? ? ? ? ? ? ? ? ? dev_err(chip->dev, "Noboday cares IRQ #%d. Mask it\n", >> >> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? chip->irq_base + i); >> >> + ? ? ? ? ? ? ? ? ? ? max8925_set_bits(i2c, irq_data->mask_reg, >> >> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? irq_data->offs, irq_data->offs); > >> > genirq ought to be handling this for you? > >> No, genirq doesn't know this. I let the thread_fn to take this job. > > This suggests that something is wrong somewhere else - genirq will > normally warn if an interrupt is reported without being handled which > looks like what this code is trying to achieve. ?Looking at the patch > I expect you should just be able to drop the test you're doing > immediately before the quoted code to see if the interrupt is enabled > and call handle_nested_irq() unconditionally, genirq should generate a > warning and mask the IRQ if it's not handled which is what your code > here is doing. > Actually I can't find genirq reports any warning. I only find my code reports warning message. >> >> + * clear_irq: operation on clearing status of nIRQ pin in platform >> >> + * clear_tsc_irq: operation on clearing status of nTIRQ pin in platform >> >> + */ > >> > Shouldn't these also be handled by genirq as functions of the interrupt >> > controller that the chip is chained from? > >> Because PMIC IRQ is connected to the special pin of CPU. CPU needs to >> clear pin status in external. genirq shouldn't take care on it. I have >> to use this ugly way to clear pin status. > > I would expect this to be handled by the special pin on the CPU being an > irq_chip, or by having the existing interrupt controller handle this pin > properly. ?The need to ack is going to be there for anything that ends > up hanging off this special IRQ, isn't it? > Em. it's OK. I'll do it. ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/4] mfd: update irq handler in max8925 2010-01-26 11:31 ` Haojian Zhuang @ 2010-01-26 12:06 ` Mark Brown 2010-01-27 6:02 ` Haojian Zhuang 0 siblings, 1 reply; 9+ messages in thread From: Mark Brown @ 2010-01-26 12:06 UTC (permalink / raw) To: linux-arm-kernel On Tue, Jan 26, 2010 at 06:31:56AM -0500, Haojian Zhuang wrote: > On Tue, Jan 26, 2010 at 6:28 AM, Mark Brown > > and call handle_nested_irq() unconditionally, genirq should generate a > > warning and mask the IRQ if it's not handled which is what your code > > here is doing. > Actually I can't find genirq reports any warning. I only find my code > reports warning message. There's a threashold before the warning starts displaying, IIRC. In any case, the handling of spurious IRQs isn't really an IRQ controller driver issue - it's a generic issue that affects all interrupt controllers. ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/4] mfd: update irq handler in max8925 2010-01-26 12:06 ` Mark Brown @ 2010-01-27 6:02 ` Haojian Zhuang 2010-01-27 11:12 ` Mark Brown 0 siblings, 1 reply; 9+ messages in thread From: Haojian Zhuang @ 2010-01-27 6:02 UTC (permalink / raw) To: linux-arm-kernel On Tue, Jan 26, 2010 at 7:06 AM, Mark Brown <broonie@opensource.wolfsonmicro.com> wrote: > On Tue, Jan 26, 2010 at 06:31:56AM -0500, Haojian Zhuang wrote: >> On Tue, Jan 26, 2010 at 6:28 AM, Mark Brown > >> > and call handle_nested_irq() unconditionally, genirq should generate a >> > warning and mask the IRQ if it's not handled which is what your code >> > here is doing. > >> Actually I can't find genirq reports any warning. I only find my code >> reports warning message. > > There's a threashold before the warning starts displaying, IIRC. ?In any > case, the handling of spurious IRQs isn't really an IRQ controller > driver issue - it's a generic issue that affects all interrupt > controllers. > Thanks a lot. Updated patch is attached in mail. Now the modification is in below. 1. remove clear_irq() & clear_tsc_irq(). 2. remove warning message in max8925_irq(). Best Regards Haojian -------------- next part -------------- A non-text attachment was scrubbed... Name: 0002-mfd-update-irq-handler-in-max8925.patch Type: text/x-patch Size: 28146 bytes Desc: not available URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20100127/645e8444/attachment-0001.bin> ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 2/4] mfd: update irq handler in max8925 2010-01-27 6:02 ` Haojian Zhuang @ 2010-01-27 11:12 ` Mark Brown 0 siblings, 0 replies; 9+ messages in thread From: Mark Brown @ 2010-01-27 11:12 UTC (permalink / raw) To: linux-arm-kernel On Wed, Jan 27, 2010 at 01:02:09AM -0500, Haojian Zhuang wrote: > Updated patch is attached in mail. Now the modification is in below. > 1. remove clear_irq() & clear_tsc_irq(). > 2. remove warning message in max8925_irq(). This looks OK for me - for what it's worth Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com> ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2010-01-27 11:12 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-01-25 11:08 [PATCH 2/4] mfd: update irq handler in max8925 Haojian Zhuang 2010-01-25 11:59 ` Mark Brown 2010-01-26 3:12 ` Haojian Zhuang 2010-01-26 3:14 ` Haojian Zhuang 2010-01-26 11:28 ` Mark Brown 2010-01-26 11:31 ` Haojian Zhuang 2010-01-26 12:06 ` Mark Brown 2010-01-27 6:02 ` Haojian Zhuang 2010-01-27 11:12 ` Mark Brown
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).