garryt wrote:
> Hello,
> 
> I am in working on the port of adeos ipipe on my board which is basically an
> IMX1 ARM 920 architecture with 2.6.20 linux kernel.  This board is quite 
> simple
> and first results seems good.
> 
> I had a look to the document "Adapting ARM I-Pipe patch to a new board"
> 
> But i encountered a problem with the __ipipe_mach_demux_irq function.
> multiplexed ITs are GPIOA B C and D which generate respectively IRQs 11, 12 13
> and 62.
> The only GPIO i used currently is the interrupt from DM9000 module. First 
> time i
> put interface up it loops in the handler since it does not seem to be acked
> correctly ...
> I use:
> 
> kernel 2.6.20-12
> adeos patch adeos-ipipe-2.6.20-arm-1.7-02.patch
> 
> Here is the code i added:
> 
> #ifdef CONFIG_IPIPE
> void __ipipe_mach_demux_irq(unsigned irq, struct pt_regs *regs)
> {
>         struct irq_desc *desc_unused = irq_desc + irq;
>         unsigned irq_unused = irq;
>         unsigned int i, mask;
> 
>         /* GPPIOA, GPIOB, GPIOC, GPIOD are INT 11,12,13 and 62 */
>         i=((irq&7)-3);
> 
>         /* Get all multiplexed ITs from given GPIO */
>         mask=ISR(i);
>         irq=(i<<5)+IMX_IRQS;
>         do {
>         if (mask & 1 )
>                 {__ipipe_handle_irq(irq, regs);
>                  // Ack multiplexed IT from given GPIO
>                  ISR(i)=1<<(irq&0x1f);
>                  }
>            mask >>=1;
>            irq++;
>            } while (mask);
> 
>         desc_unused->chip->unmask(irq_unused);
> }
> #endif /* CONFIG_IPIPE */
> 
> 
> 
> I then changed the type of interrupt with set_irq_type from TRIGGER_LOW to
> FALLING and everything's ok now, interface working good now.
> 
> My question is what about TRIGGER_LOW interrupt, i though __ipipe_handle_irq
> looked for all registered domains and called the hanbler and ack functions for
> these domains.
> So since the DM9000 module was working good when i used the kernel whitout
> CONFIG_IPIPE, I though the linux domain acked the interrupt correctly with
> TRIGGER_LOW...
> At most it should be acked by writing to ISR.
> 
> Any help will be greatly appreciated...

To solve this issue, try to know what happens when running Linux which
does not happen with the I-pipe. Maybe what is missing is just a
desc_unused->chip->ack(irq_unused) at the beginning of
__ipipe_mach_demux_irq, at91 has it (but the original function had it too).

-- 
                                                 Gilles Chanteperdrix

_______________________________________________
Adeos-main mailing list
[email protected]
https://mail.gna.org/listinfo/adeos-main

Reply via email to