175750e4dSPeter Maydell /* 275750e4dSPeter Maydell * ARM IoTKit system control element 375750e4dSPeter Maydell * 475750e4dSPeter Maydell * Copyright (c) 2018 Linaro Limited 575750e4dSPeter Maydell * Written by Peter Maydell 675750e4dSPeter Maydell * 775750e4dSPeter Maydell * This program is free software; you can redistribute it and/or modify 875750e4dSPeter Maydell * it under the terms of the GNU General Public License version 2 or 975750e4dSPeter Maydell * (at your option) any later version. 1075750e4dSPeter Maydell */ 1175750e4dSPeter Maydell 1275750e4dSPeter Maydell /* 1375750e4dSPeter Maydell * This is a model of the "system control element" which is part of the 1475750e4dSPeter Maydell * Arm IoTKit and documented in 1575750e4dSPeter Maydell * http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ecm0601256/index.html 1675750e4dSPeter Maydell * Specifically, it implements the "system information block" and 1775750e4dSPeter Maydell * "system control register" blocks. 1875750e4dSPeter Maydell * 1975750e4dSPeter Maydell * QEMU interface: 20*04836414SPeter Maydell * + QOM property "SYS_VERSION": value of the SYS_VERSION register of the 21*04836414SPeter Maydell * system information block of the SSE 22*04836414SPeter Maydell * (used to identify whether to provide SSE-200-only registers) 2375750e4dSPeter Maydell * + sysbus MMIO region 0: the system information register bank 2475750e4dSPeter Maydell * + sysbus MMIO region 1: the system control register bank 2575750e4dSPeter Maydell */ 2675750e4dSPeter Maydell 2775750e4dSPeter Maydell #ifndef HW_MISC_IOTKIT_SYSCTL_H 2875750e4dSPeter Maydell #define HW_MISC_IOTKIT_SYSCTL_H 2975750e4dSPeter Maydell 3075750e4dSPeter Maydell #include "hw/sysbus.h" 3175750e4dSPeter Maydell 3275750e4dSPeter Maydell #define TYPE_IOTKIT_SYSCTL "iotkit-sysctl" 3375750e4dSPeter Maydell #define IOTKIT_SYSCTL(obj) OBJECT_CHECK(IoTKitSysCtl, (obj), \ 3475750e4dSPeter Maydell TYPE_IOTKIT_SYSCTL) 3575750e4dSPeter Maydell 3675750e4dSPeter Maydell typedef struct IoTKitSysCtl { 3775750e4dSPeter Maydell /*< private >*/ 3875750e4dSPeter Maydell SysBusDevice parent_obj; 3975750e4dSPeter Maydell 4075750e4dSPeter Maydell /*< public >*/ 4175750e4dSPeter Maydell MemoryRegion iomem; 4275750e4dSPeter Maydell 4375750e4dSPeter Maydell uint32_t secure_debug; 4475750e4dSPeter Maydell uint32_t reset_syndrome; 4575750e4dSPeter Maydell uint32_t reset_mask; 4675750e4dSPeter Maydell uint32_t gretreg; 47394e10d2SPeter Maydell uint32_t initsvtor0; 4875750e4dSPeter Maydell uint32_t cpuwait; 4975750e4dSPeter Maydell uint32_t wicctrl; 50*04836414SPeter Maydell uint32_t scsecctrl; 51*04836414SPeter Maydell uint32_t fclk_div; 52*04836414SPeter Maydell uint32_t sysclk_div; 53*04836414SPeter Maydell uint32_t clock_force; 54*04836414SPeter Maydell uint32_t initsvtor1; 55*04836414SPeter Maydell uint32_t nmi_enable; 56*04836414SPeter Maydell uint32_t ewctrl; 57*04836414SPeter Maydell uint32_t pdcm_pd_sys_sense; 58*04836414SPeter Maydell uint32_t pdcm_pd_sram0_sense; 59*04836414SPeter Maydell uint32_t pdcm_pd_sram1_sense; 60*04836414SPeter Maydell uint32_t pdcm_pd_sram2_sense; 61*04836414SPeter Maydell uint32_t pdcm_pd_sram3_sense; 62*04836414SPeter Maydell 63*04836414SPeter Maydell /* Properties */ 64*04836414SPeter Maydell uint32_t sys_version; 65*04836414SPeter Maydell 66*04836414SPeter Maydell bool is_sse200; 6775750e4dSPeter Maydell } IoTKitSysCtl; 6875750e4dSPeter Maydell 6975750e4dSPeter Maydell #endif 70