ppc/pnv: Add a HIOMAP erase command
[qemu.git] / include / hw / misc / imx7_ccm.h
1 /*
2 * Copyright (c) 2017, Impinj, Inc.
3 *
4 * i.MX7 CCM, PMU and ANALOG IP blocks emulation code
5 *
6 * Author: Andrey Smirnov <andrew.smirnov@gmail.com>
7 *
8 * This work is licensed under the terms of the GNU GPL, version 2 or later.
9 * See the COPYING file in the top-level directory.
10 */
11
12 #ifndef IMX7_CCM_H
13 #define IMX7_CCM_H
14
15 #include "hw/misc/imx_ccm.h"
16 #include "qemu/bitops.h"
17
18 enum IMX7AnalogRegisters {
19 ANALOG_PLL_ARM,
20 ANALOG_PLL_ARM_SET,
21 ANALOG_PLL_ARM_CLR,
22 ANALOG_PLL_ARM_TOG,
23 ANALOG_PLL_DDR,
24 ANALOG_PLL_DDR_SET,
25 ANALOG_PLL_DDR_CLR,
26 ANALOG_PLL_DDR_TOG,
27 ANALOG_PLL_DDR_SS,
28 ANALOG_PLL_DDR_SS_SET,
29 ANALOG_PLL_DDR_SS_CLR,
30 ANALOG_PLL_DDR_SS_TOG,
31 ANALOG_PLL_DDR_NUM,
32 ANALOG_PLL_DDR_NUM_SET,
33 ANALOG_PLL_DDR_NUM_CLR,
34 ANALOG_PLL_DDR_NUM_TOG,
35 ANALOG_PLL_DDR_DENOM,
36 ANALOG_PLL_DDR_DENOM_SET,
37 ANALOG_PLL_DDR_DENOM_CLR,
38 ANALOG_PLL_DDR_DENOM_TOG,
39 ANALOG_PLL_480,
40 ANALOG_PLL_480_SET,
41 ANALOG_PLL_480_CLR,
42 ANALOG_PLL_480_TOG,
43 ANALOG_PLL_480A,
44 ANALOG_PLL_480A_SET,
45 ANALOG_PLL_480A_CLR,
46 ANALOG_PLL_480A_TOG,
47 ANALOG_PLL_480B,
48 ANALOG_PLL_480B_SET,
49 ANALOG_PLL_480B_CLR,
50 ANALOG_PLL_480B_TOG,
51 ANALOG_PLL_ENET,
52 ANALOG_PLL_ENET_SET,
53 ANALOG_PLL_ENET_CLR,
54 ANALOG_PLL_ENET_TOG,
55 ANALOG_PLL_AUDIO,
56 ANALOG_PLL_AUDIO_SET,
57 ANALOG_PLL_AUDIO_CLR,
58 ANALOG_PLL_AUDIO_TOG,
59 ANALOG_PLL_AUDIO_SS,
60 ANALOG_PLL_AUDIO_SS_SET,
61 ANALOG_PLL_AUDIO_SS_CLR,
62 ANALOG_PLL_AUDIO_SS_TOG,
63 ANALOG_PLL_AUDIO_NUM,
64 ANALOG_PLL_AUDIO_NUM_SET,
65 ANALOG_PLL_AUDIO_NUM_CLR,
66 ANALOG_PLL_AUDIO_NUM_TOG,
67 ANALOG_PLL_AUDIO_DENOM,
68 ANALOG_PLL_AUDIO_DENOM_SET,
69 ANALOG_PLL_AUDIO_DENOM_CLR,
70 ANALOG_PLL_AUDIO_DENOM_TOG,
71 ANALOG_PLL_VIDEO,
72 ANALOG_PLL_VIDEO_SET,
73 ANALOG_PLL_VIDEO_CLR,
74 ANALOG_PLL_VIDEO_TOG,
75 ANALOG_PLL_VIDEO_SS,
76 ANALOG_PLL_VIDEO_SS_SET,
77 ANALOG_PLL_VIDEO_SS_CLR,
78 ANALOG_PLL_VIDEO_SS_TOG,
79 ANALOG_PLL_VIDEO_NUM,
80 ANALOG_PLL_VIDEO_NUM_SET,
81 ANALOG_PLL_VIDEO_NUM_CLR,
82 ANALOG_PLL_VIDEO_NUM_TOG,
83 ANALOG_PLL_VIDEO_DENOM,
84 ANALOG_PLL_VIDEO_DENOM_SET,
85 ANALOG_PLL_VIDEO_DENOM_CLR,
86 ANALOG_PLL_VIDEO_DENOM_TOG,
87 ANALOG_PLL_MISC0,
88 ANALOG_PLL_MISC0_SET,
89 ANALOG_PLL_MISC0_CLR,
90 ANALOG_PLL_MISC0_TOG,
91
92 ANALOG_DIGPROG = 0x800 / sizeof(uint32_t),
93 ANALOG_MAX,
94
95 ANALOG_PLL_LOCK = BIT(31)
96 };
97
98 enum IMX7CCMRegisters {
99 CCM_MAX = 0xBE00 / sizeof(uint32_t) + 1,
100 };
101
102 enum IMX7PMURegisters {
103 PMU_MAX = 0x140 / sizeof(uint32_t),
104 };
105
106 #define TYPE_IMX7_CCM "imx7.ccm"
107 #define IMX7_CCM(obj) OBJECT_CHECK(IMX7CCMState, (obj), TYPE_IMX7_CCM)
108
109 typedef struct IMX7CCMState {
110 /* <private> */
111 IMXCCMState parent_obj;
112
113 /* <public> */
114 MemoryRegion iomem;
115
116 uint32_t ccm[CCM_MAX];
117 } IMX7CCMState;
118
119
120 #define TYPE_IMX7_ANALOG "imx7.analog"
121 #define IMX7_ANALOG(obj) OBJECT_CHECK(IMX7AnalogState, (obj), TYPE_IMX7_ANALOG)
122
123 typedef struct IMX7AnalogState {
124 /* <private> */
125 IMXCCMState parent_obj;
126
127 /* <public> */
128 struct {
129 MemoryRegion container;
130 MemoryRegion analog;
131 MemoryRegion digprog;
132 MemoryRegion pmu;
133 } mmio;
134
135 uint32_t analog[ANALOG_MAX];
136 uint32_t pmu[PMU_MAX];
137 } IMX7AnalogState;
138
139 #endif /* IMX7_CCM_H */