Re: [seL4] ARM timer driver and interrupts

2017-02-28 Thread Wladislav Wiebe
gt;>> tick .. 1367513 ns
>>> >>>  keystone_get_time: 168: kt->hw->intctlstat 0x1
>>> >>> tick .. 743185 ns
>>> >>>  keystone_get_time: 168: kt->hw->intctlstat 0x3
>>> >>> ..
>>> >>>  keystone_handle_irq: 177: kt->hw->intctlstat current status  0x3
>>> >>>   (called manually by sel4_timer_handle_single_irq)
>>> >>>  keystone_handle_irq: 179: kt->hw->intctlstat clear 0x1
>>> >>>  keystone_get_time: 168: kt->hw->intctlstat 0x1
>>> >>> tick .. 17540752 ns
>>> >>>  keystone_get_time: 168: kt->hw->intctlstat 0x1
>>> >>> ..
>>> >>>  keystone_get_time: 168: kt->hw->intctlstat 0x3
>>> >>> tick .. 1056723 ns
>>> >>>  keystone_get_time: 168: kt->hw->intctlstat 0x3
>>> >>> tick .. 2371025 ns
>>> >>>  keystone_get_time: 168: kt->hw->intctlstat 0x3
>>> >>> tick .. 3685205 ns
>>> >>> --
>>> >>> and stays forever in wait_for_timer_interrupt.
>>> >>>
>>> >>> I also wonder about a short flood of messages before the testsuite 
>>> >>> starts:
>>> >>> ---
>>> >>> _allocman_utspace_alloc@allocman.c:301 Regular utspace alloc failed
>>> >>> and not watermark for size 13 type 0
>>> >>> vka_alloc_object_at@object.h:57 Failed to allocate object of size 8192, 
>>> >>> error 1
>>> >>> ---
>>> >>> But I guess this shouldn't have impact to the interrupts, right?
>>> >>>
>>> >>>
>>> >>> Thanks in advance!
>>> >>> - Wladi
>>> >>>
>>> >>> 2017-02-22 1:32 GMT+01:00  <alexander.k...@data61.csiro.au>:
>>> >>> > Hi Wladi,
>>> >>> >
>>> >>> > If the problem is with your driver, the problem could be in your
>>> >>> > management of the INTCTLSTAT register (Chapter 5.10).
>>> >>> >
>>> >>> > 1) ARM devices tend to only support 32bit read/write
>>> >>> > 2) Check that the interrupt enable flag is set before returning from
>>> >>> > your timer set up code.
>>> >>> > 3) The status bits must be written as 1 to clear. If interrupts are 
>>> >>> > edge
>>> >>> > triggered, failing to clear this bit (by writing a 1 to it) will stop
>>> >>> > interrupts from coming in.
>>> >>> > 4) Check that your code that clears the interrupt status bit does not
>>> >>> > clear the enable bit.
>>> >>> >
>>> >>> >  - Alex Kroh
>>> >>> >
>>> >>> >
>>> >>> > On Tue, 2017-02-21 at 23:17 +, anna.ly...@data61.csiro.au wrote:
>>> >>> >> Hey,
>>> >>> >>
>>> >>> >> First I'd check if the kernel is getting the interrupts in the 
>>> >>> >> kernel from this timer - you can put a printf in handleInterrupt in 
>>> >>> >> the kernel to see if this is the case and see if the correct 
>>> >>> >> interrupt number comes in.
>>> >>> >>
>>> >>> >> If so,  then check if those irqs are being sent to the signal 
>>> >>> >> handler and not reserved (again by printing / asserting in handle 
>>> >>> >> interrupt).
>>> >>> >>
>>> >>> >> If not, this points to a problem with your driver.
>>> >>> >>
>>> >>> >> Hope this pushes you in the right direction,
>>> >>> >> Anna.
>>> >>> >>
>>> >>> >> -Original Message-
>>> >>> >> From: Devel [mailto:devel-bounces@sel4.systems] On Behalf Of 
>>> >>> >> Wladislav Wiebe
>>> >>> >> Sent: Wednesday, 22 February 2017 10:05 AM
>>> >>> >> To: devel@sel4.systems
>>> >>> >> Subject: [seL4] ARM timer driver and interrupts
>>> >>> >>
>>> >>> >> Hello,
>>> >>> >>
>>> >>> >> I wrote a new timer driver for this timer device:
>>> >>> >> http://www.ti.com/lit/ug/sprugv5a/sprugv5a.pdf
>>> >>> >>
>>> >>> >> I am already able to run the seL4 testsuite successfully, except the 
>>> >>> >> interrupt/timer tests.
>>> >>> >> It waits forever @ wait_for_timer_interrupt(env);
>>> >>> >>
>>> >>> >> I've uploaded the driver temporary to:
>>> >>> >> https://github.com/wwladikw/devel/blob/master/timer.c
>>> >>> >>
>>> >>> >> Any idea what could be wrong?
>>> >>> >> I am able to run the timer periodically or as oneshot.
>>> >>> >> The gic_390 interrupt driver in the kernel should also be compatible 
>>> >>> >> with the gic_400, for my understanding, right?
>>> >>> >> The SoC I am using contains a Coretex A15.
>>> >>> >>
>>> >>> >> Thanks a lot in advance!
>>> >>> >> Wladislav Wiebe
>>> >>> >>
>>> >>> >> ___
>>> >>> >> Devel mailing list
>>> >>> >> Devel@sel4.systems
>>> >>> >> https://sel4.systems/lists/listinfo/devel
>>> >>> >>
>>> >>> >> ___
>>> >>> >> Devel mailing list
>>> >>> >> Devel@sel4.systems
>>> >>> >> https://sel4.systems/lists/listinfo/devel
>>> >>> >
>>> >>>
>>> >>>
>>> >>>
>>> >>
>>> >
>>> >
>>> >
>>> > --
>>> > WBR, Wladislav WIebe
>>>
>>>
>>>
>>
>
>
>
> --
> WBR, Wladislav WIebe



