Module: xenomai-head
Branch: master
Commit: 6620b03af2b0f120a8dea1a28bf1d793aaf2434f
URL:    
http://git.xenomai.org/?p=xenomai-head.git;a=commit;h=6620b03af2b0f120a8dea1a28bf1d793aaf2434f

Author: Gilles Chanteperdrix <gilles.chanteperd...@xenomai.org>
Date:   Sun Jan  2 21:14:24 2011 +0100

arm: upgrade I-pipe support to 2.6.33-1.18-01

---

 ....patch => adeos-ipipe-2.6.33-arm-1.18-01.patch} |   94 ++++++++++----------
 1 files changed, 47 insertions(+), 47 deletions(-)

diff --git a/ksrc/arch/arm/patches/adeos-ipipe-2.6.33-arm-1.18-00.patch 
b/ksrc/arch/arm/patches/adeos-ipipe-2.6.33-arm-1.18-01.patch
similarity index 99%
rename from ksrc/arch/arm/patches/adeos-ipipe-2.6.33-arm-1.18-00.patch
rename to ksrc/arch/arm/patches/adeos-ipipe-2.6.33-arm-1.18-01.patch
index 7f8348f..9bcc7ad 100644
--- a/ksrc/arch/arm/patches/adeos-ipipe-2.6.33-arm-1.18-00.patch
+++ b/ksrc/arch/arm/patches/adeos-ipipe-2.6.33-arm-1.18-01.patch
@@ -644,7 +644,7 @@ index 0000000..cfdf14a
 +#endif /* __ASM_ARM_FCSE_H */
 diff --git a/arch/arm/include/asm/ipipe.h b/arch/arm/include/asm/ipipe.h
 new file mode 100644
-index 0000000..bf6c4e5
+index 0000000..e802d72
 --- /dev/null
 +++ b/arch/arm/include/asm/ipipe.h
 @@ -0,0 +1,370 @@
@@ -680,10 +680,10 @@ index 0000000..bf6c4e5
 +#include <linux/ipipe_percpu.h>
 +#include <linux/ipipe_trace.h>
 +
-+#define IPIPE_ARCH_STRING     "1.18-00"
++#define IPIPE_ARCH_STRING     "1.18-01"
 +#define IPIPE_MAJOR_NUMBER    1
 +#define IPIPE_MINOR_NUMBER    18
-+#define IPIPE_PATCH_NUMBER    0
++#define IPIPE_PATCH_NUMBER    1
 +
 +#ifdef CONFIG_SMP
 +#define ipipe_processor_id()  hard_smp_processor_id()
@@ -3840,10 +3840,10 @@ index 0000000..a9de4f9
 +EXPORT_SYMBOL(__ipipe_tsc_get);
 diff --git a/arch/arm/kernel/ipipe_tsc_asm.S b/arch/arm/kernel/ipipe_tsc_asm.S
 new file mode 100644
-index 0000000..81e1590
+index 0000000..7dfec60
 --- /dev/null
 +++ b/arch/arm/kernel/ipipe_tsc_asm.S
-@@ -0,0 +1,167 @@
+@@ -0,0 +1,165 @@
 +#include <asm/assembler.h>
 +#include <asm/asm-offsets.h>
 +#include <asm/glue.h>
@@ -3903,7 +3903,7 @@ index 0000000..81e1590
 +
 +      .align 5
 +.LCfrcd32_last_tsc:
-+      .rep    3
++      .rep    7
 +      .word   0
 +      .endr
 +.LCfrcd32_cntr_addr:
@@ -3942,16 +3942,15 @@ index 0000000..81e1590
 +__ipipe_freerunning_16:
 +      ldr     r0, .LCfr16_cntr_addr
 +/* User-space entry-point: r0 is the hardware counter virtual address */
-+      mov     ip, r0
 +1:    myldrd  r2, r3, r1, .LCfr16_last_tsc
-+      ldr     r0, [ip]
++      ldr     ip, [r0]
 +#ifndef CONFIG_CPU_ENDIAN_BE8
 +/* Little endian */
 +      ldr     r1, .LCfr16_last_tsc
 +      cmp     r1, r2
 +      bne     1b
 +      mov     r1, r2, lsr #16
-+      orr     r0, r0, r1, lsl #16
++      orr     r0, ip, r1, lsl #16
 +      cmp     r2, r0
 +      addhis  r0, r0, #0x10000
 +      adc     r1, r3, #0
@@ -3960,7 +3959,7 @@ index 0000000..81e1590
 +      cmp     r1, r3
 +      bne     1b
 +      mov     r1, r3, lsr #16
