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