diff options
| author | Yoshinori Sato <ysato@users.sourceforge.jp> | 2008-10-16 01:01:17 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-16 14:21:29 -0400 |
| commit | 81d423e280d193d351f41eacdb3f82c3bb9610c1 (patch) | |
| tree | 37395cbb8104d0a78ae1e2d7d1ca67bff817eeae /arch/h8300 | |
| parent | e0b0f9e4ead2468f84c26332ec42b118e76af572 (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>
Diffstat (limited to 'arch/h8300')
| -rw-r--r-- | arch/h8300/Kconfig.cpu | 115 | ||||
| -rw-r--r-- | arch/h8300/include/asm/io.h | 34 | ||||
| -rw-r--r-- | arch/h8300/kernel/Makefile | 2 | ||||
| -rw-r--r-- | arch/h8300/kernel/time.c | 29 |
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 @@ | |||
| 1 | menu "Processor type and features" | 1 | menu "Processor type and features" |
| 2 | 2 | ||
| 3 | source "kernel/time/Kconfig" | ||
| 4 | |||
| 3 | choice | 5 | choice |
| 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 | ||
| 12 | config H8300H_AKI3068NET | 14 | config 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 | ||
| 22 | config H8300H_H8MAX | 25 | config 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 | ||
| 29 | config H8300H_SIM | 33 | config 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 | ||
| 41 | config H8S_EDOSK2674 | 46 | config 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 | ||
| 56 | endchoice | 62 | endchoice |
| 57 | 63 | ||
| 58 | if (H8300H_GENERIC || H8S_GENERIC) | ||
| 59 | menu "Detail Selection" | ||
| 60 | if (H8300H_GENERIC) | ||
| 61 | choice | 64 | choice |
| 62 | prompt "CPU Selection" | 65 | prompt "CPU Selection" |
| 63 | 66 | ||
| 64 | config H83002 | 67 | config H83002 |
| 65 | bool "H8/3001,3002,3003" | 68 | bool "H8/3001,3002,3003" |
| 69 | select CPU_H8300H | ||
| 66 | 70 | ||
| 67 | config H83007 | 71 | config H83007 |
| 68 | bool "H8/3006,3007" | 72 | bool "H8/3006,3007" |
| 73 | select CPU_H8300H | ||
| 69 | 74 | ||
| 70 | config H83048 | 75 | config 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 | ||
| 73 | config H83068 | 79 | config H83068 |
| 74 | bool "H8/3065,3066,3067,3068,3069" | 80 | bool "H8/3065,3066,3067,3068,3069" |
| 75 | endchoice | 81 | select CPU_H8300H |
| 76 | endif | ||
| 77 | |||
| 78 | if (H8S_GENERIC) | ||
| 79 | choice | ||
| 80 | prompt "CPU Selection" | ||
| 81 | 82 | ||
| 82 | config H8S2678 | 83 | config H8S2678 |
| 83 | bool "H8S/2670,2673,2674R,2675,2676" | 84 | bool "H8S/2670,2673,2674R,2675,2676" |
| 85 | select CPU_H8S | ||
| 86 | |||
| 84 | endchoice | 87 | endchoice |
| 85 | endif | ||
| 86 | 88 | ||
| 87 | config CPU_CLOCK | 89 | config 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 |
| 92 | endmenu | ||
| 93 | endif | ||
| 94 | 94 | ||
| 95 | if (H8300H_GENERIC || H8S_GENERIC || H8300H_SIM || H8S_SIM || H8S_EDOSK2674) | ||
| 96 | choice | 95 | choice |
| 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 | |||
| 111 | endchoice | 109 | endchoice |
| 112 | endif | ||
| 113 | 110 | ||
| 114 | if (H8300H_AKI3068NET) | ||
| 115 | config H83068 | ||
| 116 | bool | ||
| 117 | default y | ||
| 118 | 111 | ||
| 119 | config CPU_CLOCK | 112 | config CPU_H8300H |
| 120 | int | ||
| 121 | default "20000" | ||
| 122 | |||
| 123 | config RAMKERNEL | ||
| 124 | bool | 113 | bool |
| 114 | depends on (H83002 || H83007 || H83048 || H83068) | ||
| 125 | default y | 115 | default y |
| 126 | endif | ||
| 127 | 116 | ||
| 128 | if (H8300H_H8MAX) | 117 | config CPU_H8S |
| 129 | config H83068 | ||
| 130 | bool | 118 | bool |
| 119 | depends on H8S2678 | ||
| 131 | default y | 120 | default y |
| 132 | 121 | ||
| 133 | config CPU_CLOCK | 122 | choice |
| 134 | int | 123 | prompt "Timer" |
| 135 | default 25000 | 124 | config H8300_TIMER8 |
| 125 | bool "8bit timer (2ch cascade)" | ||
| 126 | depends on (H83007 || H83068 || H8S2678) | ||
| 136 | 127 | ||
| 137 | config RAMKERNEL | 128 | config H8300_TIMER16 |
| 138 | bool | 129 | bool "16bit timer" |
| 139 | default y | 130 | depends on (H83007 || H83068) |
| 140 | endif | ||
| 141 | 131 | ||
| 142 | if (H8300H_SIM) | 132 | config H8300_ITU |
| 143 | config H83007 | 133 | bool "ITU" |
| 144 | bool | 134 | depends on (H83002 || H83048) |
| 145 | default y | ||
| 146 | 135 | ||
| 147 | config CPU_CLOCK | 136 | config H8300_TPU |
| 148 | int | 137 | bool "TPU" |
| 149 | default "16000" | 138 | depends on H8S2678 |
| 150 | endif | 139 | endchoice |
| 151 | 140 | ||
| 152 | if (H8S_EDOSK2674) | 141 | if H8300_TIMER8 |
| 153 | config H8S2678 | 142 | choice |
| 154 | bool | 143 | prompt "Timer Channel" |
| 155 | default y | 144 | config H8300_TIMER8_CH0 |
| 156 | config CPU_CLOCK | 145 | bool "Channel 0" |
| 157 | int | 146 | config H8300_TIMER8_CH2 |
| 158 | default 33000 | 147 | bool "Channel 2" |
| 148 | depends on CPU_H8300H | ||
| 149 | endchoice | ||
| 159 | endif | 150 | endif |
| 160 | 151 | ||
| 161 | if (H8S_SIM) | 152 | config H8300_TIMER16_CH |
| 162 | config H8S2678 | 153 | int "16bit timer channel (0 - 2)" |
| 163 | bool | 154 | depends on H8300_TIMER16 |
| 164 | default y | 155 | range 0 2 |
| 165 | config CPU_CLOCK | ||
| 166 | int | ||
| 167 | default 33000 | ||
| 168 | endif | ||
| 169 | 156 | ||
| 170 | config CPU_H8300H | 157 | config 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 | ||
| 175 | config CPU_H8S | 161 | config H8300_TPU_CH |
| 176 | bool | 162 | int "TPU channel" |
| 177 | depends on H8S2678 | 163 | depends on H8300_TPU |
| 178 | default y | ||
| 179 | 164 | ||
| 180 | config PREEMPT | 165 | config 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 | ||
| 298 | static __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 | |||
| 315 | static __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 | |||
| 7 | obj-y := process.o traps.o ptrace.o irq.o \ | 7 | obj-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 | ||
| 12 | obj-$(CONFIG_MODULES) += module.o h8300_ksyms.o | 12 | obj-$(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 | /* | 34 | void 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 | */ | ||
| 38 | static 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 | ||
| 50 | void time_init(void) | 44 | void __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 | } |
