summaryrefslogtreecommitdiffstats
path: root/cpu/at32ap/sm.h
blob: ce81ef0a4631b0bfc438852d5682f5d3439b96fc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
/*
 * Register definitions for System Manager
 */
#ifndef __CPU_AT32AP_SM_H__
#define __CPU_AT32AP_SM_H__

/* SM register offsets */
#define SM_PM_MCCTRL				0x0000
#define SM_PM_CKSEL				0x0004
#define SM_PM_CPU_MASK				0x0008
#define SM_PM_HSB_MASK				0x000c
#define SM_PM_PBA_MASK				0x0010
#define SM_PM_PBB_MASK				0x0014
#define SM_PM_PLL0				0x0020
#define SM_PM_PLL1				0x0024
#define SM_PM_VCTRL				0x0030
#define SM_PM_VMREF				0x0034
#define SM_PM_VMV				0x0038
#define SM_PM_IER				0x0040
#define SM_PM_IDR				0x0044
#define SM_PM_IMR				0x0048
#define SM_PM_ISR				0x004c
#define SM_PM_ICR				0x0050
#define SM_PM_GCCTRL				0x0060
#define SM_RTC_CTRL				0x0080
#define SM_RTC_VAL				0x0084
#define SM_RTC_TOP				0x0088
#define SM_RTC_IER				0x0090
#define SM_RTC_IDR				0x0094
#define SM_RTC_IMR				0x0098
#define SM_RTC_ISR				0x009c
#define SM_RTC_ICR				0x00a0
#define SM_WDT_CTRL				0x00b0
#define SM_WDT_CLR				0x00b4
#define SM_WDT_EXT				0x00b8
#define SM_RC_RCAUSE				0x00c0
#define SM_EIM_IER				0x0100
#define SM_EIM_IDR				0x0104
#define SM_EIM_IMR				0x0108
#define SM_EIM_ISR				0x010c
#define SM_EIM_ICR				0x0110
#define SM_EIM_MODE				0x0114
#define SM_EIM_EDGE				0x0118
#define SM_EIM_LEVEL				0x011c
#define SM_EIM_TEST				0x0120
#define SM_EIM_NMIC				0x0124

/* Bitfields in PM_CKSEL */
#define SM_CPUSEL_OFFSET			0
#define SM_CPUSEL_SIZE				3
#define SM_CPUDIV_OFFSET			7
#define SM_CPUDIV_SIZE				1
#define SM_HSBSEL_OFFSET			8
#define SM_HSBSEL_SIZE				3
#define SM_HSBDIV_OFFSET			15
#define SM_HSBDIV_SIZE				1
#define SM_PBASEL_OFFSET			16
#define SM_PBASEL_SIZE				3
#define SM_PBADIV_OFFSET			23
#define SM_PBADIV_SIZE				1
#define SM_PBBSEL_OFFSET			24
#define SM_PBBSEL_SIZE				3
#define SM_PBBDIV_OFFSET			31
#define SM_PBBDIV_SIZE				1

/* Bitfields in PM_PLL0 */
#define SM_PLLEN_OFFSET				0
#define SM_PLLEN_SIZE				1
#define SM_PLLOSC_OFFSET			1
#define SM_PLLOSC_SIZE				1
#define SM_PLLOPT_OFFSET			2
#define SM_PLLOPT_SIZE				3
#define SM_PLLDIV_OFFSET			8
#define SM_PLLDIV_SIZE				8
#define SM_PLLMUL_OFFSET			16
#define SM_PLLMUL_SIZE				8
#define SM_PLLCOUNT_OFFSET			24
#define SM_PLLCOUNT_SIZE			6
#define SM_PLLTEST_OFFSET			31
#define SM_PLLTEST_SIZE				1

/* Bitfields in PM_VCTRL */
#define SM_VAUTO_OFFSET				0
#define SM_VAUTO_SIZE				1
#define SM_PM_VCTRL_VAL_OFFSET			8
#define SM_PM_VCTRL_VAL_SIZE			7

/* Bitfields in PM_VMREF */
#define SM_REFSEL_OFFSET			0
#define SM_REFSEL_SIZE				4

/* Bitfields in PM_VMV */
#define SM_PM_VMV_VAL_OFFSET			0
#define SM_PM_VMV_VAL_SIZE			8

