156b7c66fSPeter Maydell /* 256b7c66fSPeter Maydell * ARMv7M CPU object 356b7c66fSPeter Maydell * 456b7c66fSPeter Maydell * Copyright (c) 2017 Linaro Ltd 556b7c66fSPeter Maydell * Written by Peter Maydell <peter.maydell@linaro.org> 656b7c66fSPeter Maydell * 756b7c66fSPeter Maydell * This code is licensed under the GPL version 2 or later. 856b7c66fSPeter Maydell */ 956b7c66fSPeter Maydell 1056b7c66fSPeter Maydell #ifndef HW_ARM_ARMV7M_H 1156b7c66fSPeter Maydell #define HW_ARM_ARMV7M_H 1256b7c66fSPeter Maydell 1356b7c66fSPeter Maydell #include "hw/sysbus.h" 14d2db1de6SPeter Maydell #include "hw/intc/armv7m_nvic.h" 152f9db77eSPeter Maydell #include "hw/misc/armv7m_ras.h" 16c60c1b0dSPeter Maydell #include "target/arm/idau.h" 17db1015e9SEduardo Habkost #include "qom/object.h" 18d5093d96SPeter Maydell #include "hw/clock.h" 1956b7c66fSPeter Maydell 20e178113fSMarkus Armbruster #define TYPE_BITBAND "ARM-bitband-memory" 218063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(BitBandState, BITBAND) 2256b7c66fSPeter Maydell 23db1015e9SEduardo Habkost struct BitBandState { 2456b7c66fSPeter Maydell /*< private >*/ 2556b7c66fSPeter Maydell SysBusDevice parent_obj; 2656b7c66fSPeter Maydell /*< public >*/ 2756b7c66fSPeter Maydell 28b516572fSAlexey Kardashevskiy AddressSpace source_as; 2956b7c66fSPeter Maydell MemoryRegion iomem; 3056b7c66fSPeter Maydell uint32_t base; 31f68d881cSPeter Maydell MemoryRegion *source_memory; 32db1015e9SEduardo Habkost }; 3356b7c66fSPeter Maydell 3456b7c66fSPeter Maydell #define TYPE_ARMV7M "armv7m" 358063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(ARMv7MState, ARMV7M) 3656b7c66fSPeter Maydell 3756b7c66fSPeter Maydell #define ARMV7M_NUM_BITBANDS 2 3856b7c66fSPeter Maydell 3956b7c66fSPeter Maydell /* ARMv7M container object. 4056b7c66fSPeter Maydell * + Unnamed GPIO input lines: external IRQ lines for the NVIC 419e60d759SPeter Maydell * + Named GPIO output SYSRESETREQ: signalled for guest AIRCR.SYSRESETREQ. 429e60d759SPeter Maydell * If this GPIO is not wired up then the NVIC will default to performing 439e60d759SPeter Maydell * a qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET). 44ba1ba5ccSIgor Mammedov * + Property "cpu-type": CPU type to instantiate 4556b7c66fSPeter Maydell * + Property "num-irq": number of external IRQ lines 46*33995902SSamuel Tardieu * + Property "num-prio-bits": number of priority bits in the NVIC 47618119c2SPeter Maydell * + Property "memory": MemoryRegion defining the physical address space 48618119c2SPeter Maydell * that CPU accesses see. (The NVIC, bitbanding and other CPU-internal 49618119c2SPeter Maydell * devices will be automatically layered on top of this view.) 50c60c1b0dSPeter Maydell * + Property "idau": IDAU interface (forwarded to CPU object) 5160d75d81SPeter Maydell * + Property "init-svtor": secure VTOR reset value (forwarded to CPU object) 527cda2149SPeter Maydell * + Property "init-nsvtor": non-secure VTOR reset value (forwarded to CPU object) 53e0cf7b81SPeter Maydell * + Property "vfp": enable VFP (forwarded to CPU object) 54e0cf7b81SPeter Maydell * + Property "dsp": enable DSP (forwarded to CPU object) 55a1c5a062SStefan Hajnoczi * + Property "enable-bitband": expose bitbanded IO 56cb0929bbSPeter Maydell * + Property "mpu-ns-regions": number of Non-Secure MPU regions (forwarded 57cb0929bbSPeter Maydell * to CPU object pmsav7-dregion property; default is whatever the default 58cb0929bbSPeter Maydell * for the CPU is) 59cb0929bbSPeter Maydell * + Property "mpu-s-regions": number of Secure MPU regions (default is 60cb0929bbSPeter Maydell * whatever the default for the CPU is; must currently be set to the same 61cb0929bbSPeter Maydell * value as mpu-ns-regions if the CPU implements the Security Extension) 62d5093d96SPeter Maydell * + Clock input "refclk" is the external reference clock for the systick timers 63d5093d96SPeter Maydell * + Clock input "cpuclk" is the main CPU clock 6456b7c66fSPeter Maydell */ 65db1015e9SEduardo Habkost struct ARMv7MState { 6656b7c66fSPeter Maydell /*< private >*/ 6756b7c66fSPeter Maydell SysBusDevice parent_obj; 6856b7c66fSPeter Maydell /*< public >*/ 6956b7c66fSPeter Maydell NVICState nvic; 7056b7c66fSPeter Maydell BitBandState bitband[ARMV7M_NUM_BITBANDS]; 7156b7c66fSPeter Maydell ARMCPU *cpu; 722f9db77eSPeter Maydell ARMv7MRAS ras; 73e36a25cbSPeter Maydell SysTickState systick[M_REG_NUM_BANKS]; 7456b7c66fSPeter Maydell 75618119c2SPeter Maydell /* MemoryRegion we pass to the CPU, with our devices layered on 76618119c2SPeter Maydell * top of the ones the board provides in board_memory. 77618119c2SPeter Maydell */ 78618119c2SPeter Maydell MemoryRegion container; 79e36a25cbSPeter Maydell /* 80e36a25cbSPeter Maydell * MemoryRegion which passes the transaction to either the S or the 81e36a25cbSPeter Maydell * NS systick device depending on the transaction attributes 82e36a25cbSPeter Maydell */ 83e36a25cbSPeter Maydell MemoryRegion systickmem; 84e36a25cbSPeter Maydell /* 85e36a25cbSPeter Maydell * MemoryRegion which enforces the S/NS handling of the systick 86e36a25cbSPeter Maydell * device NS alias region and passes the transaction to the 87e36a25cbSPeter Maydell * NS systick device if appropriate. 88e36a25cbSPeter Maydell */ 89e36a25cbSPeter Maydell MemoryRegion systick_ns_mem; 902089c010SPeter Maydell /* Ditto, for the sysregs region provided by the NVIC */ 912089c010SPeter Maydell MemoryRegion sysreg_ns_mem; 922089c010SPeter Maydell /* MR providing default PPB behaviour */ 932089c010SPeter Maydell MemoryRegion defaultmem; 94618119c2SPeter Maydell 95d5093d96SPeter Maydell Clock *refclk; 96d5093d96SPeter Maydell Clock *cpuclk; 97d5093d96SPeter Maydell 9856b7c66fSPeter Maydell /* Properties */ 99ba1ba5ccSIgor Mammedov char *cpu_type; 100618119c2SPeter Maydell /* MemoryRegion the board provides to us (with its devices, RAM, etc) */ 101618119c2SPeter Maydell MemoryRegion *board_memory; 102c60c1b0dSPeter Maydell Object *idau; 10360d75d81SPeter Maydell uint32_t init_svtor; 1047cda2149SPeter Maydell uint32_t init_nsvtor; 105cb0929bbSPeter Maydell uint32_t mpu_ns_regions; 106cb0929bbSPeter Maydell uint32_t mpu_s_regions; 107a1c5a062SStefan Hajnoczi bool enable_bitband; 10866647809SPeter Maydell bool start_powered_off; 109e0cf7b81SPeter Maydell bool vfp; 110e0cf7b81SPeter Maydell bool dsp; 111db1015e9SEduardo Habkost }; 11256b7c66fSPeter Maydell 11356b7c66fSPeter Maydell #endif 114