qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Fwd: trigger a gpio interrupt inside qemu


From: she roy
Subject: Re: [Qemu-devel] Fwd: trigger a gpio interrupt inside qemu
Date: Wed, 28 Aug 2013 16:19:32 +0800

PL061 has a register GPIOIS to control if the interrupt is lever-triggered or edge-triggered, I will try this. Thanks.


2013/8/28 Max Filippov <address@hidden>
On Wed, Aug 28, 2013 at 12:01 PM, she roy <address@hidden> wrote:
> I tested   qemu_irq_pulse(gPl061->irq); the guest did not generate an
> interrupt. so I changed to
>
> qemu_set_irq(gPl061->irq, 1);
> sleep(1);
> qemu_set_irq(gPl061->irq, 0);
>
> A lot of interrupts generated. Is it possible to generate just one
> interrupt?

This looks like level-triggered interrupt behaviour. In such cases
interrupt handler
in the device driver is usually responsible for disabling IRQ line
while processing
interrupt. You can add a register to your device, writing to which would call

qemu_set_irq(gPl061->irq, 0)

and write to that register from your driver's ISR.
Or you can choose an edge-triggered IRQ to play with.

> 2013/8/27 Max Filippov <address@hidden>
>>
>> On Tue, Aug 27, 2013 at 3:55 PM, she roy <address@hidden> wrote:
>> > How to lower it? Thank you very much!
>> >
>>
>> qemu_set_irq(gPl061->irq, 0);
>>
>> Or you could try
>>
>> void pl061_raise_irq()
>> {
>>    qemu_irq_pulse(gPl061->irq);
>> }
>>
>> > 2013/8/27 Max Filippov <address@hidden>
>> >>
>> >> On Tue, Aug 27, 2013 at 3:36 PM, she roy <address@hidden> wrote:
>> >> > Is there somebody can help me to trigger a gpio interrupt inside
>> >> > qemu? I
>> >> > wrote a simple function to trigger a interrupt in pl061.c as follow:
>> >> > PL061State *gPl061;
>> >> > void pl061_raise_irq()
>> >> > {
>> >> >     qemu_set_irq(gPl061->irq, 1);
>> >> > }
>> >>
>> >> [...]
>> >>
>> >> > But when i call pl061_raise_irq inside qemu once, the guest run into
>> >> > an
>> >> > infinite loop. it prints:
>> >> > ...
>> >> > irq:[927012]receive the irq at -12002...
>> >> > irq:[927013]receive the irq at -12002...
>> >> > irq:[927014]receive the irq at -12002...
>> >> > irq:[927015]receive the irq at -12002...
>> >> > irq:[927016]receive the irq at -12002...
>> >> > irq:[927017]receive the irq at -12002...
>> >> > irq:[927018]receive the irq at -12002...
>> >> > ...
>> >> > can somebody tell me what's wrong?
>> >>
>> >> You have raised IRQ in your pl061_raise_irq(), but you haven't lowered
>> >> it.

--
Thanks.
-- Max


reply via email to

[Prev in Thread] Current Thread [Next in Thread]