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