-- 
WBR, Wladislav WIebe

___
Devel mailing list
Devel@sel4.systems
https://sel4.systems/lists/listinfo/devel


Re: [seL4] ARM timer driver and interrupts

2017-02-21 Thread Alexander.Kroh
Hi Wladi,

If the problem is with your driver, the problem could be in your
management of the INTCTLSTAT register (Chapter 5.10).

1) ARM devices tend to only support 32bit read/write
2) Check that the interrupt enable flag is set before returning from
your timer set up code.
3) The status bits must be written as 1 to clear. If interrupts are edge
triggered, failing to clear this bit (by writing a 1 to it) will stop
interrupts from coming in.
4) Check that your code that clears the interrupt status bit does not
clear the enable bit.

 - Alex Kroh


On Tue, 2017-02-21 at 23:17 +, anna.ly...@data61.csiro.au wrote:
> Hey, 
> 
> First I'd check if the kernel is getting the interrupts in the kernel from 
> this timer - you can put a printf in handleInterrupt in the kernel to see if 
> this is the case and see if the correct interrupt number comes in.
> 
> If so,  then check if those irqs are being sent to the signal handler and not 
> reserved (again by printing / asserting in handle interrupt).
> 
> If not, this points to a problem with your driver.
> 
> Hope this pushes you in the right direction,
> Anna. 
> 
> -Original Message-
> From: Devel [mailto:devel-bounces@sel4.systems] On Behalf Of Wladislav Wiebe
> Sent: Wednesday, 22 February 2017 10:05 AM
> To: devel@sel4.systems
> Subject: [seL4] ARM timer driver and interrupts
> 
> Hello,
> 
> I wrote a new timer driver for this timer device:
> http://www.ti.com/lit/ug/sprugv5a/sprugv5a.pdf
> 
> I am already able to run the seL4 testsuite successfully, except the 
> interrupt/timer tests.
> It waits forever @ wait_for_timer_interrupt(env);
> 
> I've uploaded the driver temporary to:
> https://github.com/wwladikw/devel/blob/master/timer.c
> 
> Any idea what could be wrong?
> I am able to run the timer periodically or as oneshot.
> The gic_390 interrupt driver in the kernel should also be compatible with the 
> gic_400, for my understanding, right?
> The SoC I am using contains a Coretex A15.
> 
> Thanks a lot in advance!
> Wladislav Wiebe
> 
> ___
> Devel mailing list
> Devel@sel4.systems
> https://sel4.systems/lists/listinfo/devel
> 
> ___
> Devel mailing list
> Devel@sel4.systems
> https://sel4.systems/lists/listinfo/devel

___
Devel mailing list
Devel@sel4.systems
https://sel4.systems/lists/listinfo/devel