/* Bitfields in PM_ICR */
#define SM_LOCK0_OFFSET				0
#define SM_LOCK0_SIZE				1
#define SM_LOCK1_OFFSET				1
#define SM_LOCK1_SIZE				1
#define SM_WAKE_OFFSET				2
#define SM_WAKE_SIZE				1
#define SM_VOK_OFFSET				3
#define SM_VOK_SIZE				1
#define SM_VMRDY_OFFSET				4
#define SM_VMRDY_SIZE				1
#define SM_CKRDY_OFFSET				5
#define SM_CKRDY_SIZE				1

/* Bitfields in PM_GCCTRL */
#define SM_OSCSEL_OFFSET			0
#define SM_OSCSEL_SIZE				1
#define SM_PLLSEL_OFFSET			1
#define SM_PLLSEL_SIZE				1
#define SM_CEN_OFFSET				2
#define SM_CEN_SIZE				1
#define SM_CPC_OFFSET				3
#define SM_CPC_SIZE				1
#define SM_DIVEN_OFFSET				4
#define SM_DIVEN_SIZE				1
#define SM_DIV_OFFSET				8
#define SM_DIV_SIZE				8

/* Bitfields in RTC_CTRL */
#define SM_PCLR_OFFSET				1
#define SM_PCLR_SIZE				1
#define SM_TOPEN_OFFSET				2
#define SM_TOPEN_SIZE				1
#define SM_CLKEN_OFFSET				3
#define SM_CLKEN_SIZE				1
#define SM_PSEL_OFFSET				8
#define SM_PSEL_SIZE				16

/* Bitfields in RTC_VAL */
#define SM_RTC_VAL_VAL_OFFSET			0
#define SM_RTC_VAL_VAL_SIZE			31

/* Bitfields in RTC_TOP */
#define SM_RTC_TOP_VAL_OFFSET			0
#define SM_RTC_TOP_VAL_SIZE			32

/* Bitfields in RTC_ICR */
#define SM_TOPI_OFFSET				0
#define SM_TOPI_SIZE				1

/* Bitfields in WDT_CTRL */
#define SM_KEY_OFFSET				24
#define SM_KEY_SIZE				8

/* Bitfields in RC_RCAUSE */
#define SM_POR_OFFSET				0
#define SM_POR_SIZE				1
#define SM_BOD_OFFSET				1
#define SM_BOD_SIZE				1
#define SM_EXT_OFFSET				2
#define SM_EXT_SIZE				1
#define SM_WDT_OFFSET				3
#define SM_WDT_SIZE				1
#define SM_NTAE_OFFSET				4
#define SM_NTAE_SIZE				1
#define SM_SERP_OFFSET				5
#define SM_SERP_SIZE				1

/* Bitfields in EIM_EDGE */
#define SM_INT0_OFFSET				0
#define SM_INT0_SIZE				1
#define SM_INT1_OFFSET				1
#define SM_INT1_SIZE				1
#define SM_INT2_OFFSET				2
#define SM_INT2_SIZE				1
#define SM_INT3_OFFSET				3
#define SM_INT3_SIZE				1

/* Bitfields in EIM_LEVEL */

/* Bitfields in EIM_TEST */
#define SM_TESTEN_OFFSET			31
#define SM_TESTEN_SIZE				1

/* Bitfields in EIM_NMIC */
#define SM_EN_OFFSET				0
#define SM_EN_SIZE				1

/* Bit manipulation macros */
#define SM_BIT(name)					\
	(1 << SM_##name##_OFFSET)
#define SM_BF(name,value)				\
	(((value) & ((1 << SM_##name##_SIZE) - 1))	\
	 << SM_##name##_OFFSET)
#define SM_BFEXT(name,value)				\
	(((value) >> SM_##name##_OFFSET)		\
	 & ((1 << SM_##name##_SIZE) - 1))
#define SM_BFINS(name,value,old)			\
	(((old) & ~(((1 << SM_##name##_SIZE) - 1)	\
		    << SM_##name##_OFFSET))		\
	 | SM_BF(name,value))

/* Register access macros */
#define sm_readl(port,reg)				\
	readl((port)->regs + SM_##reg)
#define sm_writel(port,reg,value)			\
	writel((value), (port)->regs + SM_##reg)

#endif /* __CPU_AT32AP_SM_H__ */