aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-ep93xx
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-ep93xx')
-rw-r--r--arch/arm/mach-ep93xx/adssphere.c2
-rw-r--r--arch/arm/mach-ep93xx/core.c35
-rw-r--r--arch/arm/mach-ep93xx/edb93xx.c16
-rw-r--r--arch/arm/mach-ep93xx/gesbc9312.c2
-rw-r--r--arch/arm/mach-ep93xx/include/mach/platform.h2
-rw-r--r--arch/arm/mach-ep93xx/micro9.c8
-rw-r--r--arch/arm/mach-ep93xx/simone.c2
-rw-r--r--arch/arm/mach-ep93xx/snappercl15.c2
-rw-r--r--arch/arm/mach-ep93xx/ts72xx.c2
-rw-r--r--arch/arm/mach-ep93xx/vision_ep9307.c2
10 files changed, 38 insertions, 35 deletions
diff --git a/arch/arm/mach-ep93xx/adssphere.c b/arch/arm/mach-ep93xx/adssphere.c
index 41383bf03d4b..82d9c788535a 100644
--- a/arch/arm/mach-ep93xx/adssphere.c
+++ b/arch/arm/mach-ep93xx/adssphere.c
@@ -40,7 +40,7 @@ MACHINE_START(ADSSPHERE, "ADS Sphere board")
40 .map_io = ep93xx_map_io, 40 .map_io = ep93xx_map_io,
41 .init_irq = ep93xx_init_irq, 41 .init_irq = ep93xx_init_irq,
42 .handle_irq = vic_handle_irq, 42 .handle_irq = vic_handle_irq,
43 .timer = &ep93xx_timer, 43 .init_time = ep93xx_timer_init,
44 .init_machine = adssphere_init_machine, 44 .init_machine = adssphere_init_machine,
45 .init_late = ep93xx_init_late, 45 .init_late = ep93xx_init_late,
46 .restart = ep93xx_restart, 46 .restart = ep93xx_restart,
diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c
index e85bf17f2d2a..ee27b4b0ab07 100644
--- a/arch/arm/mach-ep93xx/core.c
+++ b/arch/arm/mach-ep93xx/core.c
@@ -140,11 +140,29 @@ static struct irqaction ep93xx_timer_irq = {
140 .handler = ep93xx_timer_interrupt, 140 .handler = ep93xx_timer_interrupt,
141}; 141};
142 142
143static void __init ep93xx_timer_init(void) 143static u32 ep93xx_gettimeoffset(void)
144{
145 int offset;
146
147 offset = __raw_readl(EP93XX_TIMER4_VALUE_LOW) - last_jiffy_time;
148
149 /*
150 * Timer 4 is based on a 983.04 kHz reference clock,
151 * so dividing by 983040 gives the fraction of a second,
152 * so dividing by 0.983040 converts to uS.
153 * Refactor the calculation to avoid overflow.
154 * Finally, multiply by 1000 to give nS.
155 */
156 return (offset + (53 * offset / 3072)) * 1000;
157}
158
159void __init ep93xx_timer_init(void)
144{ 160{
145 u32 tmode = EP93XX_TIMER123_CONTROL_MODE | 161 u32 tmode = EP93XX_TIMER123_CONTROL_MODE |
146 EP93XX_TIMER123_CONTROL_CLKSEL; 162 EP93XX_TIMER123_CONTROL_CLKSEL;
147 163
164 arch_gettimeoffset = ep93xx_gettimeoffset;
165
148 /* Enable periodic HZ timer. */ 166 /* Enable periodic HZ timer. */
149 __raw_writel(tmode, EP93XX_TIMER1_CONTROL); 167 __raw_writel(tmode, EP93XX_TIMER1_CONTROL);
150 __raw_writel(TIMER1_RELOAD, EP93XX_TIMER1_LOAD); 168 __raw_writel(TIMER1_RELOAD, EP93XX_TIMER1_LOAD);
@@ -158,21 +176,6 @@ static void __init ep93xx_timer_init(void)
158 setup_irq(IRQ_EP93XX_TIMER1, &ep93xx_timer_irq); 176 setup_irq(IRQ_EP93XX_TIMER1, &ep93xx_timer_irq);
159} 177}
160 178
161static unsigned long ep93xx_gettimeoffset(void)
162{
163 int offset;
164
165 offset = __raw_readl(EP93XX_TIMER4_VALUE_LOW) - last_jiffy_time;
166
167 /* Calculate (1000000 / 983040) * offset. */
168 return offset + (53 * offset / 3072);
169}
170
171struct sys_timer ep93xx_timer = {
172 .init = ep93xx_timer_init,
173 .offset = ep93xx_gettimeoffset,
174};
175
176 179
177/************************************************************************* 180/*************************************************************************
178 * EP93xx IRQ handling 181 * EP93xx IRQ handling
diff --git a/arch/arm/mach-ep93xx/edb93xx.c b/arch/arm/mach-ep93xx/edb93xx.c
index b8f53d57a299..ac260519c9e9 100644
--- a/arch/arm/mach-ep93xx/edb93xx.c
+++ b/arch/arm/mach-ep93xx/edb93xx.c
@@ -277,7 +277,7 @@ MACHINE_START(EDB9301, "Cirrus Logic EDB9301 Evaluation Board")
277 .map_io = ep93xx_map_io, 277 .map_io = ep93xx_map_io,
278 .init_irq = ep93xx_init_irq, 278 .init_irq = ep93xx_init_irq,
279 .handle_irq = vic_handle_irq, 279 .handle_irq = vic_handle_irq,
280 .timer = &ep93xx_timer, 280 .init_time = ep93xx_timer_init,
281 .init_machine = edb93xx_init_machine, 281 .init_machine = edb93xx_init_machine,
282 .init_late = ep93xx_init_late, 282 .init_late = ep93xx_init_late,
283 .restart = ep93xx_restart, 283 .restart = ep93xx_restart,
@@ -291,7 +291,7 @@ MACHINE_START(EDB9302, "Cirrus Logic EDB9302 Evaluation Board")
291 .map_io = ep93xx_map_io, 291 .map_io = ep93xx_map_io,
292 .init_irq = ep93xx_init_irq, 292 .init_irq = ep93xx_init_irq,
293 .handle_irq = vic_handle_irq, 293 .handle_irq = vic_handle_irq,
294 .timer = &ep93xx_timer, 294 .init_time = ep93xx_timer_init,
295 .init_machine = edb93xx_init_machine, 295 .init_machine = edb93xx_init_machine,
296 .init_late = ep93xx_init_late, 296 .init_late = ep93xx_init_late,
297 .restart = ep93xx_restart, 297 .restart = ep93xx_restart,
@@ -305,7 +305,7 @@ MACHINE_START(EDB9302A, "Cirrus Logic EDB9302A Evaluation Board")
305 .map_io = ep93xx_map_io, 305 .map_io = ep93xx_map_io,
306 .init_irq = ep93xx_init_irq, 306 .init_irq = ep93xx_init_irq,
307 .handle_irq = vic_handle_irq, 307 .handle_irq = vic_handle_irq,
308 .timer = &ep93xx_timer, 308 .init_time = ep93xx_timer_init,
309 .init_machine = edb93xx_init_machine, 309 .init_machine = edb93xx_init_machine,
310 .init_late = ep93xx_init_late, 310 .init_late = ep93xx_init_late,
311 .restart = ep93xx_restart, 311 .restart = ep93xx_restart,
@@ -319,7 +319,7 @@ MACHINE_START(EDB9307, "Cirrus Logic EDB9307 Evaluation Board")
319 .map_io = ep93xx_map_io, 319 .map_io = ep93xx_map_io,
320 .init_irq = ep93xx_init_irq, 320 .init_irq = ep93xx_init_irq,
321 .handle_irq = vic_handle_irq, 321 .handle_irq = vic_handle_irq,
322 .timer = &ep93xx_timer, 322 .init_time = ep93xx_timer_init,
323 .init_machine = edb93xx_init_machine, 323 .init_machine = edb93xx_init_machine,
324 .init_late = ep93xx_init_late, 324 .init_late = ep93xx_init_late,
325 .restart = ep93xx_restart, 325 .restart = ep93xx_restart,
@@ -333,7 +333,7 @@ MACHINE_START(EDB9307A, "Cirrus Logic EDB9307A Evaluation Board")
333 .map_io = ep93xx_map_io, 333 .map_io = ep93xx_map_io,
334 .init_irq = ep93xx_init_irq, 334 .init_irq = ep93xx_init_irq,
335 .handle_irq = vic_handle_irq, 335 .handle_irq = vic_handle_irq,
336 .timer = &ep93xx_timer, 336 .init_time = ep93xx_timer_init,
337 .init_machine = edb93xx_init_machine, 337 .init_machine = edb93xx_init_machine,
338 .init_late = ep93xx_init_late, 338 .init_late = ep93xx_init_late,
339 .restart = ep93xx_restart, 339 .restart = ep93xx_restart,
@@ -347,7 +347,7 @@ MACHINE_START(EDB9312, "Cirrus Logic EDB9312 Evaluation Board")
347 .map_io = ep93xx_map_io, 347 .map_io = ep93xx_map_io,
348 .init_irq = ep93xx_init_irq, 348 .init_irq = ep93xx_init_irq,
349 .handle_irq = vic_handle_irq, 349 .handle_irq = vic_handle_irq,
350 .timer = &ep93xx_timer, 350 .init_time = ep93xx_timer_init,
351 .init_machine = edb93xx_init_machine, 351 .init_machine = edb93xx_init_machine,
352 .init_late = ep93xx_init_late, 352 .init_late = ep93xx_init_late,
353 .restart = ep93xx_restart, 353 .restart = ep93xx_restart,
@@ -361,7 +361,7 @@ MACHINE_START(EDB9315, "Cirrus Logic EDB9315 Evaluation Board")
361 .map_io = ep93xx_map_io, 361 .map_io = ep93xx_map_io,
362 .init_irq = ep93xx_init_irq, 362 .init_irq = ep93xx_init_irq,
363 .handle_irq = vic_handle_irq, 363 .handle_irq = vic_handle_irq,
364 .timer = &ep93xx_timer, 364 .init_time = ep93xx_timer_init,
365 .init_machine = edb93xx_init_machine, 365 .init_machine = edb93xx_init_machine,
366 .init_late = ep93xx_init_late, 366 .init_late = ep93xx_init_late,
367 .restart = ep93xx_restart, 367 .restart = ep93xx_restart,
@@ -375,7 +375,7 @@ MACHINE_START(EDB9315A, "Cirrus Logic EDB9315A Evaluation Board")
375 .map_io = ep93xx_map_io, 375 .map_io = ep93xx_map_io,
376 .init_irq = ep93xx_init_irq, 376 .init_irq = ep93xx_init_irq,
377 .handle_irq = vic_handle_irq, 377 .handle_irq = vic_handle_irq,
378 .timer = &ep93xx_timer, 378 .init_time = ep93xx_timer_init,
379 .init_machine = edb93xx_init_machine, 379 .init_machine = edb93xx_init_machine,
380 .init_late = ep93xx_init_late, 380 .init_late = ep93xx_init_late,
381 .restart = ep93xx_restart, 381 .restart = ep93xx_restart,
diff --git a/arch/arm/mach-ep93xx/gesbc9312.c b/arch/arm/mach-ep93xx/gesbc9312.c
index 7fd705b5efe4..76c50f42bd71 100644
--- a/arch/arm/mach-ep93xx/gesbc9312.c
+++ b/arch/arm/mach-ep93xx/gesbc9312.c
@@ -40,7 +40,7 @@ MACHINE_START(GESBC9312, "Glomation GESBC-9312-sx")
40 .map_io = ep93xx_map_io, 40 .map_io = ep93xx_map_io,
41 .init_irq = ep93xx_init_irq, 41 .init_irq = ep93xx_init_irq,
42 .handle_irq = vic_handle_irq, 42 .handle_irq = vic_handle_irq,
43 .timer = &ep93xx_timer, 43 .init_time = ep93xx_timer_init,
44 .init_machine = gesbc9312_init_machine, 44 .init_machine = gesbc9312_init_machine,
45 .init_late = ep93xx_init_late, 45 .init_late = ep93xx_init_late,
46 .restart = ep93xx_restart, 46 .restart = ep93xx_restart,
diff --git a/arch/arm/mach-ep93xx/include/mach/platform.h b/arch/arm/mach-ep93xx/include/mach/platform.h
index 33a5122c6dc8..a14e1b37beff 100644
--- a/arch/arm/mach-ep93xx/include/mach/platform.h
+++ b/arch/arm/mach-ep93xx/include/mach/platform.h
@@ -53,7 +53,7 @@ int ep93xx_ide_acquire_gpio(struct platform_device *pdev);
53void ep93xx_ide_release_gpio(struct platform_device *pdev); 53void ep93xx_ide_release_gpio(struct platform_device *pdev);
54 54
55void ep93xx_init_devices(void); 55void ep93xx_init_devices(void);
56extern struct sys_timer ep93xx_timer; 56extern void ep93xx_timer_init(void);
57 57
58void ep93xx_restart(char, const char *); 58void ep93xx_restart(char, const char *);
59void ep93xx_init_late(void); 59void ep93xx_init_late(void);
diff --git a/arch/arm/mach-ep93xx/micro9.c b/arch/arm/mach-ep93xx/micro9.c
index 3d7cdab725b2..777cd2170f8a 100644
--- a/arch/arm/mach-ep93xx/micro9.c
+++ b/arch/arm/mach-ep93xx/micro9.c
@@ -83,7 +83,7 @@ MACHINE_START(MICRO9, "Contec Micro9-High")
83 .map_io = ep93xx_map_io, 83 .map_io = ep93xx_map_io,
84 .init_irq = ep93xx_init_irq, 84 .init_irq = ep93xx_init_irq,
85 .handle_irq = vic_handle_irq, 85 .handle_irq = vic_handle_irq,
86 .timer = &ep93xx_timer, 86 .init_time = ep93xx_timer_init,
87 .init_machine = micro9_init_machine, 87 .init_machine = micro9_init_machine,
88 .init_late = ep93xx_init_late, 88 .init_late = ep93xx_init_late,
89 .restart = ep93xx_restart, 89 .restart = ep93xx_restart,
@@ -97,7 +97,7 @@ MACHINE_START(MICRO9M, "Contec Micro9-Mid")
97 .map_io = ep93xx_map_io, 97 .map_io = ep93xx_map_io,
98 .init_irq = ep93xx_init_irq, 98 .init_irq = ep93xx_init_irq,
99 .handle_irq = vic_handle_irq, 99 .handle_irq = vic_handle_irq,
100 .timer = &ep93xx_timer, 100 .init_time = ep93xx_timer_init,
101 .init_machine = micro9_init_machine, 101 .init_machine = micro9_init_machine,
102 .init_late = ep93xx_init_late, 102 .init_late = ep93xx_init_late,
103 .restart = ep93xx_restart, 103 .restart = ep93xx_restart,
@@ -111,7 +111,7 @@ MACHINE_START(MICRO9L, "Contec Micro9-Lite")
111 .map_io = ep93xx_map_io, 111 .map_io = ep93xx_map_io,
112 .init_irq = ep93xx_init_irq, 112 .init_irq = ep93xx_init_irq,
113 .handle_irq = vic_handle_irq, 113 .handle_irq = vic_handle_irq,
114 .timer = &ep93xx_timer, 114 .init_time = ep93xx_timer_init,
115 .init_machine = micro9_init_machine, 115 .init_machine = micro9_init_machine,
116 .init_late = ep93xx_init_late, 116 .init_late = ep93xx_init_late,
117 .restart = ep93xx_restart, 117 .restart = ep93xx_restart,
@@ -125,7 +125,7 @@ MACHINE_START(MICRO9S, "Contec Micro9-Slim")
125 .map_io = ep93xx_map_io, 125 .map_io = ep93xx_map_io,
126 .init_irq = ep93xx_init_irq, 126 .init_irq = ep93xx_init_irq,
127 .handle_irq = vic_handle_irq, 127 .handle_irq = vic_handle_irq,
128 .timer = &ep93xx_timer, 128 .init_time = ep93xx_timer_init,
129 .init_machine = micro9_init_machine, 129 .init_machine = micro9_init_machine,
130 .init_late = ep93xx_init_late, 130 .init_late = ep93xx_init_late,
131 .restart = ep93xx_restart, 131 .restart = ep93xx_restart,
diff --git a/arch/arm/mach-ep93xx/simone.c b/arch/arm/mach-ep93xx/simone.c
index 0eb3f17a6fa2..6ff39ee2ad5d 100644
--- a/arch/arm/mach-ep93xx/simone.c
+++ b/arch/arm/mach-ep93xx/simone.c
@@ -84,7 +84,7 @@ MACHINE_START(SIM_ONE, "Simplemachines Sim.One Board")
84 .map_io = ep93xx_map_io, 84 .map_io = ep93xx_map_io,
85 .init_irq = ep93xx_init_irq, 85 .init_irq = ep93xx_init_irq,
86 .handle_irq = vic_handle_irq, 86 .handle_irq = vic_handle_irq,
87 .timer = &ep93xx_timer, 87 .init_time = ep93xx_timer_init,
88 .init_machine = simone_init_machine, 88 .init_machine = simone_init_machine,
89 .init_late = ep93xx_init_late, 89 .init_late = ep93xx_init_late,
90 .restart = ep93xx_restart, 90 .restart = ep93xx_restart,
diff --git a/arch/arm/mach-ep93xx/snappercl15.c b/arch/arm/mach-ep93xx/snappercl15.c
index 50043eef1cf2..6434c07dbf96 100644
--- a/arch/arm/mach-ep93xx/snappercl15.c
+++ b/arch/arm/mach-ep93xx/snappercl15.c
@@ -177,7 +177,7 @@ MACHINE_START(SNAPPER_CL15, "Bluewater Systems Snapper CL15")
177 .map_io = ep93xx_map_io, 177 .map_io = ep93xx_map_io,
178 .init_irq = ep93xx_init_irq, 178 .init_irq = ep93xx_init_irq,
179 .handle_irq = vic_handle_irq, 179 .handle_irq = vic_handle_irq,
180 .timer = &ep93xx_timer, 180 .init_time = ep93xx_timer_init,
181 .init_machine = snappercl15_init_machine, 181 .init_machine = snappercl15_init_machine,
182 .init_late = ep93xx_init_late, 182 .init_late = ep93xx_init_late,
183 .restart = ep93xx_restart, 183 .restart = ep93xx_restart,
diff --git a/arch/arm/mach-ep93xx/ts72xx.c b/arch/arm/mach-ep93xx/ts72xx.c
index 3c4c233391dc..e4fa0d3760a5 100644
--- a/arch/arm/mach-ep93xx/ts72xx.c
+++ b/arch/arm/mach-ep93xx/ts72xx.c
@@ -247,7 +247,7 @@ MACHINE_START(TS72XX, "Technologic Systems TS-72xx SBC")
247 .map_io = ts72xx_map_io, 247 .map_io = ts72xx_map_io,
248 .init_irq = ep93xx_init_irq, 248 .init_irq = ep93xx_init_irq,
249 .handle_irq = vic_handle_irq, 249 .handle_irq = vic_handle_irq,
250 .timer = &ep93xx_timer, 250 .init_time = ep93xx_timer_init,
251 .init_machine = ts72xx_init_machine, 251 .init_machine = ts72xx_init_machine,
252 .init_late = ep93xx_init_late, 252 .init_late = ep93xx_init_late,
253 .restart = ep93xx_restart, 253 .restart = ep93xx_restart,
diff --git a/arch/arm/mach-ep93xx/vision_ep9307.c b/arch/arm/mach-ep93xx/vision_ep9307.c
index ba92e25e3016..8610ba293991 100644
--- a/arch/arm/mach-ep93xx/vision_ep9307.c
+++ b/arch/arm/mach-ep93xx/vision_ep9307.c
@@ -365,7 +365,7 @@ MACHINE_START(VISION_EP9307, "Vision Engraving Systems EP9307")
365 .map_io = vision_map_io, 365 .map_io = vision_map_io,
366 .init_irq = ep93xx_init_irq, 366 .init_irq = ep93xx_init_irq,
367 .handle_irq = vic_handle_irq, 367 .handle_irq = vic_handle_irq,
368 .timer = &ep93xx_timer, 368 .init_time = ep93xx_timer_init,
369 .init_machine = vision_init_machine, 369 .init_machine = vision_init_machine,
370 .init_late = ep93xx_init_late, 370 .init_late = ep93xx_init_late,
371 .restart = ep93xx_restart, 371 .restart = ep93xx_restart,