Hello,

Thanks for the answer, changes will be made accordingly.

I agree, There were some modifications that were remaining from a previous quick
and dirty attempt and that have nothing to do here.

Thanks,



 Selon Gilles Chanteperdrix <[EMAIL PROTECTED]>:

> garryt wrote:
>  > Hello,
>  >
>  > Please find attached an attempt of mach-imx board support. I have been
> able to
>  > test it with xenomai and could make other tests if needed. Does someone
> else use
>  > this kind of board ? Could any of the mailing list gurus have a quick look
> and
>  > tell if there is something missing /nok ?
>
> Comments follow within the patch.
>
>  >
>  > This have been made with the support of the "Adapting ARM I-pipe patch to
> a new
>  > board." document on the xenomai site, and the already available pxa
> support.
>  > BTW the __ipipe_mach_get_tscinfo is missing in this doc.
>
> Yes, I know, I will add this.
>
>  >
>  > kernel used 2.6.20-12, adeos patch 1.7-03
>
> > diff -aburN ./linux-2.6.20.12-imx1/arch/arm/mach-imx/imx_irq.h
> ./linux-2.6.20.12-ipipe/arch/arm/mach-imx/imx_irq.h
> > --- ./linux-2.6.20.12-imx1/arch/arm/mach-imx/imx_irq.h      1970-01-01
> 01:00:00.000000000 +0100
> > +++ ./linux-2.6.20.12-ipipe/arch/arm/mach-imx/imx_irq.h     2007-06-13
> 12:00:44.000000000 +0200
> > @@ -0,0 +1,80 @@
> > +/*
> > + *  linux/arch/arm/mach-imx/imx_irq.h
> > + *
> > + * Author: [EMAIL PROTECTED]
> > + * Still exprimental
> > + *
> > + * This program is free software; you can redistribute it and/or modify
> > + * it under the terms of the GNU General Public License version 2 as
> > + * published by the Free Software Foundation.
> > + */
> > +#include <asm/arch/irqs.h>
> > +
> > +void __init imx_init_priority(void);
> > +
> > +static unsigned int imx_default_irq_priority[IMX_IRQS] __initdata = {
> > (snip)
> > +   };
> > diff -aburN ./linux-2.6.20.12-imx1/arch/arm/mach-imx/irq.c
> ./linux-2.6.20.12-ipipe/arch/arm/mach-imx/irq.c
> > --- ./linux-2.6.20.12-imx1/arch/arm/mach-imx/irq.c  2007-06-22
> 09:54:30.000000000 +0200
> > +++ ./linux-2.6.20.12-ipipe/arch/arm/mach-imx/irq.c 2007-06-22
> 09:51:38.000000000 +0200
> > @@ -26,12 +26,19 @@
> >  #include <linux/init.h>
> >  #include <linux/list.h>
> >  #include <linux/timer.h>
> > +#include <linux/ipipe.h>
> >
> >  #include <asm/hardware.h>
> >  #include <asm/irq.h>
> >  #include <asm/io.h>
> >
> >  #include <asm/mach/irq.h>
> > +#include <asm/arch/imx-regs.h>
> > +
> > +/* Used for IMX INTERRUPT priority: Still Experimental */
> > +#ifdef CONFIG_IPIPE
> > +#include "imx_irq.h"
> > +#endif
>
> Here, I would put imx_default_irq_priority definition directly in irq.c,
> since it is used only here, there is no reason to put it in a
> header. Besides, imx_irq.h is not a good name, there is already an
> include/asm-arm/mach-imx/irqs.h, what is the difference ?
>
> > (...)
> > -   .set_type = imx_irq_type,
> > +   .set_type = imx_internal_irq_type,
>
> What is the use of this renaming ?
>
> >  };
> >
> >  static struct irq_chip imx_gpio_chip = {
> > @@ -222,6 +229,25 @@
> >     .set_type = imx_gpio_irq_type,
> >  };
> >
> > +#ifdef CONFIG_IPIPE
> > +void __init imx_init_priority(void)
> > +{
> > +        unsigned int irq;
> > +        IMX_PRIO0=0;
> > +        IMX_PRIO1=0;
> > +        IMX_PRIO2=0;
> > +        IMX_PRIO3=0;
> > +        IMX_PRIO4=0;
> > +        IMX_PRIO5=0;
> > +        IMX_PRIO6=0;
> > +        IMX_PRIO7=0;
> > +        printk(KERN_INFO "Initializing imx interrupt priorities\n");
> > +        for (irq = 0; irq < IMX_IRQS; irq++) {
> > +        IMX_PRIO(irq)|=((imx_default_irq_priority[irq]&15)<<((irq%8)*4));
> > +        }
>
> Coding style here. You do not need braces, and the indentation is
> wrong.
>
> > (...)
> > +
> > +#ifdef CONFIG_IPIPE
> > +        imx_timer_initialized = 1;
> > +   tsc = (union tsc_reg *) __ipipe_tsc_area;
> > +        barrier();
>
> The aim of the barrier is to ensure that the "tsc" variable is
> initialized before imx_timer_initialized is set to 1, so that
> ipipe_mach_get_tsc will not dereference an uninitialized pointer.
>
> Besides, tsc emulation in user-space can not work in the CONFIG_SMP
> case, so this should be:
>
> #ifdef CONFIG_SMP
>        tsc = (union tsc_reg *) __ipipe_tsc_area;
>        barrier();
> #endif
>        imx_timer_initialized = 1;
>
> > (...)
> > +void __ipipe_mach_get_tscinfo(struct __ipipe_tscinfo *info)
> > +{
> > +        info->type = IPIPE_TSC_TYPE_FREERUNNING;
> > +        info->u.fr.counter = (unsigned *) (0x10+IMX_TIM1_BASE);
> > +        info->u.fr.mask = 0xffffffff;
> > +        info->u.fr.tsc = &tsc->full;
> > +}
>
> There should be some #ifdef CONFIG_SMP here too.
>
> > (...)
> > +#ifdef CONFIG_IPIPE
> > +#define __ipipe_mach_irq_mux_p(irq) (((irq) == GPIO_INT_PORTA ) || ((irq)
> == GPIO_INT_PORTB  ) || ((irq) == GPIO_INT_PORTC ) || ((irq) ==
> GPIO_INT_PORTD) )
> > +#endif /* CONFIG_IPIPE */
>
> This test should be as fast as possible, so you should test a bit in a
> mask, the way s3c2410 does it. Something like:
>
> #define __ipipe_irqbit(irq) (1ULL << (irq))
>
> #define __ipipe_muxed_irqmask (__ipipe_irqbit(GPIO_INT_PORTA) | \
>                                __ipipe_irqbit(GPIO_INT_PORTB) | \
>                                __ipipe_irqbit(GPIO_INT_PORTC) | \
>                                __ipipe_irqbit(GPIO_INT_PORTD))
>
> #define __ipipe_mach_irq_mux_p(irq) (__ipipe_irqbit(irq) \
>                                      & __ipipe_muxed_irqmask)
>
> --
>
>
>                                           Gilles Chanteperdrix.
>



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

Reply via email to