2007/4/17, Gilles Chanteperdrix <[EMAIL PROTECTED]>:
> Gilles Chanteperdrix wrote:
> > Gregory CLEMENT wrote:
> > > Maybe we can try to make a diff between
> > > at91 patched kernel +adeos patch and at91 patched kernel + our patch ?
> > > But with this solution we have to made some modification on adeos
> > > patch for applying it on at91 patched kernel.
> > >
> > > Last solution is to attach the file modified.
> >
> > diff between adeos patched kernel + at91 patch and your patched tree.
> > But nevermind, I will do the diff myself.
>
> Ok. Attached the diff I wanted. A few comments are inlined.
My answer are following.
>
>
> > diff -b -x '.git*' -x '*.orig' -x '*.rej' -x '*~' -Naurdp
> > ipipe-2.6-at91/arch/arm/mach-at91rm9200/Kconfig
> > ipipe-at91-sam/arch/arm/mach-at91rm9200/Kconfig
> > --- ipipe-2.6-at91/arch/arm/mach-at91rm9200/Kconfig 2007-04-17
> > 23:04:17.000000000 +0200
> > +++ ipipe-at91-sam/arch/arm/mach-at91rm9200/Kconfig 2007-04-17
> > 23:12:41.000000000 +0200
> > @@ -84,24 +84,6 @@ config MACH_KAFA
> > help
> > Select this if you are using Sperry-Sun's KAFA board.
> >
> > -config IPIPE_AT91_TC
> > - depends on IPIPE
> > - int "AT91 TC used as time base"
> > - default 0
> > - help
> > - When Adeos interrupt pipeline is enabled, TC0 is used by default
> > - as time base, but you can use TC1 or TC2 by setting this variable to 1
> > - or 2. This should only be needed to avoid conflicts with other
> > drivers.
> > -
> > -config IPIPE_AT91_MCK
> > - depends on IPIPE
> > - int "AT91 Master clock Frequency"
> > - default 46080000
> > - help
> > - When Adeos interrupt pipeline is enabled, AT91 timer is based on
> > - the AT91 master clock, whose frequency need hence to be known at
> > - compilation time.
> > -
> > endif
> >
> > # ----------------------------------------------------------
> > @@ -136,6 +118,34 @@ endif
> >
> > # ----------------------------------------------------------
> >
> > +if ARCH_AT91SAM9261 || ARCH_AT91RM9200
>
> What is the purpose of this if ? I mean, if the user selected IPIPE and
> AT91, he probably wants to see the following settings, if some
> combination is not supported, please add an explicit notice instead of
> silently hiding the options.
Ok, first we'll add some comment.
Then we will test it on AT91SAM9260 as it should work without change.
(...)
> > --- ipipe-2.6-at91/include/asm-arm/arch-at91rm9200/hardware.h 2007-04-17
> > 23:08:38.000000000 +0200
> > +++ ipipe-at91-sam/include/asm-arm/arch-at91rm9200/hardware.h 2007-04-17
> > 23:12:41.000000000 +0200
> > @@ -42,9 +42,27 @@
> > * Virtual to Physical Address mapping for IO devices.
> > */
> > #define AT91_VA_BASE_SYS AT91_IO_P2V(AT91_BASE_SYS)
> > -#define AT91_VA_BASE_EMAC AT91_IO_P2V(AT91RM9200_BASE_EMAC)
> > +
> > +#if defined(CONFIG_ARCH_AT91RM9200)
> > + #define AT91_VA_BASE_EMAC AT91_IO_P2V(AT91RM9200_BASE_EMAC)
> > +#elif defined(CONFIG_ARCH_AT91SAM9260)
> > + #define AT91_VA_BASE_EMAC AT91_IO_P2V(AT91SAM9260_BASE_EMAC)
> > +#elif defined(CONFIG_ARCH_AT91SAM9261)
> > + #define AT91_VA_BASE_EMAC AT91_IO_P2V(AT91SAM9261_BASE_EMAC)
> > +#else
> > +#error "Unsupported AT91 processor"
> > +#endif
>
> What is this ?
First it has nothing to do with adeos.
Then the use of AT91_VA_BASE_EMAC misunderstood, and there is no point
to do this. You can remove this.
>
>
> > +
> > #ifdef CONFIG_IPIPE
> > -#define AT91_VA_BASE_TCB0 AT91_IO_P2V(AT91RM9200_BASE_TCB0)
> > +#if defined(CONFIG_ARCH_AT91RM9200)
> > + #define AT91_VA_BASE_TCB0 AT91_IO_P2V(AT91RM9200_BASE_TCB0)
> > +#elif defined(CONFIG_ARCH_AT91SAM9260)
> > + #define AT91_VA_BASE_TCB0 AT91_IO_P2V(AT91SAM9260_BASE_TCB0)
> > +#elif defined(CONFIG_ARCH_AT91SAM9261)
> > + #define AT91_VA_BASE_TCB0 AT91_IO_P2V(AT91SAM9261_BASE_TCB0)
> > +#else
> > +#error "Unsupported AT91 processor"
> > +#endif
> > #endif /* CONFIG_IPIPE */
>
> To reduce the ifdef hell, can not we define a unique AT91_BASE_TCB0 ?
Sure it would be better, but unfortunately the mainteners of AT91
choose to produce a define per architecture even if the register are
the same.
We keep this line :
#define AT91_VA_BASE_TCB0 AT91_IO_P2V(AT91RM9200_BASE_TCB0)
and it will work I don't like having an AT91RM9200 define for chip
which are not AT91RM9200. It adds confusion.
We also could define AT91_BASE_TCB0 as you suggest, but it mean we add
a new register definition just for ipipe and it adds a little
confusion also.
Choose the solution you prefer, or an other if you have a better idea.
>
> >
> > /* Internal SRAM is mapped below the IO devices */
> > diff -b -x '.git*' -x '*.orig' -x '*.rej' -x '*~' -Naurdp
> > ipipe-2.6-at91/include/asm-arm/arch-at91rm9200/irqs.h
> > ipipe-at91-sam/include/asm-arm/arch-at91rm9200/irqs.h
> > --- ipipe-2.6-at91/include/asm-arm/arch-at91rm9200/irqs.h 2007-04-17
> > 23:04:18.000000000 +0200
> > +++ ipipe-at91-sam/include/asm-arm/arch-at91rm9200/irqs.h 2007-04-17
> > 23:12:41.000000000 +0200
> > @@ -44,8 +44,19 @@
> > #if defined(CONFIG_IPIPE) && !defined(__ASSEMBLY__)
> > extern unsigned __ipipe_at91_gpio_banks;
> >
> > -#define __ipipe_mach_irq_mux_p(irq) \
> > +#if defined(CONFIG_ARCH_AT91RM9200)
> > + #define __ipipe_mach_irq_mux_p(irq) \
> > ((unsigned) (irq - AT91RM9200_ID_PIOA) < __ipipe_at91_gpio_banks)
> > +#elif defined(CONFIG_ARCH_AT91SAM9260)
> > + #define __ipipe_mach_irq_mux_p(irq) \
> > + ((unsigned) (irq - AT91SAM9260_ID_PIOA) <
> > __ipipe_at91_gpio_banks)
> > +#elif defined(CONFIG_ARCH_AT91SAM9261)
> > + #define __ipipe_mach_irq_mux_p(irq) \
> > + ((unsigned) (irq - AT91SAM9261_ID_PIOA) <
> > __ipipe_at91_gpio_banks)
> > +#else
> > +#error "Unsupported AT91 processor"
> > +#endif
>
> Ditto with a common AT91_ID_PIOA here.
>
See before.
(...)
2007-04-17 23:12:41.000000000 +0200
> > @@ -23,10 +23,13 @@
> >
> > #include <asm/hardware.h>
> >
> > -#ifndef CONFIG_IPIPE
> > #if defined(CONFIG_ARCH_AT91RM9200)
> >
> > +#ifndef CONFIG_IPIPE
> > #define CLOCK_TICK_RATE (AT91_SLOW_CLOCK)
> > +#else /* !CONFIG_IPIPE */
> > +#define CLOCK_TICK_RATE (CONFIG_IPIPE_AT91_MCK / 32)
> > +#endif /* !CONFIG_IPIPE */
> >
> > #elif defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9261)
> >
> > @@ -35,8 +38,4 @@
> >
> > #endif
> >
> > -#else /* !CONFIG_IPIPE */
> > -#define CLOCK_TICK_RATE (CONFIG_IPIPE_AT91_MCK / 32)
> > -#endif /* !CONFIG_IPIPE */
> > -
> > #endif
>
> I think you got CLOCK_TICK_RATE wrong here. It should be
> CONFIG_IPIPE_AT91_MCK / 32 as soon as I-pipe is enabled whatever ARCH is
> selected.
Right, we will change this.
>
> --
>
>
> Gilles Chanteperdrix.
>
> diff -b -x '.git*' -x '*.orig' -x '*.rej' -x '*~' -Naurdp
> ipipe-2.6-at91/arch/arm/mach-at91rm9200/Kconfig
> ipipe-at91-sam/arch/arm/mach-at91rm9200/Kconfig
> --- ipipe-2.6-at91/arch/arm/mach-at91rm9200/Kconfig 2007-04-17
> 23:04:17.000000000 +0200
> +++ ipipe-at91-sam/arch/arm/mach-at91rm9200/Kconfig 2007-04-17
> 23:12:41.000000000 +0200
> @@ -84,24 +84,6 @@ config MACH_KAFA
> help
> Select this if you are using Sperry-Sun's KAFA board.
>
> -config IPIPE_AT91_TC
> - depends on IPIPE
> - int "AT91 TC used as time base"
> - default 0
> - help
> - When Adeos interrupt pipeline is enabled, TC0 is used by default
> - as time base, but you can use TC1 or TC2 by setting this variable to 1
> - or 2. This should only be needed to avoid conflicts with other
> drivers.
> -
> -config IPIPE_AT91_MCK
> - depends on IPIPE
> - int "AT91 Master clock Frequency"
> - default 46080000
> - help
> - When Adeos interrupt pipeline is enabled, AT91 timer is based on
> - the AT91 master clock, whose frequency need hence to be known at
> - compilation time.
> -
> endif
>
> # ----------------------------------------------------------
> @@ -136,6 +118,34 @@ endif
>
> # ----------------------------------------------------------
>
> +if ARCH_AT91SAM9261 || ARCH_AT91RM9200
> +
> +comment "Ipipe dependent"
> +
> +config IPIPE_AT91_TC
> + depends on IPIPE
> + int "AT91 TC used as time base"
> + default 0
> + help
> + When Adeos interrupt pipeline is enabled, TC0 is used by default
> + as time base, but you can use TC1 or TC2 by setting this variable to 1
> + or 2. This should only be needed to avoid conflicts with other
> drivers.
> +
> +config IPIPE_AT91_MCK
> + depends on IPIPE
> + int "AT91 Master clock Frequency"
> + default 59904000 if MACH_AT91RM9200EK
> + default 99328000 if MACH_AT91SAM9261EK
> + default 53000000
> + help
> + When Adeos interrupt pipeline is enabled, AT91 timer is based on
> + the AT91 master clock, whose frequency need hence to be known at
> + compilation time.
> +
> +endif
> +
> +# ----------------------------------------------------------
> +
> comment "AT91 Board Options"
>
> config MTD_AT91_DATAFLASH_CARD
> diff -b -x '.git*' -x '*.orig' -x '*.rej' -x '*~' -Naurdp
> ipipe-2.6-at91/arch/arm/mach-at91rm9200/at91sam9261.c
> ipipe-at91-sam/arch/arm/mach-at91rm9200/at91sam9261.c
> --- ipipe-2.6-at91/arch/arm/mach-at91rm9200/at91sam9261.c 2007-04-17
> 23:04:17.000000000 +0200
> +++ ipipe-at91-sam/arch/arm/mach-at91rm9200/at91sa> m9261.c 2007-04-17
> 23:12:41.000000000 +0200
> @@ -27,6 +27,13 @@ static struct map_desc at91sam9261_io_de
> .length = SZ_16K,
> .type = MT_DEVICE,
> }, {
> +#ifdef CONFIG_IPIPE
> + .virtual = AT91_VA_BASE_TCB0,
> + .pfn = __phys_to_pfn(AT91SAM9261_BASE_TCB0),
> + .length = SZ_16K,
> + .type = MT_DEVICE,
> + }, {
> +#endif /* CONFIG_IPIPE */
> .virtual = AT91_IO_VIRT_BASE - AT91SAM9261_SRAM_SIZE,
> .pfn = __phys_to_pfn(AT91SAM9261_SRAM_BASE),
> .length = AT91SAM9261_SRAM_SIZE,
> @@ -242,6 +249,7 @@ void __init at91sam9261_initialize(unsig
> * The default interrupt priority levels (0 = lowest, 7 = highest).
> */
> static unsigned int at91sam9261_default_irq_priority[NR_AIC_IRQS] __initdata
> = {
> +#ifndef CONFIG_IPIPE
> 7, /* Advanced Interrupt Controller */
> 7, /* System Peripherals */
> 0, /* Parallel IO Controller A */
> @@ -274,6 +282,42 @@ static unsigned int at91sam9261_default_
> 0, /* Advanced Interrupt Controller */
> 0, /* Advanced Interrupt Controller */
> 0, /* Advanced Interrupt Controller */
> +#else /* CONFIG_IPIPE */
> +/* Give the highest priority to TC, since they are used as timer interrupt by
> + I-pipe. */
> + 7, /* Advanced Interrupt Controller */
> + 7, /* System Peripherals */
> + 0, /* Parallel IO Controller A */
> + 0, /* Parallel IO Controller B */
> + 0, /* Parallel IO Controller C */
> + 0,
> + 6, /* USART 0 */
> + 6, /* USART 1 */
> + 6, /* USART 2 */
> + 0, /* Multimedia Card Interface */
> + 4, /* USB Device Port */
> + 0, /* Two-Wire Interface */
> + 6, /* Serial Peripheral Interface 0 */
> + 6, /* Serial Peripheral Interface 1 */
> + 5, /* Serial Synchronous Controller 0 */
> + 5, /* Serial Synchronous Controller 1 */
> + 5, /* Serial Synchronous Controller 2 */
> + 7, /* Timer Counter 0 */
> + 7, /* Timer Counter 1 */
> + 7, /* Timer Counter 2 */
> + 3, /* USB Host port */
> + 3, /* LCD Controller */
> + 0,
> + 0,
> + 0,
> + 0,
> + 0,
> + 0,
> + 0,
> + 0, /* Advanced Interrupt Controller */
> + 0, /* Advanced Interrupt Controller */
> + 0, /* Advanced Interrupt Controller */
> +#endif /*CONFIG_IPIPE */
> };
>
> void __init at91sam9261_init_interrupts(unsigned int priority[NR_AIC_IRQS])
> diff -b -x '.git*' -x '*.orig' -x '*.rej' -x '*~' -Naurdp
> ipipe-2.6-at91/arch/arm/mach-at91rm9200/at91sam926x_time.c
> ipipe-at91-sam/arch/arm/mach-at91rm9200/at91sam926x_time.c
> --- ipipe-2.6-at91/arch/arm/mach-at91rm9200/at91sam926x_time.c 2007-04-17
> 23:04:17.000000000 +0200
> +++ ipipe-at91-sam/arch/arm/mach-at91rm9200/at91sam926x_time.c 2007-04-17
> 23:12:41.000000000 +0200
> @@ -22,10 +22,69 @@
>
> #include <asm/arch/at91_pit.h>
>
> +static unsigned long last_crtr;
> +
> +#ifdef CONFIG_IPIPE
> +#include <linux/clk.h>
> +#include <linux/console.h>
> +#include <linux/module.h>
> +#include <asm/arch/at91sam9261.h>
> +#include <asm/arch/at91_tc.h>
> +#include "clock.h"
> +
> +#ifdef CONFIG_NO_IDLE_HZ
> +#error "dynamic tick timer not yet supported with IPIPE"
> +#endif /* CONFIG_NO_IDLE_HZ */
> +
> +#define TCNXCNS(timer,v) ((v) << ((timer)<<1))
> +#define AT91_TC_REG_MASK (0xffff)
> +
> +#if (CONFIG_IPIPE_AT91_TC==0)
> +# define KERNEL_TIMER_IRQ_NUM AT91SAM9261_ID_TC0
> +#elif (CONFIG_IPIPE_AT91_TC==1)
> +# define KERNEL_TIMER_IRQ_NUM AT91SAM9261_ID_TC1
> +#elif (CONFIG_IPIPE_AT91_TC==2)
> +# define KERNEL_TIMER_IRQ_NUM AT91SAM9261_ID_TC2
> +#else
> +#error IPIPE_AT91_TC must be 0, 1 or 2.
> +#endif
> +
> +static inline unsigned int at91_tc_read(unsigned int reg_offset)
> +{
> + unsigned long addr =
> + (AT91_VA_BASE_TCB0 + 0x40 * CONFIG_IPIPE_AT91_TC);
> +
> + return readl((void __iomem *)(addr + reg_offset));
> +}
> +
> +static inline void at91_tc_write(unsigned int reg_offset, unsigned long
> value)
> +{
> + unsigned long addr =
> + (AT91_VA_BASE_TCB0 + 0x40 * CONFIG_IPIPE_AT91_TC);
> +
> + writel(value, (void __iomem *)(addr + reg_offset));
> +}
> +
> +#define read_CV() at91_tc_read(AT91_TC_CV)
> +#define read_RC() at91_tc_read(AT91_TC_RC)
> +#define write_RC(value) at91_tc_write(AT91_TC_RC, value)
> +
> +int __ipipe_mach_timerint = KERNEL_TIMER_IRQ_NUM;
> +EXPORT_SYMBOL(__ipipe_mach_timerint);
> +
> +int __ipipe_mach_timerstolen = 0;
> +EXPORT_SYMBOL(__ipipe_mach_timerstolen);
> +
> +unsigned int __ipipe_mach_ticks_per_jiffy = LATCH;
> +EXPORT_SYMBOL(__ipipe_mach_ticks_per_jiffy);
> +
> +static int at91_timer_initialized;
> +#endif /* CONFIG_IPIPE */
>
> #define PIT_CPIV(x) ((x) & AT91_PIT_CPIV)
> #define PIT_PICNT(x) (((x) & AT91_PIT_PICNT) >> 20)
>
> +#ifndef CONFIG_IPIPE
> /*
> * Returns number of microseconds since last timer interrupt. Note that
> interrupts
> * will have been disabled by do_gettimeofday()
> @@ -112,3 +171,209 @@ struct sys_timer at91sam926x_timer = {
> .resume = at91sam926x_timer_reset,
> };
>
> +#else /* CONFIG_IPIPE */
> +
> +/*
> + * Returns number of microseconds since last timer interrupt. Note that
> interrupts
> + * will have been disabled by do_gettimeofday()
> + * 'LATCH' is hwclock ticks (see CLOCK_TICK_RATE in timex.h) per jiffy.
> +* 'tick' is usecs per jiffy (linux/timex.h).
> + */
> +static unsigned long at91sam926x_gettimeoffset(void)
> +{
> + unsigned long elapsed;
> +
> + elapsed = (read_CV() - last_crtr) & AT91_TC_REG_MASK;
> +
> + return (unsigned long) (elapsed * (tick_nsec / 1000)) / LATCH;
> +}
> +
> +void __ipipe_mach_acktimer(void)
> +{
> + at91_tc_read(AT91_TC_SR);
> +}
> +
> +/*
> + * IRQ handler for the timer.
> + */
> +static irqreturn_t at91sam926x_timer_interrupt(int irq, void *dev_id)
> +{
> + /*
> + * - if Linux is running under ipipe, but it still has the control
> over
> + * the timer (no Xenomai for example), then reprogram the timer
> (ipipe
> + * has already acked it)
> + * - if some other domain has taken over the timer, then do nothing
> + * (ipipe has acked it, and the other domain has reprogramed it)
> + */
> +
> + write_seqlock(&xtime_lock);
> +
> + if (__ipipe_mach_timerstolen) {
> + timer_tick();
> + last_crtr = (last_crtr + LATCH) & AT91_TC_REG_MASK;
> + } else {
> + while (((read_CV() - last_crtr) & AT91_TC_REG_MASK) >= LATCH)
> {
> + timer_tick();
> + last_crtr = (last_crtr + LATCH) & AT91_TC_REG_MASK;
> + }
> + write_RC((last_crtr + LATCH) & AT91_TC_REG_MASK);
> + }
> +
> + write_sequnlock(&xtime_lock);
> +
> + return IRQ_HANDLED;
> +}
> +
> +static irqreturn_t at91sam926x_bad_freq(int irq, void *dev_id)
> +{
> + static int ticks = 0;
> +
> + if (++ticks != HZ * 120) {
> + if (!console_drivers || try_acquire_console_sem())
> + return at91sam926x_timer_interrupt(irq, dev_id);
> +
> + release_console_sem();
> + }
> +
> + panic("AT91 clock rate incorrectly set.\n"
> + "Please recompile with IPIPE_AT91_MCK set to %lu Hz.",
> + clk_get_rate(clk_get(NULL, "mck")));
> +}
> +
> +notrace unsigned long long __ipipe_mach_get_tsc(void)
> +{
> + if (likely(at91_timer_initialized)) {
> + static union {
> +#ifdef __BIG_ENDIAN
> + struct {
> + unsigned long high;
> + unsigned short mid;
> + unsigned short low;
> + };
> +#else /* __LITTLE_ENDIAN */
> + struct {
> + unsigned short low;
> + unsigned short mid;
> + unsigned long high;
> + };
> +#endif /* __LITTLE_ENDIAN */
> + unsigned long long full;
> + } tsc[NR_CPUS], *local_tsc;
> + unsigned long long result;
> + unsigned short stamp;
> + unsigned long flags;
> +
> + local_irq_save_hw(flags);
> + local_tsc = &tsc[ipipe_processor_id()];
> + stamp = read_CV();
> + if (unlikely(stamp < local_tsc->low)) {
> + if (unlikely(!++local_tsc->mid))
> + /* 32 bit counter wrapped, increment high
> word. */
> + local_tsc->high++;
> + }
> + local_tsc->low = stamp;
> + result = local_tsc->full;
> + local_irq_restore_hw(flags);
> +
> + return result;
> + }
> +
> + return 0;
> +}
> +EXPORT_SYMBOL(__ipipe_mach_get_tsc);
> +
> +/*
> + * Reprogram the timer
> + */
> +
> +void __ipipe_mach_set_dec(unsigned long delay)
> +{
> + unsigned long flags;
> +
> + if (delay > 2) {
> + local_irq_save_hw(flags);
> + write_RC((read_CV() + delay) & AT91_TC_REG_MASK);
> + local_irq_restore_hw(flags);
> + } else
> + ipipe_trigger_irq(KERNEL_TIMER_IRQ_NUM);
> +}
> +EXPORT_SYMBOL(__ipipe_mach_set_dec);
> +
> +void __ipipe_mach_release_timer(void)
> +{
> + __ipipe_mach_set_dec(__ipipe_mach_ticks_per_jiffy);
> +}
> +EXPORT_SYMBOL(__ipipe_mach_release_timer);
> +
> +unsigned long __ipipe_mach_get_dec(void)
> +{
> + return (read_RC() - read_CV()) & AT91_TC_REG_MASK;
> +}
> +
> +static struct irqaction at91sam926x_timer_irq = {
> + .name = "at91_tick",
> + .flags = IRQF_DISABLED | IRQF_TIMER,
> + .handler = &at91sam926x_timer_interrupt
> +};
> +
> +static char clk_name [] = "tc%";
> +
> +static struct clk tc = {
> + .name = (const char *) clk_name,
> + .users = 0,
> + .type = CLK_TYPE_PERIPHERAL,
> + .pmc_mask = 1 << (KERNEL_TIMER_IRQ_NUM),
> +};
> +
> +void __init at91sam926x_timer_init(void)
> +{
> + unsigned long v;
> +
> + if (clk_get_rate(clk_get(NULL, "mck")) != CONFIG_IPIPE_AT91_MCK)
> + at91sam926x_timer_irq.handler = &at91sam926x_bad_freq;
> +
> + snprintf(clk_name, sizeof(clk_name), "tc%d", CONFIG_IPIPE_AT91_TC);
> + clk_register(&tc);
> + clk_enable(&tc);
> +
> + /* No Sync. */
> + at91_tc_write(AT91_TC_BCR, 0);
> +
> + /* program NO signal on XCN */
> + v = readl((void __iomem *) (AT91_VA_BASE_TCB0 + AT91_TC_BMR));
> + v &= ~TCNXCNS(CONFIG_IPIPE_AT91_TC, 3);
> + v |= TCNXCNS(CONFIG_IPIPE_AT91_TC, 1); /* AT91_TC_TCNXCNS_NONE */
> + writel(v, (void __iomem *) (AT91_VA_BASE_TCB0 + AT91_TC_BMR));
> +
> + /* Disable the channel */
> + at91_tc_write(AT91_TC_CCR, AT91_TC_CLKDIS);
> +
> + /* Select TIMER_CLOCK3 (MCLK/32) as input frequency for TC. */
> + at91_tc_write(AT91_TC_CMR, AT91_TC_TIMER_CLOCK3);
> +
> + /* Disable all interrupts. */
> + at91_tc_write(AT91_TC_IDR, ~0ul);
> +
> + /* Load the TC register C. */
> + last_crtr = 0;
> + write_RC(LATCH);
> +
> + /* Enable CPCS interrupt. */
> + at91_tc_write(AT91_TC_IER, AT91_TC_CPCS);
> +
> + /* Set up the interrupt. */
> + setup_irq(KERNEL_TIMER_IRQ_NUM, &at91sam926x_timer_irq);
> +
> + /* Enable the channel. */
> + at91_tc_write(AT91_TC_CCR, AT91_TC_CLKEN | AT91_TC_SWTRG);
> +
> + at91_timer_initialized = 1;
> +}
> +
> +struct sys_timer at91sam926x_timer = {
> + .init = at91sam926x_timer_init,
> + .offset = at91sam926x_gettimeoffset,
> + .suspend = NULL,
> + .resume = NULL,
> +};
> +#endif /* CONFIG_IPIPE */
> diff -b -x '.git*' -x '*.orig' -x '*.rej' -x '*~' -Naurdp
> ipipe-2.6-at91/include/asm-arm/arch-at91rm9200/hardware.h
> ipipe-at91-sam/include/asm-arm/arch-at91rm9200/hardware.h
> --- ipipe-2.6-at91/include/asm-arm/arch-at91rm9200/hardware.h 2007-04-17
> 23:08:38.000000000 +0200
> +++ ipipe-at91-sam/include/asm-arm/arch-at91rm9200/hardware.h 2007-04-17
> 23:12:41.000000000 +0200
> @@ -42,9 +42,27 @@
> * Virtual to Physical Address mapping for IO devices.
> */
> #define AT91_VA_BASE_SYS AT91_IO_P2V(AT91_BASE_SYS)
> -#define AT91_VA_BASE_EMAC AT91_IO_P2V(AT91RM9200_BASE_EMAC)
> +
> +#if defined(CONFIG_ARCH_AT91RM9200)
> + #define AT91_VA_BASE_EMAC AT91_IO_P2V(AT91RM9200_BASE_EMAC)
> +#elif defined(CONFIG_ARCH_AT91SAM9260)
> + #define AT91_VA_BASE_EMAC AT91_IO_P2V(AT91SAM9260_BASE_EMAC)
> +#elif defined(CONFIG_ARCH_AT91SAM9261)
> + #define AT91_VA_BASE_EMAC AT91_IO_P2V(AT91SAM9261_BASE_EMAC)
> +#else
> +#error "Unsupported AT91 processor"
> +#endif
> +
> #ifdef CONFIG_IPIPE
> -#define AT91_VA_BASE_TCB0 AT91_IO_P2V(AT91RM9200_BASE_TCB0)
> +#if defined(CONFIG_ARCH_AT91RM9200)
> + #define AT91_VA_BASE_TCB0 AT91_IO_P2V(AT91RM9200_BASE_TCB0)
> +#elif defined(CONFIG_ARCH_AT91SAM9260)
> + #define AT91_VA_BASE_TCB0 AT91_IO_P2V(AT91SAM9260_BASE_TCB0)
> +#elif defined(CONFIG_ARCH_AT91SAM9261)
> + #define AT91_VA_BASE_TCB0 AT91_IO_P2V(AT91SAM9261_BASE_TCB0)
> +#else
> +#error "Unsupported AT91 processor"
> +#endif
> #endif /* CONFIG_IPIPE */
>
> /* Internal SRAM is mapped below the IO devices */
> diff -b -x '.git*' -x '*.orig' -x '*.rej' -x '*~' -Naurdp
> ipipe-2.6-at91/include/asm-arm/arch-at91rm9200/irqs.h
> ipipe-at91-sam/include/asm-arm/arch-at91rm9200/irqs.h
> --- ipipe-2.6-at91/include/asm-arm/arch-at91rm9200/irqs.h 2007-04-17
> 23:04:18.000000000 +0200
> +++ ipipe-at91-sam/include/asm-arm/arch-at91rm9200/irqs.h 2007-04-17
> 23:12:41.000000000 +0200
> @@ -44,8 +44,19 @@
> #if defined(CONFIG_IPIPE) && !defined(__ASSEMBLY__)
> extern unsigned __ipipe_at91_gpio_banks;
>
> -#define __ipipe_mach_irq_mux_p(irq) \
> +#if defined(CONFIG_ARCH_AT91RM9200)
> + #define __ipipe_mach_irq_mux_p(irq) \
> ((unsigned) (irq - AT91RM9200_ID_PIOA) < __ipipe_at91_gpio_banks)
> +#elif defined(CONFIG_ARCH_AT91SAM9260)
> + #define __ipipe_mach_irq_mux_p(irq) \
> + ((unsigned) (irq - AT91SAM9260_ID_PIOA) <
> __ipipe_at91_gpio_banks)
> +#elif defined(CONFIG_ARCH_AT91SAM9261)
> + #define __ipipe_mach_irq_mux_p(irq) \
> + ((unsigned) (irq - AT91SAM9261_ID_PIOA) <
> __ipipe_at91_gpio_banks)
> +#else
> +#error "Unsupported AT91 processor"
> +#endif
> +
>
> #endif /* CONFIG_IPIPE && !__ASSEMBLY__ */
>
> diff -b -x '.git*' -x '*.orig' -x '*.rej' -x '*~' -Naurdp
> ipipe-2.6-at91/include/asm-arm/arch-at91rm9200/timex.h
> ipipe-at91-sam/include/asm-arm/arch-at91rm9200/timex.h
> --- ipipe-2.6-at91/include/asm-arm/arch-at91rm9200/timex.h 2007-04-17
> 23:09:42.000000000 +0200
> +++ ipipe-at91-sam/include/asm-arm/arch-at91rm9200/timex.h 2007-04-17
> 23:12:41.000000000 +0200
> @@ -23,10 +23,13 @@
>
> #include <asm/hardware.h>
>
> -#ifndef CONFIG_IPIPE
> #if defined(CONFIG_ARCH_AT91RM9200)
>
> +#ifndef CONFIG_IPIPE
> #define CLOCK_TICK_RATE (AT91_SLOW_CLOCK)
> +#else /* !CONFIG_IPIPE */
> +#define CLOCK_TICK_RATE (CONFIG_IPIPE_AT91_MCK / 32)
> +#endif /* !CONFIG_IPIPE */
>
> #elif defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9261)
>
> @@ -35,8 +38,4 @@
>
> #endif
>
> -#else /* !CONFIG_IPIPE */
> -#define CLOCK_TICK_RATE (CONFIG_IPIPE_AT91_MCK / 32)
> -#endif /* !CONFIG_IPIPE */
> -
> #endif
>
> _______________________________________________
> Adeos-main mailing list
> [email protected]
> https://mail.gna.org/listinfo/adeos-main
>
>
--
Gregory CLEMENT
Adeneo
2, chemin du Ruisseau - BP21
69136 Ecully Cedex
France
Tel : +33-4 72 18 08 40
_______________________________________________
Adeos-main mailing list
[email protected]
https://mail.gna.org/listinfo/adeos-main