From 6eb4c422c631493414d5032246013675ae680faa Mon Sep 17 00:00:00 2001 From: MSE500 Team Date: Thu, 1 Mar 2012 10:32:38 +0100 Subject: polux/devkit/rtai: update operations on the hardware timer, refs #3010 --- .../rtai-core/arch/arm/hal/mach-mse500/mse500-timer.c | 14 +++++++++----- polux/devkit/rtai-3.1-2.6/rtai-core/arch/arm/hal/rtai.c | 11 +++++++++-- 2 files changed, 18 insertions(+), 7 deletions(-) (limited to 'polux/devkit/rtai-3.1-2.6/rtai-core/arch') 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 #include #include +#include #include #include #include @@ -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); -- cgit v1.2.3