* [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).