1b4ecda2dSEdgar E. Iglesias /* 2b4ecda2dSEdgar E. Iglesias * QEMU model of ZynqMP APU Control. 3b4ecda2dSEdgar E. Iglesias * 4b4ecda2dSEdgar E. Iglesias * Copyright (c) 2013-2022 Xilinx Inc 5b4ecda2dSEdgar E. Iglesias * SPDX-License-Identifier: GPL-2.0-or-later 6b4ecda2dSEdgar E. Iglesias * 7b4ecda2dSEdgar E. Iglesias * Written by Peter Crosthwaite <peter.crosthwaite@xilinx.com> and 8b4ecda2dSEdgar E. Iglesias * Edgar E. Iglesias <edgar.iglesias@xilinx.com> 9b4ecda2dSEdgar E. Iglesias * 10b4ecda2dSEdgar E. Iglesias */ 11b4ecda2dSEdgar E. Iglesias #ifndef HW_MISC_XLNX_ZYNQMP_APU_CTRL_H 12b4ecda2dSEdgar E. Iglesias #define HW_MISC_XLNX_ZYNQMP_APU_CTRL_H 13b4ecda2dSEdgar E. Iglesias 14b4ecda2dSEdgar E. Iglesias #include "hw/sysbus.h" 15b4ecda2dSEdgar E. Iglesias #include "hw/register.h" 16*3d81e8cfSThomas Huth #include "target/arm/cpu-qom.h" 17b4ecda2dSEdgar E. Iglesias 18b4ecda2dSEdgar E. Iglesias #define TYPE_XLNX_ZYNQMP_APU_CTRL "xlnx.apu-ctrl" 19b4ecda2dSEdgar E. Iglesias OBJECT_DECLARE_SIMPLE_TYPE(XlnxZynqMPAPUCtrl, XLNX_ZYNQMP_APU_CTRL) 20b4ecda2dSEdgar E. Iglesias 21b4ecda2dSEdgar E. Iglesias REG32(APU_ERR_CTRL, 0x0) 22b4ecda2dSEdgar E. Iglesias FIELD(APU_ERR_CTRL, PSLVERR, 0, 1) 23b4ecda2dSEdgar E. Iglesias REG32(ISR, 0x10) 24b4ecda2dSEdgar E. Iglesias FIELD(ISR, INV_APB, 0, 1) 25b4ecda2dSEdgar E. Iglesias REG32(IMR, 0x14) 26b4ecda2dSEdgar E. Iglesias FIELD(IMR, INV_APB, 0, 1) 27b4ecda2dSEdgar E. Iglesias REG32(IEN, 0x18) 28b4ecda2dSEdgar E. Iglesias FIELD(IEN, INV_APB, 0, 1) 29b4ecda2dSEdgar E. Iglesias REG32(IDS, 0x1c) 30b4ecda2dSEdgar E. Iglesias FIELD(IDS, INV_APB, 0, 1) 31b4ecda2dSEdgar E. Iglesias REG32(CONFIG_0, 0x20) 32b4ecda2dSEdgar E. Iglesias FIELD(CONFIG_0, CFGTE, 24, 4) 33b4ecda2dSEdgar E. Iglesias FIELD(CONFIG_0, CFGEND, 16, 4) 34b4ecda2dSEdgar E. Iglesias FIELD(CONFIG_0, VINITHI, 8, 4) 35b4ecda2dSEdgar E. Iglesias FIELD(CONFIG_0, AA64NAA32, 0, 4) 36b4ecda2dSEdgar E. Iglesias REG32(CONFIG_1, 0x24) 37b4ecda2dSEdgar E. Iglesias FIELD(CONFIG_1, L2RSTDISABLE, 29, 1) 38b4ecda2dSEdgar E. Iglesias FIELD(CONFIG_1, L1RSTDISABLE, 28, 1) 39b4ecda2dSEdgar E. Iglesias FIELD(CONFIG_1, CP15DISABLE, 0, 4) 40b4ecda2dSEdgar E. Iglesias REG32(RVBARADDR0L, 0x40) 41b4ecda2dSEdgar E. Iglesias FIELD(RVBARADDR0L, ADDR, 2, 30) 42b4ecda2dSEdgar E. Iglesias REG32(RVBARADDR0H, 0x44) 43b4ecda2dSEdgar E. Iglesias FIELD(RVBARADDR0H, ADDR, 0, 8) 44b4ecda2dSEdgar E. Iglesias REG32(RVBARADDR1L, 0x48) 45b4ecda2dSEdgar E. Iglesias FIELD(RVBARADDR1L, ADDR, 2, 30) 46b4ecda2dSEdgar E. Iglesias REG32(RVBARADDR1H, 0x4c) 47b4ecda2dSEdgar E. Iglesias FIELD(RVBARADDR1H, ADDR, 0, 8) 48b4ecda2dSEdgar E. Iglesias REG32(RVBARADDR2L, 0x50) 49b4ecda2dSEdgar E. Iglesias FIELD(RVBARADDR2L, ADDR, 2, 30) 50b4ecda2dSEdgar E. Iglesias REG32(RVBARADDR2H, 0x54) 51b4ecda2dSEdgar E. Iglesias FIELD(RVBARADDR2H, ADDR, 0, 8) 52b4ecda2dSEdgar E. Iglesias REG32(RVBARADDR3L, 0x58) 53b4ecda2dSEdgar E. Iglesias FIELD(RVBARADDR3L, ADDR, 2, 30) 54b4ecda2dSEdgar E. Iglesias REG32(RVBARADDR3H, 0x5c) 55b4ecda2dSEdgar E. Iglesias FIELD(RVBARADDR3H, ADDR, 0, 8) 56b4ecda2dSEdgar E. Iglesias REG32(ACE_CTRL, 0x60) 57b4ecda2dSEdgar E. Iglesias FIELD(ACE_CTRL, AWQOS, 16, 4) 58b4ecda2dSEdgar E. Iglesias FIELD(ACE_CTRL, ARQOS, 0, 4) 59b4ecda2dSEdgar E. Iglesias REG32(SNOOP_CTRL, 0x80) 60b4ecda2dSEdgar E. Iglesias FIELD(SNOOP_CTRL, ACE_INACT, 4, 1) 61b4ecda2dSEdgar E. Iglesias FIELD(SNOOP_CTRL, ACP_INACT, 0, 1) 62b4ecda2dSEdgar E. Iglesias REG32(PWRCTL, 0x90) 63b4ecda2dSEdgar E. Iglesias FIELD(PWRCTL, CLREXMONREQ, 17, 1) 64b4ecda2dSEdgar E. Iglesias FIELD(PWRCTL, L2FLUSHREQ, 16, 1) 65b4ecda2dSEdgar E. Iglesias FIELD(PWRCTL, CPUPWRDWNREQ, 0, 4) 66b4ecda2dSEdgar E. Iglesias REG32(PWRSTAT, 0x94) 67b4ecda2dSEdgar E. Iglesias FIELD(PWRSTAT, CLREXMONACK, 17, 1) 68b4ecda2dSEdgar E. Iglesias FIELD(PWRSTAT, L2FLUSHDONE, 16, 1) 69b4ecda2dSEdgar E. Iglesias FIELD(PWRSTAT, DBGNOPWRDWN, 0, 4) 70b4ecda2dSEdgar E. Iglesias 71b4ecda2dSEdgar E. Iglesias #define APU_R_MAX ((R_PWRSTAT) + 1) 72b4ecda2dSEdgar E. Iglesias 73b4ecda2dSEdgar E. Iglesias #define APU_MAX_CPU 4 74b4ecda2dSEdgar E. Iglesias 75b4ecda2dSEdgar E. Iglesias struct XlnxZynqMPAPUCtrl { 76b4ecda2dSEdgar E. Iglesias SysBusDevice busdev; 77b4ecda2dSEdgar E. Iglesias 78b4ecda2dSEdgar E. Iglesias ARMCPU *cpus[APU_MAX_CPU]; 79b4ecda2dSEdgar E. Iglesias /* WFIs towards PMU. */ 80b4ecda2dSEdgar E. Iglesias qemu_irq wfi_out[4]; 81b4ecda2dSEdgar E. Iglesias /* CPU Power status towards INTC Redirect. */ 82b4ecda2dSEdgar E. Iglesias qemu_irq cpu_power_status[4]; 83b4ecda2dSEdgar E. Iglesias qemu_irq irq_imr; 84b4ecda2dSEdgar E. Iglesias 85b4ecda2dSEdgar E. Iglesias uint8_t cpu_pwrdwn_req; 86b4ecda2dSEdgar E. Iglesias uint8_t cpu_in_wfi; 87b4ecda2dSEdgar E. Iglesias 88b4ecda2dSEdgar E. Iglesias RegisterInfoArray *reg_array; 89b4ecda2dSEdgar E. Iglesias uint32_t regs[APU_R_MAX]; 90b4ecda2dSEdgar E. Iglesias RegisterInfo regs_info[APU_R_MAX]; 91b4ecda2dSEdgar E. Iglesias }; 92b4ecda2dSEdgar E. Iglesias 93b4ecda2dSEdgar E. Iglesias #endif 94