]>
Commit | Line | Data |
---|---|---|
e9e0ef15 AS |
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" | |
db1015e9 | 17 | #include "qom/object.h" |
e9e0ef15 AS |
18 | |
19 | enum IMX7AnalogRegisters { | |
20 | ANALOG_PLL_ARM, | |
21 | ANALOG_PLL_ARM_SET, | |
22 | ANALOG_PLL_ARM_CLR, | |
23 | ANALOG_PLL_ARM_TOG, | |
24 | ANALOG_PLL_DDR, | |
25 | ANALOG_PLL_DDR_SET, | |
26 | ANALOG_PLL_DDR_CLR, | |
27 | ANALOG_PLL_DDR_TOG, | |
28 | ANALOG_PLL_DDR_SS, | |
29 | ANALOG_PLL_DDR_SS_SET, | |
30 | ANALOG_PLL_DDR_SS_CLR, | |
31 | ANALOG_PLL_DDR_SS_TOG, | |
32 | ANALOG_PLL_DDR_NUM, | |
33 | ANALOG_PLL_DDR_NUM_SET, | |
34 | ANALOG_PLL_DDR_NUM_CLR, | |
35 | ANALOG_PLL_DDR_NUM_TOG, | |
36 | ANALOG_PLL_DDR_DENOM, | |
37 | ANALOG_PLL_DDR_DENOM_SET, | |
38 | ANALOG_PLL_DDR_DENOM_CLR, | |
39 | ANALOG_PLL_DDR_DENOM_TOG, | |
40 | ANALOG_PLL_480, | |
41 | ANALOG_PLL_480_SET, | |
42 | ANALOG_PLL_480_CLR, | |
43 | ANALOG_PLL_480_TOG, | |
44 | ANALOG_PLL_480A, | |
45 | ANALOG_PLL_480A_SET, | |
46 | ANALOG_PLL_480A_CLR, | |
47 | ANALOG_PLL_480A_TOG, | |
48 | ANALOG_PLL_480B, | |
49 | ANALOG_PLL_480B_SET, | |
50 | ANALOG_PLL_480B_CLR, | |
51 | ANALOG_PLL_480B_TOG, | |
52 | ANALOG_PLL_ENET, | |
53 | ANALOG_PLL_ENET_SET, | |
54 | ANALOG_PLL_ENET_CLR, | |
55 | ANALOG_PLL_ENET_TOG, | |
56 | ANALOG_PLL_AUDIO, | |
57 | ANALOG_PLL_AUDIO_SET, | |
58 | ANALOG_PLL_AUDIO_CLR, | |
59 | ANALOG_PLL_AUDIO_TOG, | |
60 | ANALOG_PLL_AUDIO_SS, | |
61 | ANALOG_PLL_AUDIO_SS_SET, | |
62 | ANALOG_PLL_AUDIO_SS_CLR, | |
63 | ANALOG_PLL_AUDIO_SS_TOG, | |
64 | ANALOG_PLL_AUDIO_NUM, | |
65 | ANALOG_PLL_AUDIO_NUM_SET, | |
66 | ANALOG_PLL_AUDIO_NUM_CLR, | |
67 | ANALOG_PLL_AUDIO_NUM_TOG, | |
68 | ANALOG_PLL_AUDIO_DENOM, | |
69 | ANALOG_PLL_AUDIO_DENOM_SET, | |
70 | ANALOG_PLL_AUDIO_DENOM_CLR, | |
71 | ANALOG_PLL_AUDIO_DENOM_TOG, | |
72 | ANALOG_PLL_VIDEO, | |
73 | ANALOG_PLL_VIDEO_SET, | |
74 | ANALOG_PLL_VIDEO_CLR, | |
75 | ANALOG_PLL_VIDEO_TOG, | |
76 | ANALOG_PLL_VIDEO_SS, | |
77 | ANALOG_PLL_VIDEO_SS_SET, | |
78 | ANALOG_PLL_VIDEO_SS_CLR, | |
79 | ANALOG_PLL_VIDEO_SS_TOG, | |
80 | ANALOG_PLL_VIDEO_NUM, | |
81 | ANALOG_PLL_VIDEO_NUM_SET, | |
82 | ANALOG_PLL_VIDEO_NUM_CLR, | |
83 | ANALOG_PLL_VIDEO_NUM_TOG, | |
84 | ANALOG_PLL_VIDEO_DENOM, | |
85 | ANALOG_PLL_VIDEO_DENOM_SET, | |
86 | ANALOG_PLL_VIDEO_DENOM_CLR, | |
87 | ANALOG_PLL_VIDEO_DENOM_TOG, | |
88 | ANALOG_PLL_MISC0, | |
89 | ANALOG_PLL_MISC0_SET, | |
90 | ANALOG_PLL_MISC0_CLR, | |
91 | ANALOG_PLL_MISC0_TOG, | |
92 | ||
93 | ANALOG_DIGPROG = 0x800 / sizeof(uint32_t), | |
94 | ANALOG_MAX, | |
95 | ||
96 | ANALOG_PLL_LOCK = BIT(31) | |
97 | }; | |
98 | ||
99 | enum IMX7CCMRegisters { | |
100 | CCM_MAX = 0xBE00 / sizeof(uint32_t) + 1, | |
101 | }; | |
102 | ||
103 | enum IMX7PMURegisters { | |
104 | PMU_MAX = 0x140 / sizeof(uint32_t), | |
105 | }; | |
106 | ||
107 | #define TYPE_IMX7_CCM "imx7.ccm" | |
db1015e9 | 108 | typedef struct IMX7CCMState IMX7CCMState; |
e9e0ef15 AS |
109 | #define IMX7_CCM(obj) OBJECT_CHECK(IMX7CCMState, (obj), TYPE_IMX7_CCM) |
110 | ||
db1015e9 | 111 | struct IMX7CCMState { |
e9e0ef15 AS |
112 | /* <private> */ |
113 | IMXCCMState parent_obj; | |
114 | ||
115 | /* <public> */ | |
116 | MemoryRegion iomem; | |
117 | ||
118 | uint32_t ccm[CCM_MAX]; | |
db1015e9 | 119 | }; |
e9e0ef15 AS |
120 | |
121 | ||
122 | #define TYPE_IMX7_ANALOG "imx7.analog" | |
db1015e9 | 123 | typedef struct IMX7AnalogState IMX7AnalogState; |
e9e0ef15 AS |
124 | #define IMX7_ANALOG(obj) OBJECT_CHECK(IMX7AnalogState, (obj), TYPE_IMX7_ANALOG) |
125 | ||
db1015e9 | 126 | struct IMX7AnalogState { |
e9e0ef15 AS |
127 | /* <private> */ |
128 | IMXCCMState parent_obj; | |
129 | ||
130 | /* <public> */ | |
131 | struct { | |
132 | MemoryRegion container; | |
133 | MemoryRegion analog; | |
134 | MemoryRegion digprog; | |
135 | MemoryRegion pmu; | |
136 | } mmio; | |
137 | ||
138 | uint32_t analog[ANALOG_MAX]; | |
139 | uint32_t pmu[PMU_MAX]; | |
db1015e9 | 140 | }; |
e9e0ef15 AS |
141 | |
142 | #endif /* IMX7_CCM_H */ |