-+      orr     r1, r0, r1, lsl #16
++      orr     r1, ip, r1, lsl #16
 +      cmp     r3, r0
 +      addhis  r1, r1, #0x10000
 +      adc     r0, r2, #0
@@ -3984,30 +3983,29 @@ index 0000000..81e1590
 +__ipipe_decrementer_16:
 +      ldr     r0, .LCdec16_cntr_addr
 +/* User-space entry-point: r0 is the hardware counter virtual address */
-+      mov     ip, r0
 +#ifndef CONFIG_CPU_ENDIAN_BE8
 +/* Little endian */
 +1:    ldr     r1, .LCdec16_last_tsc
-+      ldr     r0, [ip]
++      ldr     ip, [r0]
 +      ldr     r2, .LCdec16_last_cnt
-+      subs    r0, r2, r0
-+      addcs   r0, r0, #0x10000
++      subs    ip, r2, ip
++      addcs   ip, ip, #0x10000
 +      myldrd  r2, r3, r3, .LCdec16_last_tsc
 +      cmp     r1, r2
 +      bne     1b
-+      adds    r0, r0, r2
++      adds    r0, ip, r2
 +      adc     r1, r3, #0
 +#else /* Big endian */
 +/* Little endian */
 +1:    ldr     r1, .LCdec16_last_tsc + 4
-+      ldr     r0, [ip]
++      ldr     ip, [r0]
 +      ldr     r2, .Ldec16_Clast_cnt
-+      subs    r0, r2, r0
-+      addcs   r0, r0, #0x10000
++      subs    ip, r2, ip
++      addcs   ip, ip, #0x10000
 +      myldrd  r2, r3, r3, .LCdec16_last_tsc
 +      cmp     r1, r3
 +      bne     1b
-+      adds    r1, r0, r3
++      adds    r1, ip, r3
 +      adc     r0, r2, #0
 +#endif /* Big endian */
 +      usr_ret lr
@@ -4090,7 +4088,7 @@ index a2ea385..487ab4c 100644
        return 0;
  }
 diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
-index 57162af..952fd85 100644
+index 57162af..1bb4658 100644
 --- a/arch/arm/kernel/smp.c
 +++ b/arch/arm/kernel/smp.c
 @@ -34,6 +34,7 @@
@@ -4341,21 +4339,17 @@ index 57162af..952fd85 100644
        } else
                local_flush_tlb_range(vma, start, end);
  }
-@@ -687,3 +797,14 @@ void flush_tlb_kernel_range(unsigned long start, unsigned 
long end)
+@@ -687,3 +797,10 @@ void flush_tlb_kernel_range(unsigned long start, unsigned 
long end)
        } else
                local_flush_tlb_kernel_range(start, end);
  }
 +
-+#ifdef CONFIG_SMP
-+
 +void arch_trigger_all_cpu_backtrace(void)
 +{
 +      cpumask_t mask = cpu_online_map;
 +      cpu_clear(ipipe_processor_id(), mask);
 +      send_ipi_message(&mask, IPI_CPU_DUMP);
 +}
-+
-+#endif
 diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c
 index 3f361a7..5e3a4a0 100644
 --- a/arch/arm/kernel/traps.c
@@ -4432,10 +4426,10 @@ index 709fbad..09cfdd0 100644
 +endif
 diff --git a/arch/arm/mach-at91/at91_ipipe_time.c 
b/arch/arm/mach-at91/at91_ipipe_time.c
 new file mode 100644
-index 0000000..b0327eb
+index 0000000..6c6f0d7
 --- /dev/null
 +++ b/arch/arm/mach-at91/at91_ipipe_time.c
-@@ -0,0 +1,321 @@
+@@ -0,0 +1,327 @@
 +/*
 + * linux/arch/arm/mach-at91/at91_ipipe_time.c
 + *
@@ -4514,9 +4508,7 @@ index 0000000..b0327eb
 +#define TCNXCNS(timer,v) ((v) << ((timer)<<1))
 +#define AT91_TC_REG_MASK (0xffff)
 +
-+static unsigned long next_match;
-+
-+static unsigned max_delta_ticks, min_delta_ticks;
++static unsigned max_delta_ticks, min_delta_ticks, tick_pending;
 +static struct clock_event_device clkevt;
 +static int tc_timer_clock;
 +
@@ -4554,7 +4546,11 @@ index 0000000..b0327eb
 + */
 +static irqreturn_t at91_timer_interrupt(int irq, void *dev_id)
 +{
-+      clkevt.event_handler(&clkevt);
++      if (__ipipe_mach_timerstolen || tick_pending) {
++              tick_pending = 0;
++              clkevt.event_handler(&clkevt);
++      }
++
 +      return IRQ_HANDLED;
 +}
 +
