aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYoshinori Sato <ysato@users.sourceforge.jp>2008-10-16 01:01:17 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-10-16 14:21:29 -0400
commit81d423e280d193d351f41eacdb3f82c3bb9610c1 (patch)
tree37395cbb8104d0a78ae1e2d7d1ca67bff817eeae
parente0b0f9e4ead2468f84c26332ec42b118e76af572 (diff)
h8300: update timer handler - misc update
- Update selection - Update common timer handler - Add support functions Signed-off-by: Yoshinori Sato <ysato@users.sourceforge.jp> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--arch/h8300/Kconfig.cpu115
-rw-r--r--arch/h8300/include/asm/io.h34
-rw-r--r--arch/h8300/kernel/Makefile2
-rw-r--r--arch/h8300/kernel/time.c29
4 files changed, 97 insertions, 83 deletions
diff --git a/arch/h8300/Kconfig.cpu b/arch/h8300/Kconfig.cpu
index 582797db9603..b65dcfe51d9c 100644
--- a/arch/h8300/Kconfig.cpu
+++ b/arch/h8300/Kconfig.cpu
@@ -1,5 +1,7 @@
1menu "Processor type and features" 1menu "Processor type and features"
2 2
3source "kernel/time/Kconfig"
4
3choice 5choice
4 prompt "H8/300 platform" 6 prompt "H8/300 platform"
5 default H8300H_GENERIC 7 default H8300H_GENERIC
@@ -11,6 +13,7 @@ config H8300H_GENERIC
11 13
12config H8300H_AKI3068NET 14config H8300H_AKI3068NET
13 bool "AE-3068/69" 15 bool "AE-3068/69"
16 select CONFIG_H83068
14 help 17 help
15 AKI-H8/3068F / AKI-H8/3069F Flashmicom LAN Board Support 18 AKI-H8/3068F / AKI-H8/3069F Flashmicom LAN Board Support
16 More Information. (Japanese Only) 19 More Information. (Japanese Only)
@@ -21,6 +24,7 @@ config H8300H_AKI3068NET
21 24
22config H8300H_H8MAX 25config H8300H_H8MAX
23 bool "H8MAX" 26 bool "H8MAX"
27 select CONFIG_H83068
24 help 28 help
25 H8MAX Evaluation Board Support 29 H8MAX Evaluation Board Support
26 More Information. (Japanese Only) 30 More Information. (Japanese Only)
@@ -28,6 +32,7 @@ config H8300H_H8MAX
28 32
29config H8300H_SIM 33config H8300H_SIM
30 bool "H8/300H Simulator" 34 bool "H8/300H Simulator"
35 select CONFIG_H83007
31 help 36 help
32 GDB Simulator Support 37 GDB Simulator Support
33 More Information. 38 More Information.
@@ -40,6 +45,7 @@ config H8S_GENERIC
40 45
41config H8S_EDOSK2674 46config H8S_EDOSK2674
42 bool "EDOSK-2674" 47 bool "EDOSK-2674"
48 select CONFIG_H8S2768
43 help 49 help
44 Renesas EDOSK-2674 Evaluation Board Support 50 Renesas EDOSK-2674 Evaluation Board Support
45 More Information. 51 More Information.
@@ -55,44 +61,37 @@ config H8S_SIM
55 61
56endchoice 62endchoice
57 63
58if (H8300H_GENERIC || H8S_GENERIC)
59menu "Detail Selection"
60if (H8300H_GENERIC)
61choice 64choice
62 prompt "CPU Selection" 65 prompt "CPU Selection"
63 66
64config H83002 67config H83002
65 bool "H8/3001,3002,3003" 68 bool "H8/3001,3002,3003"
69 select CPU_H8300H
66 70
67config H83007 71config H83007
68 bool "H8/3006,3007" 72 bool "H8/3006,3007"
73 select CPU_H8300H
69 74
70config H83048 75config H83048
71 bool "H8/3044,3045,3046,3047,3048,3052" 76 bool "H8/3044,3045,3046,3047,3048,3052"
77 select CPU_H8300H
72 78
73config H83068 79config H83068
74 bool "H8/3065,3066,3067,3068,3069" 80 bool "H8/3065,3066,3067,3068,3069"
75endchoice 81 select CPU_H8300H
76endif
77
78if (H8S_GENERIC)
79choice
80 prompt "CPU Selection"
81 82
82config H8S2678 83config H8S2678
83 bool "H8S/2670,2673,2674R,2675,2676" 84 bool "H8S/2670,2673,2674R,2675,2676"
85 select CPU_H8S
86
84endchoice 87endchoice
85endif
86 88
87config CPU_CLOCK 89config CPU_CLOCK
88 int "CPU Clock Frequency (/1KHz)" 90 int "CPU Clock Frequency (/1KHz)"
89 default "20000" 91 default "20000"
90 help 92 help
91 CPU Clock Frequency divide to 1000 93 CPU Clock Frequency divide to 1000
92endmenu
93endif
94 94
95if (H8300H_GENERIC || H8S_GENERIC || H8300H_SIM || H8S_SIM || H8S_EDOSK2674)
96choice 95choice
97 prompt "Kernel executes from" 96 prompt "Kernel executes from"
98 ---help--- 97 ---help---
@@ -107,75 +106,61 @@ config ROMKERNEL
107 bool "ROM" 106 bool "ROM"
108 help 107 help
109 The kernel will be resident in FLASH/ROM when running. 108 The kernel will be resident in FLASH/ROM when running.
110
111endchoice 109endchoice
112endif
113 110
114if (H8300H_AKI3068NET)
115config H83068
116 bool
117 default y
118 111
119config CPU_CLOCK 112config CPU_H8300H
120 int
121 default "20000"
122
123config RAMKERNEL
124 bool 113 bool
114 depends on (H83002 || H83007 || H83048 || H83068)
125 default y 115 default y
126endif
127 116
128if (H8300H_H8MAX) 117config CPU_H8S
129config H83068
130 bool 118 bool
119 depends on H8S2678
131 default y 120 default y
132 121
133config CPU_CLOCK 122choice
134 int 123 prompt "Timer"
135 default 25000 124config H8300_TIMER8
125 bool "8bit timer (2ch cascade)"
126 depends on (H83007 || H83068 || H8S2678)
136 127
137config RAMKERNEL 128config H8300_TIMER16
138 bool 129 bool "16bit timer"
139 default y 130 depends on (H83007 || H83068)
140endif
141 131
142if (H8300H_SIM) 132config H8300_ITU
143config H83007 133 bool "ITU"
144 bool 134 depends on (H83002 || H83048)
145 default y
146 135
147config CPU_CLOCK 136config H8300_TPU
148 int 137 bool "TPU"
149 default "16000" 138 depends on H8S2678
150endif 139endchoice
151 140
152if (H8S_EDOSK2674) 141if H8300_TIMER8
153config H8S2678 142choice
154 bool 143 prompt "Timer Channel"
155 default y 144config H8300_TIMER8_CH0
156config CPU_CLOCK 145 bool "Channel 0"
157 int 146config H8300_TIMER8_CH2
158 default 33000 147 bool "Channel 2"
148 depends on CPU_H8300H
149endchoice
159endif 150endif
160 151
161if (H8S_SIM) 152config H8300_TIMER16_CH
162config H8S2678 153 int "16bit timer channel (0 - 2)"
163 bool 154 depends on H8300_TIMER16
164 default y 155 range 0 2
165config CPU_CLOCK
166 int
167 default 33000
168endif
169 156
170config CPU_H8300H 157config H8300_ITU_CH
171 bool 158 int "ITU channel"
172 depends on (H83002 || H83007 || H83048 || H83068) 159 depends on H8300_ITU
173 default y
174 160
175config CPU_H8S 161config H8300_TPU_CH
176 bool 162 int "TPU channel"
177 depends on H8S2678 163 depends on H8300_TPU
178 default y
179 164
180config PREEMPT 165config PREEMPT
181 bool "Preemptible Kernel" 166 bool "Preemptible Kernel"
diff --git a/arch/h8300/include/asm/io.h b/arch/h8300/include/asm/io.h
index 26dc6ccd9441..33e842f3284b 100644
--- a/arch/h8300/include/asm/io.h
+++ b/arch/h8300/include/asm/io.h
@@ -295,6 +295,40 @@ static __inline__ void ctrl_outl(unsigned long b, unsigned long addr)
295 *(volatile unsigned long*)addr = b; 295 *(volatile unsigned long*)addr = b;
296} 296}
297 297
298static __inline__ void ctrl_bclr(int b, unsigned long addr)
299{
300 if (__builtin_constant_p(b))
301 switch (b) {
302 case 0: __asm__("bclr #0,@%0"::"r"(addr)); break;
303 case 1: __asm__("bclr #1,@%0"::"r"(addr)); break;
304 case 2: __asm__("bclr #2,@%0"::"r"(addr)); break;
305 case 3: __asm__("bclr #3,@%0"::"r"(addr)); break;
306 case 4: __asm__("bclr #4,@%0"::"r"(addr)); break;
307 case 5: __asm__("bclr #5,@%0"::"r"(addr)); break;
308 case 6: __asm__("bclr #6,@%0"::"r"(addr)); break;
309 case 7: __asm__("bclr #7,@%0"::"r"(addr)); break;
310 }
311 else
312 __asm__("bclr %w0,@%1"::"r"(b), "r"(addr));
313}
314
315static __inline__ void ctrl_bset(int b, unsigned long addr)
316{
317 if (__builtin_constant_p(b))
318 switch (b) {
319 case 0: __asm__("bset #0,@%0"::"r"(addr)); break;
320 case 1: __asm__("bset #1,@%0"::"r"(addr)); break;
321 case 2: __asm__("bset #2,@%0"::"r"(addr)); break;
322 case 3: __asm__("bset #3,@%0"::"r"(addr)); break;
323 case 4: __asm__("bset #4,@%0"::"r"(addr)); break;
324 case 5: __asm__("bset #5,@%0"::"r"(addr)); break;
325 case 6: __asm__("bset #6,@%0"::"r"(addr)); break;
326 case 7: __asm__("bset #7,@%0"::"r"(addr)); break;
327 }
328 else
329 __asm__("bset %w0,@%1"::"r"(b), "r"(addr));
330}
331
298/* Pages to physical address... */ 332/* Pages to physical address... */
299#define page_to_phys(page) ((page - mem_map) << PAGE_SHIFT) 333#define page_to_phys(page) ((page - mem_map) << PAGE_SHIFT)
300#define page_to_bus(page) ((page - mem_map) << PAGE_SHIFT) 334#define page_to_bus(page) ((page - mem_map) << PAGE_SHIFT)
diff --git a/arch/h8300/kernel/Makefile b/arch/h8300/kernel/Makefile
index 6c248c3c5c3b..8d4d2a54be9e 100644
--- a/arch/h8300/kernel/Makefile
+++ b/arch/h8300/kernel/Makefile
@@ -7,6 +7,6 @@ extra-y := vmlinux.lds
7obj-y := process.o traps.o ptrace.o irq.o \ 7obj-y := process.o traps.o ptrace.o irq.o \
8 sys_h8300.o time.o signal.o \ 8 sys_h8300.o time.o signal.o \
9 setup.o gpio.o init_task.o syscalls.o \ 9 setup.o gpio.o init_task.o syscalls.o \
10 entry.o 10 entry.o timer/
11 11
12obj-$(CONFIG_MODULES) += module.o h8300_ksyms.o 12obj-$(CONFIG_MODULES) += module.o h8300_ksyms.o
diff --git a/arch/h8300/kernel/time.c b/arch/h8300/kernel/time.c
index e37c835e67cf..7f2d6cfbb4b6 100644
--- a/arch/h8300/kernel/time.c
+++ b/arch/h8300/kernel/time.c
@@ -27,27 +27,21 @@
27#include <linux/profile.h> 27#include <linux/profile.h>
28 28
29#include <asm/io.h> 29#include <asm/io.h>
30#include <asm/target_time.h> 30#include <asm/timer.h>
31 31
32#define TICK_SIZE (tick_nsec / 1000) 32#define TICK_SIZE (tick_nsec / 1000)
33 33
34/* 34void h8300_timer_tick(void)
35 * timer_interrupt() needs to keep up the real-time clock,
36 * as well as call the "do_timer()" routine every clocktick
37 */
38static void timer_interrupt(int irq, void *dummy, struct pt_regs * regs)
39{ 35{
40 /* may need to kick the hardware timer */ 36 if (current->pid)
41 platform_timer_eoi(); 37 profile_tick(CPU_PROFILING);
42 38 write_seqlock(&xtime_lock);
43 do_timer(1); 39 do_timer(1);
44#ifndef CONFIG_SMP 40 write_sequnlock(&xtime_lock);
45 update_process_times(user_mode(regs)); 41 update_process_times(user_mode(get_irq_regs()));
46#endif
47 profile_tick(CPU_PROFILING);
48} 42}
49 43
50void time_init(void) 44void __init time_init(void)
51{ 45{
52 unsigned int year, mon, day, hour, min, sec; 46 unsigned int year, mon, day, hour, min, sec;
53 47
@@ -57,12 +51,13 @@ void time_init(void)
57 year = 1980; 51 year = 1980;
58 mon = day = 1; 52 mon = day = 1;
59 hour = min = sec = 0; 53 hour = min = sec = 0;
60 platform_gettod (&year, &mon, &day, &hour, &min, &sec); 54#ifdef CONFIG_H8300_GETTOD
61 55 h8300_gettod (&year, &mon, &day, &hour, &min, &sec);
56#endif
62 if ((year += 1900) < 1970) 57 if ((year += 1900) < 1970)
63 year += 100; 58 year += 100;
64 xtime.tv_sec = mktime(year, mon, day, hour, min, sec); 59 xtime.tv_sec = mktime(year, mon, day, hour, min, sec);
65 xtime.tv_nsec = 0; 60 xtime.tv_nsec = 0;
66 61
67 platform_timer_setup(timer_interrupt); 62 h8300_timer_setup();
68} 63}