xref: /qemu/include/hw/misc/xlnx-zynqmp-apu-ctrl.h (revision 29dc49f0310ad4439424eeaf179de46d15bd2d6b)
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