xref: /openbmc/qemu/include/hw/timer/sse-timer.h (revision 0b8ceee8)
1*0b8ceee8SPeter Maydell /*
2*0b8ceee8SPeter Maydell  * Arm SSE Subsystem System Timer
3*0b8ceee8SPeter Maydell  *
4*0b8ceee8SPeter Maydell  * Copyright (c) 2020 Linaro Limited
5*0b8ceee8SPeter Maydell  * Written by Peter Maydell
6*0b8ceee8SPeter Maydell  *
7*0b8ceee8SPeter Maydell  * This program is free software; you can redistribute it and/or modify
8*0b8ceee8SPeter Maydell  * it under the terms of the GNU General Public License version 2 or
9*0b8ceee8SPeter Maydell  * (at your option) any later version.
10*0b8ceee8SPeter Maydell  */
11*0b8ceee8SPeter Maydell 
12*0b8ceee8SPeter Maydell /*
13*0b8ceee8SPeter Maydell  * This is a model of the "System timer" which is documented in
14*0b8ceee8SPeter Maydell  * the Arm SSE-123 Example Subsystem Technical Reference Manual:
15*0b8ceee8SPeter Maydell  * https://developer.arm.com/documentation/101370/latest/
16*0b8ceee8SPeter Maydell  *
17*0b8ceee8SPeter Maydell  * QEMU interface:
18*0b8ceee8SPeter Maydell  *  + QOM property "counter": link property to be set to the
19*0b8ceee8SPeter Maydell  *    TYPE_SSE_COUNTER timestamp counter device this timer runs off
20*0b8ceee8SPeter Maydell  *  + sysbus MMIO region 0: the register bank
21*0b8ceee8SPeter Maydell  *  + sysbus IRQ 0: timer interrupt
22*0b8ceee8SPeter Maydell  */
23*0b8ceee8SPeter Maydell 
24*0b8ceee8SPeter Maydell #ifndef SSE_TIMER_H
25*0b8ceee8SPeter Maydell #define SSE_TIMER_H
26*0b8ceee8SPeter Maydell 
27*0b8ceee8SPeter Maydell #include "hw/sysbus.h"
28*0b8ceee8SPeter Maydell #include "qom/object.h"
29*0b8ceee8SPeter Maydell #include "hw/timer/sse-counter.h"
30*0b8ceee8SPeter Maydell 
31*0b8ceee8SPeter Maydell #define TYPE_SSE_TIMER "sse-timer"
32*0b8ceee8SPeter Maydell OBJECT_DECLARE_SIMPLE_TYPE(SSETimer, SSE_TIMER)
33*0b8ceee8SPeter Maydell 
34*0b8ceee8SPeter Maydell struct SSETimer {
35*0b8ceee8SPeter Maydell     /*< private >*/
36*0b8ceee8SPeter Maydell     SysBusDevice parent_obj;
37*0b8ceee8SPeter Maydell 
38*0b8ceee8SPeter Maydell     /*< public >*/
39*0b8ceee8SPeter Maydell     MemoryRegion iomem;
40*0b8ceee8SPeter Maydell     qemu_irq irq;
41*0b8ceee8SPeter Maydell     SSECounter *counter;
42*0b8ceee8SPeter Maydell     QEMUTimer timer;
43*0b8ceee8SPeter Maydell     Notifier counter_notifier;
44*0b8ceee8SPeter Maydell 
45*0b8ceee8SPeter Maydell     uint32_t cntfrq;
46*0b8ceee8SPeter Maydell     uint32_t cntp_ctl;
47*0b8ceee8SPeter Maydell     uint64_t cntp_cval;
48*0b8ceee8SPeter Maydell     uint64_t cntp_aival;
49*0b8ceee8SPeter Maydell     uint32_t cntp_aival_ctl;
50*0b8ceee8SPeter Maydell     uint32_t cntp_aival_reload;
51*0b8ceee8SPeter Maydell };
52*0b8ceee8SPeter Maydell 
53*0b8ceee8SPeter Maydell #endif
54