@@ -4568,12 +4564,8 @@ index 0000000..b0327eb
 +{
 +      at91_tc_read(AT91_TC_SR);
 +
-+      if (unlikely(!__ipipe_mach_timerstolen)) {
-+              __ipipe_tsc_update();
-+              next_match = (next_match + __ipipe_mach_ticks_per_jiffy)
-+                      & AT91_TC_REG_MASK;
-+              write_RC(next_match);
-+      }
++      if (unlikely(!__ipipe_mach_timerstolen))
++              __ipipe_mach_set_dec(max_delta_ticks);
 +}
 +
 +static void
@@ -4585,7 +4577,7 @@ index 0000000..b0327eb
 +      /* Disable all interrupts. */
 +      at91_tc_write(AT91_TC_IDR, ~0ul);
 +
-+      if (mode == CLOCK_EVT_MODE_PERIODIC) {
++      if (mode == CLOCK_EVT_MODE_ONESHOT) {
 +              unsigned long v;
 +
 +#ifndef CONFIG_ARCH_AT91SAM9263
@@ -4607,9 +4599,7 @@ index 0000000..b0327eb
 +              /* Use the clock selected by at91_timer_init as input clock. */
 +              at91_tc_write(AT91_TC_CMR, tc_timer_clock);
 +
-+              /* Load the TC register C. */
-+              next_match = __ipipe_mach_ticks_per_jiffy;
-+              write_RC(next_match);
++              __ipipe_mach_set_dec(max_delta_ticks);
 +
 +              /* Enable CPCS interrupt. */
 +              at91_tc_write(AT91_TC_IER, AT91_TC_CPCS);
@@ -4619,6 +4609,14 @@ index 0000000..b0327eb
 +      }
 +}
 +
++static int
++at91_tc_set_next_event(unsigned long delta, struct clock_event_device *dev)
++{
++      tick_pending = 1;
++      __ipipe_mach_set_dec(delta);
++      return 0;
++}
++
 +/*
 + * Reprogram the timer
 + */
@@ -4646,10 +4644,11 @@ index 0000000..b0327eb
 +
 +static struct clock_event_device clkevt = {
 +      .name           = "at91_tc" __stringify(CONFIG_IPIPE_AT91_TC),
-+      .features       = CLOCK_EVT_FEAT_PERIODIC,
++      .features       = CLOCK_EVT_FEAT_ONESHOT,
 +      .shift          = 20,
 +      .rating         = 250,
 +      .set_mode       = at91_tc_set_mode,
++      .set_next_event = at91_tc_set_next_event,
 +};
 +
 +static struct __ipipe_tscinfo tsc_info = {
@@ -4668,7 +4667,7 @@ index 0000000..b0327eb
 +
 +void __ipipe_mach_release_timer(void)
 +{
-+      __ipipe_mach_set_dec(__ipipe_mach_ticks_per_jiffy);
++      clkevt.set_next_event(__ipipe_mach_ticks_per_jiffy, &clkevt);
 +}
 +EXPORT_SYMBOL(__ipipe_mach_release_timer);
 +
@@ -4731,15 +4730,16 @@ index 0000000..b0327eb
 +      clkevt.max_delta_ns = wrap_ns;
 +      clkevt.min_delta_ns = 2000;
 +      clkevt.cpumask = cpumask_of(0);
-+      clockevents_register_device(&clkevt);
-+
-+      tsc_info.freq = divided_freq;
-+      __ipipe_tsc_register(&tsc_info);
 +
 +      __ipipe_mach_ticks_per_jiffy = (divided_freq + HZ/2) / HZ;
 +      max_delta_ticks = (wrap_ns * clkevt.mult) >> clkevt.shift;
 +      min_delta_ticks = ((unsigned long long) clkevt.min_delta_ns
 +                         * clkevt.mult) >> clkevt.shift;
++
++      clockevents_register_device(&clkevt);
++
++      tsc_info.freq = divided_freq;
++      __ipipe_tsc_register(&tsc_info);
 +}
 +
 +#ifdef CONFIG_ARCH_AT91RM9200


_______________________________________________
Xenomai-git mailing list
Xenomai-git@gna.org
https://mail.gna.org/listinfo/xenomai-git

Reply via email to