PPC32 8xx MPC880 Linux 2.6 Interrupt storm

Povolotsky, Alexander Alexander.Povolotsky at marconi.com
Wed Feb 23 05:36:48 EST 2005


I have MPC880 based board with 24C02 I2C serial EEPROM
 and I try to run Linux 2.6 on this board.

Originally I had problem:

<3>request_irq() returned -22 for CPM vector 32.

I traced the problem to the following line,
shown below as commented out (by me)
in cpm_iic_init() (drivers/i2c/algos/i2c-algo-8xx.c)

/* (*cpm_adap->setisr)(CPM_IRQ_OFFSET + CPMVEC_I2C, cpm_iic_interrupt,
cpm_int_name[CPMVEC_I2C], (void *)i2c); */
                               ^                             ^
                               |                             |
                               16                           16

It makes the first argument to be 32 (16 + 16) and that was originally
causing error.

This error gets generated actually in request_irq() in kernel/irq/manage.c.

Specifically (I tracked it down with debug print there ) it comes from

if (irq >= NR_IRQS)

return -EINVAL;

Note that NR_IRQS is set to 32 and irq was also 32 as described above
(before my "fix" - see below) .

I have made the "fix" (it's just a kludge, I am not sure where the correct
fix should be
and what is the actual origin of this problem):


(*cpm_adap->setisr)(CPM_IRQ_OFFSET + CPMVEC_I2C - CPM_IRQ_OFFSET,
cpm_iic_interrupt, cpm_int_name[CPMVEC_I2C], (void *)i2c);

                                                  ^^^^^^^^^^^^^^^

I am leaving above line "as is" just for demonstrational purpose: to show
that in the first argument the 
CPM_IRQ_OFFSET is originally added and I am subtracting it back.

This gives:

cpm_iic_init[134] Install ISR for IRQ 16 CPM_IRQ_OFFSET 16

rpx_install_isr: irq: 0x10 <<<=============    This is correct IRQ for I2C
on 8xx

However after this "fix" I see continuos flood of interrupts for IRQ 0x10
(dedicated to I2C on 8xx) in response to polling of 0x50 I2C address 
- should be just one interrupt ...
but actually, the ISR function gets triggered in continuous non-stop flood -
I could see it with the print statement (of course I disabled this print for
the next build ...) so it chokes the processor completely.

Thanks,
Best Regards,
Alex




More information about the Linuxppc-embedded mailing list