19a52d999SPeter Maydell /* 29a52d999SPeter Maydell * ARM MPS2 FPGAIO emulation 39a52d999SPeter Maydell * 49a52d999SPeter Maydell * Copyright (c) 2018 Linaro Limited 59a52d999SPeter Maydell * Written by Peter Maydell 69a52d999SPeter Maydell * 79a52d999SPeter Maydell * This program is free software; you can redistribute it and/or modify 89a52d999SPeter Maydell * it under the terms of the GNU General Public License version 2 or 99a52d999SPeter Maydell * (at your option) any later version. 109a52d999SPeter Maydell */ 119a52d999SPeter Maydell 129a52d999SPeter Maydell /* This is a model of the FPGAIO register block in the AN505 139a52d999SPeter Maydell * FPGA image for the MPS2 dev board; it is documented in the 149a52d999SPeter Maydell * application note: 159a52d999SPeter Maydell * http://infocenter.arm.com/help/topic/com.arm.doc.dai0505b/index.html 169a52d999SPeter Maydell * 179a52d999SPeter Maydell * QEMU interface: 189a52d999SPeter Maydell * + sysbus MMIO region 0: the register bank 199a52d999SPeter Maydell */ 209a52d999SPeter Maydell 219a52d999SPeter Maydell #ifndef MPS2_FPGAIO_H 229a52d999SPeter Maydell #define MPS2_FPGAIO_H 239a52d999SPeter Maydell 249a52d999SPeter Maydell #include "hw/sysbus.h" 2565ad1da2SPhilippe Mathieu-Daudé #include "hw/misc/led.h" 26db1015e9SEduardo Habkost #include "qom/object.h" 279a52d999SPeter Maydell 289a52d999SPeter Maydell #define TYPE_MPS2_FPGAIO "mps2-fpgaio" 298063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(MPS2FPGAIO, MPS2_FPGAIO) 309a52d999SPeter Maydell 31e8556f43SPeter Maydell #define MPS2FPGAIO_MAX_LEDS 32 32e8556f43SPeter Maydell 33db1015e9SEduardo Habkost struct MPS2FPGAIO { 349a52d999SPeter Maydell /*< private >*/ 359a52d999SPeter Maydell SysBusDevice parent_obj; 369a52d999SPeter Maydell 379a52d999SPeter Maydell /*< public >*/ 389a52d999SPeter Maydell MemoryRegion iomem; 39e8556f43SPeter Maydell LEDState *led[MPS2FPGAIO_MAX_LEDS]; 40e8556f43SPeter Maydell uint32_t num_leds; 41*b2234223SPeter Maydell bool has_switches; 429a52d999SPeter Maydell 439a52d999SPeter Maydell uint32_t led0; 449a52d999SPeter Maydell uint32_t prescale; 459a52d999SPeter Maydell uint32_t misc; 469a52d999SPeter Maydell 4793739075SPeter Maydell /* QEMU_CLOCK_VIRTUAL time at which counter and pscntr were last synced */ 4893739075SPeter Maydell int64_t pscntr_sync_ticks; 4993739075SPeter Maydell /* Values of COUNTER and PSCNTR at time pscntr_sync_ticks */ 5093739075SPeter Maydell uint32_t counter; 5193739075SPeter Maydell uint32_t pscntr; 5293739075SPeter Maydell 539a52d999SPeter Maydell uint32_t prescale_clk; 54a1982f90SPeter Maydell 55a1982f90SPeter Maydell /* These hold the CLOCK_VIRTUAL ns tick when the CLK1HZ/CLK100HZ was zero */ 56a1982f90SPeter Maydell int64_t clk1hz_tick_offset; 57a1982f90SPeter Maydell int64_t clk100hz_tick_offset; 58db1015e9SEduardo Habkost }; 599a52d999SPeter Maydell 609a52d999SPeter Maydell #endif 61