Lines Matching full:timer

2  * ARM CMSDK APB timer emulation
12 /* This is a model of the "APB timer" which is part of the Cortex-M
18 * by the guest to act either as a 'timer enable' (timer does not run
19 * when EXTIN is low), or as a 'timer clock' (timer runs at frequency
39 #include "hw/timer/cmsdk-apb-timer.h"
86 r = ptimer_get_count(s->timer); in cmsdk_apb_timer_read()
89 r = ptimer_get_limit(s->timer); in cmsdk_apb_timer_read()
99 "CMSDK APB timer read: bad offset %x\n", (int) offset); in cmsdk_apb_timer_read()
121 "CMSDK APB timer: EXTIN input not supported\n"); in cmsdk_apb_timer_write()
124 ptimer_transaction_begin(s->timer); in cmsdk_apb_timer_write()
126 ptimer_run(s->timer, ptimer_get_limit(s->timer) == 0); in cmsdk_apb_timer_write()
128 ptimer_stop(s->timer); in cmsdk_apb_timer_write()
130 ptimer_transaction_commit(s->timer); in cmsdk_apb_timer_write()
133 /* Writing to reload also sets the current timer value */ in cmsdk_apb_timer_write()
134 ptimer_transaction_begin(s->timer); in cmsdk_apb_timer_write()
136 ptimer_stop(s->timer); in cmsdk_apb_timer_write()
138 ptimer_set_limit(s->timer, value, 1); in cmsdk_apb_timer_write()
141 * Make sure timer is running (it might have stopped if this in cmsdk_apb_timer_write()
142 * was an expired one-shot timer) in cmsdk_apb_timer_write()
144 ptimer_run(s->timer, 0); in cmsdk_apb_timer_write()
146 ptimer_transaction_commit(s->timer); in cmsdk_apb_timer_write()
149 ptimer_transaction_begin(s->timer); in cmsdk_apb_timer_write()
150 if (!value && !ptimer_get_limit(s->timer)) { in cmsdk_apb_timer_write()
151 ptimer_stop(s->timer); in cmsdk_apb_timer_write()
153 ptimer_set_count(s->timer, value); in cmsdk_apb_timer_write()
155 ptimer_run(s->timer, ptimer_get_limit(s->timer) == 0); in cmsdk_apb_timer_write()
157 ptimer_transaction_commit(s->timer); in cmsdk_apb_timer_write()
167 "CMSDK APB timer write: write to RO offset 0x%x\n", in cmsdk_apb_timer_write()
172 "CMSDK APB timer write: bad offset 0x%x\n", (int) offset); in cmsdk_apb_timer_write()
200 ptimer_transaction_begin(s->timer); in cmsdk_apb_timer_reset()
201 ptimer_stop(s->timer); in cmsdk_apb_timer_reset()
203 ptimer_set_limit(s->timer, 0, 1); in cmsdk_apb_timer_reset()
204 ptimer_transaction_commit(s->timer); in cmsdk_apb_timer_reset()
211 ptimer_transaction_begin(s->timer); in cmsdk_apb_timer_clk_update()
212 ptimer_set_period_from_clock(s->timer, s->pclk, 1); in cmsdk_apb_timer_clk_update()
213 ptimer_transaction_commit(s->timer); in cmsdk_apb_timer_clk_update()
222 s, "cmsdk-apb-timer", 0x1000); in cmsdk_apb_timer_init()
234 error_setg(errp, "CMSDK APB timer: pclk clock must be connected"); in cmsdk_apb_timer_realize()
238 s->timer = ptimer_init(cmsdk_apb_timer_tick, s, in cmsdk_apb_timer_realize()
244 ptimer_transaction_begin(s->timer); in cmsdk_apb_timer_realize()
245 ptimer_set_period_from_clock(s->timer, s->pclk, 1); in cmsdk_apb_timer_realize()
246 ptimer_transaction_commit(s->timer); in cmsdk_apb_timer_realize()
250 .name = "cmsdk-apb-timer",
254 VMSTATE_PTIMER(timer, CMSDKAPBTimer),