diff options
Diffstat (limited to 'arch/blackfin/kernel/time-ts.c')
-rw-r--r-- | arch/blackfin/kernel/time-ts.c | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/arch/blackfin/kernel/time-ts.c b/arch/blackfin/kernel/time-ts.c index d98f2d69b0c4..f608f02f29a3 100644 --- a/arch/blackfin/kernel/time-ts.c +++ b/arch/blackfin/kernel/time-ts.c | |||
@@ -66,8 +66,14 @@ void __init setup_gptimer0(void) | |||
66 | { | 66 | { |
67 | disable_gptimers(TIMER0bit); | 67 | disable_gptimers(TIMER0bit); |
68 | 68 | ||
69 | #ifdef CONFIG_BF60x | ||
70 | bfin_write16(TIMER_DATA_IMSK, 0); | ||
71 | set_gptimer_config(TIMER0_id, TIMER_OUT_DIS | ||
72 | | TIMER_MODE_PWM_CONT | TIMER_PULSE_HI | TIMER_IRQ_PER); | ||
73 | #else | ||
69 | set_gptimer_config(TIMER0_id, \ | 74 | set_gptimer_config(TIMER0_id, \ |
70 | TIMER_OUT_DIS | TIMER_PERIOD_CNT | TIMER_MODE_PWM); | 75 | TIMER_OUT_DIS | TIMER_PERIOD_CNT | TIMER_MODE_PWM); |
76 | #endif | ||
71 | set_gptimer_period(TIMER0_id, -1); | 77 | set_gptimer_period(TIMER0_id, -1); |
72 | set_gptimer_pwidth(TIMER0_id, -2); | 78 | set_gptimer_pwidth(TIMER0_id, -2); |
73 | SSYNC(); | 79 | SSYNC(); |
@@ -135,9 +141,15 @@ static void bfin_gptmr0_set_mode(enum clock_event_mode mode, | |||
135 | { | 141 | { |
136 | switch (mode) { | 142 | switch (mode) { |
137 | case CLOCK_EVT_MODE_PERIODIC: { | 143 | case CLOCK_EVT_MODE_PERIODIC: { |
144 | #ifndef CONFIG_BF60x | ||
138 | set_gptimer_config(TIMER0_id, \ | 145 | set_gptimer_config(TIMER0_id, \ |
139 | TIMER_OUT_DIS | TIMER_IRQ_ENA | \ | 146 | TIMER_OUT_DIS | TIMER_IRQ_ENA | \ |
140 | TIMER_PERIOD_CNT | TIMER_MODE_PWM); | 147 | TIMER_PERIOD_CNT | TIMER_MODE_PWM); |
148 | #else | ||
149 | set_gptimer_config(TIMER0_id, TIMER_OUT_DIS | ||
150 | | TIMER_MODE_PWM_CONT | TIMER_PULSE_HI | TIMER_IRQ_PER); | ||
151 | #endif | ||
152 | |||
141 | set_gptimer_period(TIMER0_id, get_sclk() / HZ); | 153 | set_gptimer_period(TIMER0_id, get_sclk() / HZ); |
142 | set_gptimer_pwidth(TIMER0_id, get_sclk() / HZ - 1); | 154 | set_gptimer_pwidth(TIMER0_id, get_sclk() / HZ - 1); |
143 | enable_gptimers(TIMER0bit); | 155 | enable_gptimers(TIMER0bit); |
@@ -145,8 +157,14 @@ static void bfin_gptmr0_set_mode(enum clock_event_mode mode, | |||
145 | } | 157 | } |
146 | case CLOCK_EVT_MODE_ONESHOT: | 158 | case CLOCK_EVT_MODE_ONESHOT: |
147 | disable_gptimers(TIMER0bit); | 159 | disable_gptimers(TIMER0bit); |
160 | #ifndef CONFIG_BF60x | ||
148 | set_gptimer_config(TIMER0_id, \ | 161 | set_gptimer_config(TIMER0_id, \ |
149 | TIMER_OUT_DIS | TIMER_IRQ_ENA | TIMER_MODE_PWM); | 162 | TIMER_OUT_DIS | TIMER_IRQ_ENA | TIMER_MODE_PWM); |
163 | #else | ||
164 | set_gptimer_config(TIMER0_id, TIMER_OUT_DIS | TIMER_MODE_PWM | ||
165 | | TIMER_PULSE_HI | TIMER_IRQ_WID_DLY); | ||
166 | #endif | ||
167 | |||
150 | set_gptimer_period(TIMER0_id, 0); | 168 | set_gptimer_period(TIMER0_id, 0); |
151 | break; | 169 | break; |
152 | case CLOCK_EVT_MODE_UNUSED: | 170 | case CLOCK_EVT_MODE_UNUSED: |
@@ -160,7 +178,7 @@ static void bfin_gptmr0_set_mode(enum clock_event_mode mode, | |||
160 | 178 | ||
161 | static void bfin_gptmr0_ack(void) | 179 | static void bfin_gptmr0_ack(void) |
162 | { | 180 | { |
163 | set_gptimer_status(TIMER_GROUP1, TIMER_STATUS_TIMIL0); | 181 | clear_gptimer_intr(TIMER0_id); |
164 | } | 182 | } |
165 | 183 | ||
166 | static void __init bfin_gptmr0_init(void) | 184 | static void __init bfin_gptmr0_init(void) |
@@ -197,7 +215,7 @@ static struct clock_event_device clockevent_gptmr0 = { | |||
197 | .rating = 300, | 215 | .rating = 300, |
198 | .irq = IRQ_TIMER0, | 216 | .irq = IRQ_TIMER0, |
199 | .shift = 32, | 217 | .shift = 32, |
200 | .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, | 218 | .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, |
201 | .set_next_event = bfin_gptmr0_set_next_event, | 219 | .set_next_event = bfin_gptmr0_set_next_event, |
202 | .set_mode = bfin_gptmr0_set_mode, | 220 | .set_mode = bfin_gptmr0_set_mode, |
203 | }; | 221 | }; |
@@ -312,6 +330,11 @@ void bfin_coretmr_clockevent_init(void) | |||
312 | #endif | 330 | #endif |
313 | 331 | ||
314 | 332 | ||
333 | #ifdef CONFIG_SMP | ||
334 | evt->broadcast = smp_timer_broadcast; | ||
335 | #endif | ||
336 | |||
337 | |||
315 | evt->name = "bfin_core_timer"; | 338 | evt->name = "bfin_core_timer"; |
316 | evt->rating = 350; | 339 | evt->rating = 350; |
317 | evt->irq = -1; | 340 | evt->irq = -1; |