Lines Matching refs:spt
20 #include <platsupport/plat/spt.h>
101 int spt_start(spt_t *spt)
103 if (spt == NULL) {
107 spt->regs->ctrl = BIT(FREE_RUN_ENABLE) | BIT(COUNTER_WIDTH_BIT);
111 int spt_stop(spt_t *spt)
113 if (!spt) {
117 spt->regs->ctrl = 0;
124 int spt_set_timeout(spt_t *spt, uint64_t ns)
126 if (!spt) {
129 uint64_t ticks = ns / (NS_IN_US / (spt->freq / MHZ));
131 spt->counter_start = ns;
154 spt->regs->load = ticks;
155 spt->regs->pre_divider = 0;
156 spt->regs->irq_clear = 1;
157 spt->regs->ctrl = BIT(COUNTER_WIDTH_BIT) | (prescale_bits << PRESCALE_BIT) |
163 int spt_handle_irq(spt_t *spt)
165 if (!spt) {
168 if (spt->regs->masked_irq) {
169 spt->regs->irq_clear = 1;
170 spt->regs->ctrl &= ~(BIT(TIMER_ENABLE));
178 uint64_t spt_get_time(spt_t *spt)
180 uint64_t value = spt->regs->free_run_count;
184 uint64_t ns = (value * MHZ / spt->freq) * NS_IN_US;
188 int spt_init(spt_t *spt, spt_config_t config)
192 if (!spt || !config.vaddr) {
197 spt->regs = (void *) ((uintptr_t) config.vaddr) + TIMER_BASE_OFFSET;
201 spt->freq = clk_get_freq(clk);
204 spt_handle_irq(spt);