xref: /openbmc/qemu/include/hw/timer/allwinner-a10-pit.h (revision 4dad0a9aa818698e0735c8352bf7925a1660df6f)
1121d0712SMarkus Armbruster #ifndef ALLWINNER_A10_PIT_H
2121d0712SMarkus Armbruster #define ALLWINNER_A10_PIT_H
33589de8cSliguang 
43589de8cSliguang #include "hw/ptimer.h"
5ec150c7eSMarkus Armbruster #include "hw/sysbus.h"
6db1015e9SEduardo Habkost #include "qom/object.h"
73589de8cSliguang 
83589de8cSliguang #define TYPE_AW_A10_PIT "allwinner-A10-timer"
9*8063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(AwA10PITState, AW_A10_PIT)
103589de8cSliguang 
113589de8cSliguang #define AW_A10_PIT_TIMER_NR    6
123589de8cSliguang #define AW_A10_PIT_TIMER_IRQ   0x1
133589de8cSliguang #define AW_A10_PIT_WDOG_IRQ    0x100
143589de8cSliguang 
153589de8cSliguang #define AW_A10_PIT_TIMER_IRQ_EN    0
163589de8cSliguang #define AW_A10_PIT_TIMER_IRQ_ST    0x4
173589de8cSliguang 
183589de8cSliguang #define AW_A10_PIT_TIMER_CONTROL   0x0
193589de8cSliguang #define AW_A10_PIT_TIMER_EN        0x1
203589de8cSliguang #define AW_A10_PIT_TIMER_RELOAD    0x2
213589de8cSliguang #define AW_A10_PIT_TIMER_MODE      0x80
223589de8cSliguang 
233589de8cSliguang #define AW_A10_PIT_TIMER_INTERVAL  0x4
243589de8cSliguang #define AW_A10_PIT_TIMER_COUNT     0x8
253589de8cSliguang #define AW_A10_PIT_WDOG_CONTROL    0x90
263589de8cSliguang #define AW_A10_PIT_WDOG_MODE       0x94
273589de8cSliguang 
283589de8cSliguang #define AW_A10_PIT_COUNT_CTL       0xa0
293589de8cSliguang #define AW_A10_PIT_COUNT_RL_EN     0x2
303589de8cSliguang #define AW_A10_PIT_COUNT_CLR_EN    0x1
313589de8cSliguang #define AW_A10_PIT_COUNT_LO        0xa4
323589de8cSliguang #define AW_A10_PIT_COUNT_HI        0xa8
333589de8cSliguang 
343589de8cSliguang #define AW_A10_PIT_TIMER_BASE      0x10
353589de8cSliguang #define AW_A10_PIT_TIMER_BASE_END  \
363589de8cSliguang     (AW_A10_PIT_TIMER_BASE * 6 + AW_A10_PIT_TIMER_COUNT)
373589de8cSliguang 
383589de8cSliguang #define AW_A10_PIT_DEFAULT_CLOCK   0x4
393589de8cSliguang 
40323a8771SBeniamino Galvani 
41323a8771SBeniamino Galvani typedef struct AwA10TimerContext {
42323a8771SBeniamino Galvani     AwA10PITState *container;
43323a8771SBeniamino Galvani     int index;
44323a8771SBeniamino Galvani } AwA10TimerContext;
45323a8771SBeniamino Galvani 
46323a8771SBeniamino Galvani struct AwA10PITState {
473589de8cSliguang     /*< private >*/
483589de8cSliguang     SysBusDevice parent_obj;
493589de8cSliguang     /*< public >*/
503589de8cSliguang     qemu_irq irq[AW_A10_PIT_TIMER_NR];
513589de8cSliguang     ptimer_state * timer[AW_A10_PIT_TIMER_NR];
52323a8771SBeniamino Galvani     AwA10TimerContext timer_context[AW_A10_PIT_TIMER_NR];
533589de8cSliguang     MemoryRegion iomem;
54286226a4SBeniamino Galvani     uint32_t clk_freq[4];
553589de8cSliguang 
563589de8cSliguang     uint32_t irq_enable;
573589de8cSliguang     uint32_t irq_status;
583589de8cSliguang     uint32_t control[AW_A10_PIT_TIMER_NR];
593589de8cSliguang     uint32_t interval[AW_A10_PIT_TIMER_NR];
603589de8cSliguang     uint32_t count[AW_A10_PIT_TIMER_NR];
613589de8cSliguang     uint32_t watch_dog_mode;
623589de8cSliguang     uint32_t watch_dog_control;
633589de8cSliguang     uint32_t count_lo;
643589de8cSliguang     uint32_t count_hi;
653589de8cSliguang     uint32_t count_ctl;
66323a8771SBeniamino Galvani };
673589de8cSliguang 
683589de8cSliguang #endif
69