summaryrefslogtreecommitdiff
path: root/polux/devkit/rtai-3.1-2.6/rtai-core/arch
diff options
context:
space:
mode:
authorMSE500 Team2012-03-01 10:32:38 +0100
committerYacine Belkadi2012-06-11 13:40:00 +0200
commit6eb4c422c631493414d5032246013675ae680faa (patch)
tree711fbd7296aaa24be421a80eed9a367ea7ad60e8 /polux/devkit/rtai-3.1-2.6/rtai-core/arch
parent573ec061717c21b1634f9a15a4187dd65328edcc (diff)
polux/devkit/rtai: update operations on the hardware timer, refs #3010
Diffstat (limited to 'polux/devkit/rtai-3.1-2.6/rtai-core/arch')
-rw-r--r--polux/devkit/rtai-3.1-2.6/rtai-core/arch/arm/hal/mach-mse500/mse500-timer.c14
-rw-r--r--polux/devkit/rtai-3.1-2.6/rtai-core/arch/arm/hal/rtai.c11
2 files changed, 18 insertions, 7 deletions
diff --git a/polux/devkit/rtai-3.1-2.6/rtai-core/arch/arm/hal/mach-mse500/mse500-timer.c b/polux/devkit/rtai-3.1-2.6/rtai-core/arch/arm/hal/mach-mse500/mse500-timer.c
index 9ae18a5ca0..86e7f28014 100644
--- a/polux/devkit/rtai-3.1-2.6/rtai-core/arch/arm/hal/mach-mse500/mse500-timer.c
+++ b/polux/devkit/rtai-3.1-2.6/rtai-core/arch/arm/hal/mach-mse500/mse500-timer.c
@@ -28,6 +28,7 @@
#include <asm/system.h>
#include <asm/leds.h>
#include <asm/arch/hardware.h>
+#include <asm/arch/spc300/hardware/timer.h>
#include <linux/sched.h>
#include <linux/interrupt.h>
#include <linux/sched.h>
@@ -55,10 +56,12 @@ irqreturn_t linux_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
/* update tsc */
rdtsc();
- if(CSP_ST16_GET_SR(CSP_ST0) & ST16_CHEND((KERNEL_TIMER)))
+ if(TIMER1INTSTAT_1_VA)
{
+ volatile uint32_t dummy;
+
timer_tick(regs);
- CSP_ST16_SET_CSR(CSP_ST0,ST16_CHEND((KERNEL_TIMER)));
+ dummy = TIMER1EOI_1_VA;
}
else
{
@@ -110,14 +113,15 @@ irqreturn_t soft_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
void rt_request_timer(void (*handler)(void), unsigned int tick, int unused)
{
unsigned long flags;
+ volatile uint32_t dummy;
flags = hard_lock_all();
/* stop the timer */
- CSP_ST16_SET_CR(CSP_ST0,ST16_CHDIS(KERNEL_TIMER));
+ TIMER1CONTROLREG_1_VA &= ~TIMER_ENABLE_MASK;
/* Acknowledge IRQ latched */
- CSP_ST16_SET_CSR(CSP_ST0,ST16_CHEND((KERNEL_TIMER)));
+ dummy = TIMER1EOI_1_VA;
/* set up rt_times structure */
rt_times.linux_tick = LATCH;
@@ -168,7 +172,7 @@ void rt_free_timer(void)
void rt_mse500_timer_init(void)
{
- rtai_timer_limit = (CSP_ST16_CHANNEL_GET_CT(CSP_ST0, KERNEL_TIMER) & ST16_LOAD_MASK);
+ rtai_timer_limit = TIMER1LOADCOUNT_1_VA;
/* setup our tsc compare register */
rtai_tsc.tsc = 0LL;
diff --git a/polux/devkit/rtai-3.1-2.6/rtai-core/arch/arm/hal/rtai.c b/polux/devkit/rtai-3.1-2.6/rtai-core/arch/arm/hal/rtai.c
index 3c97d235ae..28edb5fd46 100644
--- a/polux/devkit/rtai-3.1-2.6/rtai-core/arch/arm/hal/rtai.c
+++ b/polux/devkit/rtai-3.1-2.6/rtai-core/arch/arm/hal/rtai.c
@@ -450,18 +450,25 @@ asmlinkage void dispatch_irq(unsigned int irq, struct pt_regs *regs)
global_irq[irq].count++;
-#if defined(SP_SPC2XXC) || defined(CONFIG_ARCH_MSE500)
+#if defined(SP_SPC2XXC)
/* PATCH with LISA PLATFORM clear timer beacause of high
* level trigger instead of high edge */
if(irq == 2) {
CSP_ST16_SET_CSR(CSP_ST0,ST16_CHEND((KERNEL_TIMER)));
rtai_timer_irqs++;
}
+#elif defined(CONFIG_ARCH_MSE500)
+ /* PATCH with LISA PLATFORM clear timer beacause of high
+ * level trigger instead of high edge */
+ if(irq == TIMER_8254_IRQ) {
+ volatile uint32_t dummy = TIMER1EOI_1_VA;
+ rtai_timer_irqs++;
+ }
#endif
global_irq[irq].handler(irq, global_irq[irq].dev_id, regs);
hard_local_irq_enable();
-#if defined(SP_SPC2XXC) || defined(CONFIG_ARCH_MSE500)
+#if defined(SP_SPC2XXC)
CSP_GIC_SET_EOICR(CSP_GIC,0);
#endif
rtai_just_copy_back(flags);