Gwenhaël wrote:
> On Wed, 25 Feb 2009 14:06:14 +0100, Gilles Chanteperdrix
> <[email protected]> wrote:
>> Gwenhaël wrote:
>>> With i.MXL processor, kernel patched with
>>> adeos-2.6.27-ipipe-1.12-00.patch wait indefinitly for timer
>>> calibration.
>>> Tick event never appear. This patch modify acktimer() in
>>> arch/arm/mach-imx/time.c.
>>>
>>> I need to know if this modification is good (without adding
>>> new errors).
>> ipipe_mach_update_tsc should be called from imx_timer_interrupt, so,
>> there is no need to call it from acktimer (and in fact, avoiding the
>> call to update_tsc in acktimer reduces the timer interrupt latency). So,
>> maybe what is needed and is missing is simply to read
>> IMX_TSTAT(TIMER_BASE) ?
> 
> I've made modifications on patch thanks to your assumption. 
> The new patch work fine.
> 
> Thank you very much
> 
> Gwenhael
> 
> Signed-off-by: [email protected]
> 
> 
> diff -ru a/arch/arm/mach-imx/irq.c b/arch/arm/mach-imx/irq.c
> --- a/arch/arm/mach-imx/irq.c    2009-02-17 11:32:52.000000000 +0100
> +++ b/arch/arm/mach-imx/irq.c       2009-02-23 14:12:43.000000000 +0100
> @@ -35,7 +35,7 @@
>  #include <asm/io.h>
>  
>  #include <asm/mach/irq.h>
> -#include <asm/arch/imx-regs.h>
> +#include <mach/imx-regs.h>
>  
>  
>  /* Used for IMX INTERRUPT priority: Still Experimental */ 
> diff -ru a/arch/arm/mach-imx/time.c b/arch/arm/mach-imx/time.c
> --- a/arch/arm/mach-imx/time.c        2009-02-25 15:10:01.000000000 +0100
> +++ b/arch/arm/mach-imx/time.c        2009-02-25 15:10:49.000000000 +0100
> @@ -89,25 +89,23 @@
>  imx_timer_interrupt(int irq, void *dev_id)
>  {
>       struct clock_event_device *evt = &clockevent_imx;
> -#ifndef CONFIG_IPIPE
>       uint32_t tstat;
>       irqreturn_t ret = IRQ_NONE;
>  
>       /* clear the interrupt */
>       tstat = IMX_TSTAT(TIMER_BASE);
> +#ifndef CONFIG_IPIPE
>       IMX_TSTAT(TIMER_BASE) = 0;
> +#endif
>       if (tstat & TSTAT_COMP) {
> +#ifdef CONFIG_IPIPE
>               ipipe_mach_update_tsc();
> +#endif
>               evt->event_handler(evt);
>               ret = IRQ_HANDLED;
>       }
>  
>       return ret;
> -#else /* CONFIG_IPIPE */
> -     ipipe_mach_update_tsc();
> -     evt->event_handler(evt);
> -     return  IRQ_HANDLED;
> -#endif /* CONFIG_IPIPE */
>  }
>  
>  static struct irqaction imx_timer_irq = {

No, that is still wrong. You should read IMX_TSTAT(TIMER_BASE) in
acktimer not in linux timer interrupt. When running with xenomai, the
linux timer interrupt is a virtual interrupt and should not touch hardware.

-- 
                                                 Gilles.


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

Reply via email to