aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/plat-stmp3xxx/timer.c
diff options
context:
space:
mode:
authordmitry pervushin <dpervushin@embeddedalley.com>2009-05-31 08:32:11 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2009-05-31 08:55:56 -0400
commit98f420b23a62e0c9df78c5851860d47bf1bc87dd (patch)
treeb7e88059454d2410b1a2107c17a748a03d366fdf /arch/arm/plat-stmp3xxx/timer.c
parent3f52326a85666c1cb0210eb5556ef3d483933cfc (diff)
[ARM] 5532/1: Freescale STMP: register definitions [3/3]
Replace HW_zzz register access macros by regular __raw_readl/__raw_writel calls Signed-off-by: dmitry pervushin <dpervushin@embeddedalley.com> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/plat-stmp3xxx/timer.c')
-rw-r--r--arch/arm/plat-stmp3xxx/timer.c111
1 files changed, 64 insertions, 47 deletions
diff --git a/arch/arm/plat-stmp3xxx/timer.c b/arch/arm/plat-stmp3xxx/timer.c
index 7d872f0aee70..063c7bc0e740 100644
--- a/arch/arm/plat-stmp3xxx/timer.c
+++ b/arch/arm/plat-stmp3xxx/timer.c
@@ -26,6 +26,7 @@
26 26
27#include <asm/mach/time.h> 27#include <asm/mach/time.h>
28#include <mach/stmp3xxx.h> 28#include <mach/stmp3xxx.h>
29#include <mach/platform.h>
29#include <mach/regs-timrot.h> 30#include <mach/regs-timrot.h>
30 31
31static irqreturn_t 32static irqreturn_t
@@ -33,13 +34,22 @@ stmp3xxx_timer_interrupt(int irq, void *dev_id)
33{ 34{
34 struct clock_event_device *c = dev_id; 35 struct clock_event_device *c = dev_id;
35 36
36 if (HW_TIMROT_TIMCTRLn_RD(0) & (1<<15)) { 37 /* timer 0 */
37 HW_TIMROT_TIMCTRLn_CLR(0, (1<<15)); 38 if (__raw_readl(REGS_TIMROT_BASE + HW_TIMROT_TIMCTRL0) &
39 BM_TIMROT_TIMCTRLn_IRQ) {
40 stmp3xxx_clearl(BM_TIMROT_TIMCTRLn_IRQ,
41 REGS_TIMROT_BASE + HW_TIMROT_TIMCTRL0);
38 c->event_handler(c); 42 c->event_handler(c);
39 } else if (HW_TIMROT_TIMCTRLn_RD(1) & (1<<15)) { 43 }
40 HW_TIMROT_TIMCTRLn_CLR(1, (1<<15)); 44
41 HW_TIMROT_TIMCTRLn_CLR(1, BM_TIMROT_TIMCTRLn_IRQ_EN); 45 /* timer 1 */
42 HW_TIMROT_TIMCOUNTn_WR(1, 0xFFFF); 46 else if (__raw_readl(REGS_TIMROT_BASE + HW_TIMROT_TIMCTRL1)
47 & BM_TIMROT_TIMCTRLn_IRQ) {
48 stmp3xxx_clearl(BM_TIMROT_TIMCTRLn_IRQ,
49 REGS_TIMROT_BASE + HW_TIMROT_TIMCTRL1);
50 stmp3xxx_clearl(BM_TIMROT_TIMCTRLn_IRQ_EN,
51 REGS_TIMROT_BASE + HW_TIMROT_TIMCTRL1);
52 __raw_writel(0xFFFF, REGS_TIMROT_BASE + HW_TIMROT_TIMCOUNT1);
43 } 53 }
44 54
45 return IRQ_HANDLED; 55 return IRQ_HANDLED;
@@ -47,14 +57,16 @@ stmp3xxx_timer_interrupt(int irq, void *dev_id)
47 57
48static cycle_t stmp3xxx_clock_read(struct clocksource *cs) 58static cycle_t stmp3xxx_clock_read(struct clocksource *cs)
49{ 59{
50 return ~((HW_TIMROT_TIMCOUNTn_RD(1) & 0xFFFF0000) >> 16); 60 return ~((__raw_readl(REGS_TIMROT_BASE + HW_TIMROT_TIMCOUNT1)
61 & 0xFFFF0000) >> 16);
51} 62}
52 63
53static int 64static int
54stmp3xxx_timrot_set_next_event(unsigned long delta, 65stmp3xxx_timrot_set_next_event(unsigned long delta,
55 struct clock_event_device *dev) 66 struct clock_event_device *dev)
56{ 67{
57 HW_TIMROT_TIMCOUNTn_WR(0, delta); /* reload */ 68 /* reload the timer */
69 __raw_writel(delta, REGS_TIMROT_BASE + HW_TIMROT_TIMCOUNT0);
58 return 0; 70 return 0;
59} 71}
60 72
@@ -102,25 +114,29 @@ static void __init stmp3xxx_init_timer(void)
102 ckevt_timrot.max_delta_ns = clockevent_delta2ns(0xFFF, &ckevt_timrot); 114 ckevt_timrot.max_delta_ns = clockevent_delta2ns(0xFFF, &ckevt_timrot);
103 ckevt_timrot.cpumask = cpumask_of(0); 115 ckevt_timrot.cpumask = cpumask_of(0);
104 116
105 HW_TIMROT_ROTCTRL_CLR(BM_TIMROT_ROTCTRL_SFTRST | 117 stmp3xxx_reset_block(REGS_TIMROT_BASE, false);
106 BM_TIMROT_ROTCTRL_CLKGATE); 118
107 HW_TIMROT_TIMCOUNTn_WR(0, 0); 119 /* clear two timers */
108 HW_TIMROT_TIMCOUNTn_WR(1, 0); 120 __raw_writel(0, REGS_TIMROT_BASE + HW_TIMROT_TIMCOUNT0);
109 121 __raw_writel(0, REGS_TIMROT_BASE + HW_TIMROT_TIMCOUNT1);
110 HW_TIMROT_TIMCTRLn_WR(0, 122
111 (BF_TIMROT_TIMCTRLn_SELECT(8) | /* 32 kHz */ 123 /* configure them */
112 BF_TIMROT_TIMCTRLn_PRESCALE(0) | 124 __raw_writel(
113 BM_TIMROT_TIMCTRLn_RELOAD | 125 (8 << BP_TIMROT_TIMCTRLn_SELECT) | /* 32 kHz */
114 BM_TIMROT_TIMCTRLn_UPDATE | 126 BM_TIMROT_TIMCTRLn_RELOAD |
115 BM_TIMROT_TIMCTRLn_IRQ_EN)); 127 BM_TIMROT_TIMCTRLn_UPDATE |
116 HW_TIMROT_TIMCTRLn_WR(1, 128 BM_TIMROT_TIMCTRLn_IRQ_EN,
117 (BF_TIMROT_TIMCTRLn_SELECT(8) | /* 32 kHz */ 129 REGS_TIMROT_BASE + HW_TIMROT_TIMCTRL0);
118 BF_TIMROT_TIMCTRLn_PRESCALE(0) | 130 __raw_writel(
119 BM_TIMROT_TIMCTRLn_RELOAD | 131 (8 << BP_TIMROT_TIMCTRLn_SELECT) | /* 32 kHz */
120 BM_TIMROT_TIMCTRLn_UPDATE)); 132 BM_TIMROT_TIMCTRLn_RELOAD |
121 133 BM_TIMROT_TIMCTRLn_UPDATE |
122 HW_TIMROT_TIMCOUNTn_WR(0, CLOCK_TICK_RATE / HZ - 1); 134 BM_TIMROT_TIMCTRLn_IRQ_EN,
123 HW_TIMROT_TIMCOUNTn_WR(1, 0xFFFF); /* reload */ 135 REGS_TIMROT_BASE + HW_TIMROT_TIMCTRL1);
136
137 __raw_writel(CLOCK_TICK_RATE / HZ - 1,
138 REGS_TIMROT_BASE + HW_TIMROT_TIMCOUNT0);
139 __raw_writel(0xFFFF, REGS_TIMROT_BASE + HW_TIMROT_TIMCOUNT1);
124 140
125 setup_irq(IRQ_TIMER0, &stmp3xxx_timer_irq); 141 setup_irq(IRQ_TIMER0, &stmp3xxx_timer_irq);
126 142
@@ -132,30 +148,31 @@ static void __init stmp3xxx_init_timer(void)
132 148
133void stmp3xxx_suspend_timer(void) 149void stmp3xxx_suspend_timer(void)
134{ 150{
135 HW_TIMROT_TIMCTRLn_CLR(0, BM_TIMROT_TIMCTRLn_IRQ_EN); 151 stmp3xxx_clearl(BM_TIMROT_TIMCTRLn_IRQ_EN | BM_TIMROT_TIMCTRLn_IRQ,
136 HW_TIMROT_TIMCTRLn_CLR(0, (1<<15)); 152 REGS_TIMROT_BASE + HW_TIMROT_TIMCTRL0);
137 HW_TIMROT_ROTCTRL_SET(BM_TIMROT_ROTCTRL_CLKGATE); 153 stmp3xxx_setl(BM_TIMROT_ROTCTRL_CLKGATE,
154 REGS_TIMROT_BASE + HW_TIMROT_ROTCTRL);
138} 155}
139 156
140void stmp3xxx_resume_timer(void) 157void stmp3xxx_resume_timer(void)
141{ 158{
142 HW_TIMROT_ROTCTRL_CLR(BM_TIMROT_ROTCTRL_SFTRST | 159 stmp3xxx_clearl(BM_TIMROT_ROTCTRL_SFTRST | BM_TIMROT_ROTCTRL_CLKGATE,
143 BM_TIMROT_ROTCTRL_CLKGATE); 160 REGS_TIMROT_BASE + HW_TIMROT_ROTCTRL);
144 161 __raw_writel(
145 162 8 << BP_TIMROT_TIMCTRLn_SELECT | /* 32 kHz */
146 HW_TIMROT_TIMCTRLn_WR(0, 163 BM_TIMROT_TIMCTRLn_RELOAD |
147 (BF_TIMROT_TIMCTRLn_SELECT(8) | /* 32 kHz */ 164 BM_TIMROT_TIMCTRLn_UPDATE |
148 BF_TIMROT_TIMCTRLn_PRESCALE(0) | 165 BM_TIMROT_TIMCTRLn_IRQ_EN,
149 BM_TIMROT_TIMCTRLn_UPDATE | 166 REGS_TIMROT_BASE + HW_TIMROT_TIMCTRL0);
150 BM_TIMROT_TIMCTRLn_IRQ_EN)); 167 __raw_writel(
151 HW_TIMROT_TIMCTRLn_WR(1, 168 8 << BP_TIMROT_TIMCTRLn_SELECT | /* 32 kHz */
152 (BF_TIMROT_TIMCTRLn_SELECT(8) | /* 32 kHz */ 169 BM_TIMROT_TIMCTRLn_RELOAD |
153 BF_TIMROT_TIMCTRLn_PRESCALE(0) | 170 BM_TIMROT_TIMCTRLn_UPDATE |
154 BM_TIMROT_TIMCTRLn_RELOAD | 171 BM_TIMROT_TIMCTRLn_IRQ_EN,
155 BM_TIMROT_TIMCTRLn_UPDATE)); 172 REGS_TIMROT_BASE + HW_TIMROT_TIMCTRL1);
156 173 __raw_writel(CLOCK_TICK_RATE / HZ - 1,
157 HW_TIMROT_TIMCOUNTn_WR(0, CLOCK_TICK_RATE / HZ - 1); 174 REGS_TIMROT_BASE + HW_TIMROT_TIMCOUNT0);
158 HW_TIMROT_TIMCOUNTn_WR(1, 0xFFFF); /* reload */ 175 __raw_writel(0xFFFF, REGS_TIMROT_BASE + HW_TIMROT_TIMCOUNT1);
159} 176}
160 177
161#else 178#else