19
19
#include "clk.h"
20
20
#include "reset.h"
21
21
22
- #define APBC_RTC 0x28
23
- #define APBC_TWSI0 0x2c
24
- #define APBC_KPC 0x30
25
22
#define APBC_UART0 0x0
26
23
#define APBC_UART1 0x4
27
24
#define APBC_GPIO 0x8
28
25
#define APBC_PWM0 0xc
29
26
#define APBC_PWM1 0x10
30
27
#define APBC_PWM2 0x14
31
28
#define APBC_PWM3 0x18
29
+ #define APBC_RTC 0x28
30
+ #define APBC_TWSI0 0x2c
31
+ #define APBC_KPC 0x30
32
32
#define APBC_TIMER 0x34
33
+ #define APBC_AIB 0x3c
34
+ #define APBC_SW_JTAG 0x40
35
+ #define APBC_ONEWIRE 0x48
36
+ #define APBC_TWSI1 0x6c
37
+ #define APBC_UART2 0x70
38
+ #define APBC_AC97 0x84
33
39
#define APBC_SSP0 0x81c
34
40
#define APBC_SSP1 0x820
35
41
#define APBC_SSP2 0x84c
36
42
#define APBC_SSP3 0x858
37
43
#define APBC_SSP4 0x85c
38
- #define APBC_TWSI1 0x6c
39
- #define APBC_UART2 0x70
44
+ #define APMU_DISP0 0x4c
45
+ #define APMU_CCIC0 0x50
40
46
#define APMU_SDH0 0x54
41
47
#define APMU_SDH1 0x58
42
48
#define APMU_USB 0x5c
43
- #define APMU_DISP0 0x4c
44
- #define APMU_CCIC0 0x50
45
49
#define APMU_DFC 0x60
50
+ #define APMU_DMA 0x64
51
+ #define APMU_BUS 0x6c
52
+ #define APMU_GC 0xcc
53
+ #define APMU_SMC 0xd4
54
+ #define APMU_XD 0xdc
55
+ #define APMU_SDH2 0xe0
56
+ #define APMU_SDH3 0xe4
57
+ #define APMU_CF 0xf0
58
+ #define APMU_MSP 0xf4
59
+ #define APMU_CMU 0xf8
60
+ #define APMU_FE 0xfc
61
+ #define APMU_PCIE 0x100
62
+ #define APMU_EPD 0x104
46
63
#define MPMU_UART_PLL 0x14
47
64
48
65
struct pxa168_clk_unit {
@@ -71,9 +88,12 @@ static struct mmp_param_fixed_factor_clk fixed_factor_clks[] = {
71
88
{PXA168_CLK_PLL1_96 , "pll1_96" , "pll1_48" , 1 , 2 , 0 },
72
89
{PXA168_CLK_PLL1_192 , "pll1_192" , "pll1_96" , 1 , 2 , 0 },
73
90
{PXA168_CLK_PLL1_13 , "pll1_13" , "pll1" , 1 , 13 , 0 },
74
- {PXA168_CLK_PLL1_13_1_5 , "pll1_13_1_5" , "pll1_13" , 2 , 3 , 0 },
75
- {PXA168_CLK_PLL1_2_1_5 , "pll1_2_1_5" , "pll1_2" , 2 , 3 , 0 },
91
+ {PXA168_CLK_PLL1_13_1_5 , "pll1_13_1_5" , "pll1_13" , 1 , 5 , 0 },
92
+ {PXA168_CLK_PLL1_2_1_5 , "pll1_2_1_5" , "pll1_2" , 1 , 5 , 0 },
76
93
{PXA168_CLK_PLL1_3_16 , "pll1_3_16" , "pll1" , 3 , 16 , 0 },
94
+ {PXA168_CLK_PLL1_2_1_10 , "pll1_2_1_10" , "pll1_2" , 1 , 10 , 0 },
95
+ {PXA168_CLK_PLL1_2_3_16 , "pll1_2_3_16" , "pll1_2" , 3 , 16 , 0 },
96
+ {PXA168_CLK_CLK32_2 , "clk32_2" , "clk32" , 1 , 2 , 0 },
77
97
};
78
98
79
99
static struct mmp_clk_factor_masks uart_factor_masks = {
@@ -107,24 +127,44 @@ static void pxa168_pll_init(struct pxa168_clk_unit *pxa_unit)
107
127
mmp_clk_add (unit , PXA168_CLK_UART_PLL , clk );
108
128
}
109
129
130
+ static DEFINE_SPINLOCK (twsi0_lock );
131
+ static DEFINE_SPINLOCK (twsi1_lock );
132
+ static const char * const twsi_parent_names [] = {"pll1_2_1_10" , "pll1_2_1_5" };
133
+
134
+ static DEFINE_SPINLOCK (kpc_lock );
135
+ static const char * const kpc_parent_names [] = {"clk32" , "clk32_2" , "pll1_24" };
136
+
137
+ static DEFINE_SPINLOCK (pwm0_lock );
138
+ static DEFINE_SPINLOCK (pwm1_lock );
139
+ static DEFINE_SPINLOCK (pwm2_lock );
140
+ static DEFINE_SPINLOCK (pwm3_lock );
141
+ static const char * const pwm_parent_names [] = {"pll1_48" , "clk32" };
142
+
110
143
static DEFINE_SPINLOCK (uart0_lock );
111
144
static DEFINE_SPINLOCK (uart1_lock );
112
145
static DEFINE_SPINLOCK (uart2_lock );
113
- static const char * uart_parent_names [] = {"pll1_3_16 " , "uart_pll" };
146
+ static const char * const uart_parent_names [] = {"pll1_2_3_16 " , "uart_pll" };
114
147
115
148
static DEFINE_SPINLOCK (ssp0_lock );
116
149
static DEFINE_SPINLOCK (ssp1_lock );
117
150
static DEFINE_SPINLOCK (ssp2_lock );
118
151
static DEFINE_SPINLOCK (ssp3_lock );
119
152
static DEFINE_SPINLOCK (ssp4_lock );
120
- static const char * ssp_parent_names [] = {"pll1_96" , "pll1_48" , "pll1_24" , "pll1_12" };
153
+ static const char * const ssp_parent_names [] = {"pll1_96" , "pll1_48" , "pll1_24" , "pll1_12" };
121
154
122
155
static DEFINE_SPINLOCK (timer_lock );
123
- static const char * timer_parent_names [] = {"pll1_48" , "clk32" , "pll1_96" , "pll1_192" };
156
+ static const char * const timer_parent_names [] = {"pll1_48" , "clk32" , "pll1_96" , "pll1_192" };
124
157
125
158
static DEFINE_SPINLOCK (reset_lock );
126
159
127
160
static struct mmp_param_mux_clk apbc_mux_clks [] = {
161
+ {0 , "twsi0_mux" , twsi_parent_names , ARRAY_SIZE (twsi_parent_names ), CLK_SET_RATE_PARENT , APBC_TWSI0 , 4 , 3 , 0 , & twsi0_lock },
162
+ {0 , "twsi1_mux" , twsi_parent_names , ARRAY_SIZE (twsi_parent_names ), CLK_SET_RATE_PARENT , APBC_TWSI1 , 4 , 3 , 0 , & twsi1_lock },
163
+ {0 , "kpc_mux" , kpc_parent_names , ARRAY_SIZE (kpc_parent_names ), CLK_SET_RATE_PARENT , APBC_KPC , 4 , 3 , 0 , & kpc_lock },
164
+ {0 , "pwm0_mux" , pwm_parent_names , ARRAY_SIZE (pwm_parent_names ), CLK_SET_RATE_PARENT , APBC_PWM0 , 4 , 3 , 0 , & pwm0_lock },
165
+ {0 , "pwm1_mux" , pwm_parent_names , ARRAY_SIZE (pwm_parent_names ), CLK_SET_RATE_PARENT , APBC_PWM1 , 4 , 3 , 0 , & pwm1_lock },
166
+ {0 , "pwm2_mux" , pwm_parent_names , ARRAY_SIZE (pwm_parent_names ), CLK_SET_RATE_PARENT , APBC_PWM2 , 4 , 3 , 0 , & pwm2_lock },
167
+ {0 , "pwm3_mux" , pwm_parent_names , ARRAY_SIZE (pwm_parent_names ), CLK_SET_RATE_PARENT , APBC_PWM3 , 4 , 3 , 0 , & pwm3_lock },
128
168
{0 , "uart0_mux" , uart_parent_names , ARRAY_SIZE (uart_parent_names ), CLK_SET_RATE_PARENT , APBC_UART0 , 4 , 3 , 0 , & uart0_lock },
129
169
{0 , "uart1_mux" , uart_parent_names , ARRAY_SIZE (uart_parent_names ), CLK_SET_RATE_PARENT , APBC_UART1 , 4 , 3 , 0 , & uart1_lock },
130
170
{0 , "uart2_mux" , uart_parent_names , ARRAY_SIZE (uart_parent_names ), CLK_SET_RATE_PARENT , APBC_UART2 , 4 , 3 , 0 , & uart2_lock },
@@ -137,16 +177,15 @@ static struct mmp_param_mux_clk apbc_mux_clks[] = {
137
177
};
138
178
139
179
static struct mmp_param_gate_clk apbc_gate_clks [] = {
140
- {PXA168_CLK_TWSI0 , "twsi0_clk" , "pll1_13_1_5 " , CLK_SET_RATE_PARENT , APBC_TWSI0 , 0x3 , 0x3 , 0x0 , 0 , & reset_lock },
141
- {PXA168_CLK_TWSI1 , "twsi1_clk" , "pll1_13_1_5 " , CLK_SET_RATE_PARENT , APBC_TWSI1 , 0x3 , 0x3 , 0x0 , 0 , & reset_lock },
142
- {PXA168_CLK_GPIO , "gpio_clk" , "vctcxo" , CLK_SET_RATE_PARENT , APBC_GPIO , 0x3 , 0x3 , 0x0 , 0 , & reset_lock },
143
- {PXA168_CLK_KPC , "kpc_clk" , "clk32 " , CLK_SET_RATE_PARENT , APBC_KPC , 0x3 , 0x3 , 0x0 , MMP_CLK_GATE_NEED_DELAY , NULL },
180
+ {PXA168_CLK_TWSI0 , "twsi0_clk" , "twsi0_mux " , CLK_SET_RATE_PARENT , APBC_TWSI0 , 0x3 , 0x3 , 0x0 , 0 , & twsi0_lock },
181
+ {PXA168_CLK_TWSI1 , "twsi1_clk" , "twsi1_mux " , CLK_SET_RATE_PARENT , APBC_TWSI1 , 0x3 , 0x3 , 0x0 , 0 , & twsi1_lock },
182
+ {PXA168_CLK_GPIO , "gpio_clk" , "vctcxo" , CLK_SET_RATE_PARENT , APBC_GPIO , 0x1 , 0x1 , 0x0 , 0 , & reset_lock },
183
+ {PXA168_CLK_KPC , "kpc_clk" , "kpc_mux " , CLK_SET_RATE_PARENT , APBC_KPC , 0x3 , 0x3 , 0x0 , MMP_CLK_GATE_NEED_DELAY , & kpc_lock },
144
184
{PXA168_CLK_RTC , "rtc_clk" , "clk32" , CLK_SET_RATE_PARENT , APBC_RTC , 0x83 , 0x83 , 0x0 , MMP_CLK_GATE_NEED_DELAY , NULL },
145
- {PXA168_CLK_PWM0 , "pwm0_clk" , "pll1_48" , CLK_SET_RATE_PARENT , APBC_PWM0 , 0x3 , 0x3 , 0x0 , 0 , & reset_lock },
146
- {PXA168_CLK_PWM1 , "pwm1_clk" , "pll1_48" , CLK_SET_RATE_PARENT , APBC_PWM1 , 0x3 , 0x3 , 0x0 , 0 , & reset_lock },
147
- {PXA168_CLK_PWM2 , "pwm2_clk" , "pll1_48" , CLK_SET_RATE_PARENT , APBC_PWM2 , 0x3 , 0x3 , 0x0 , 0 , & reset_lock },
148
- {PXA168_CLK_PWM3 , "pwm3_clk" , "pll1_48" , CLK_SET_RATE_PARENT , APBC_PWM3 , 0x3 , 0x3 , 0x0 , 0 , & reset_lock },
149
- /* The gate clocks has mux parent. */
185
+ {PXA168_CLK_PWM0 , "pwm0_clk" , "pwm0_mux" , CLK_SET_RATE_PARENT , APBC_PWM0 , 0x3 , 0x3 , 0x0 , 0 , & pwm0_lock },
186
+ {PXA168_CLK_PWM1 , "pwm1_clk" , "pwm1_mux" , CLK_SET_RATE_PARENT , APBC_PWM1 , 0x3 , 0x3 , 0x0 , 0 , & pwm1_lock },
187
+ {PXA168_CLK_PWM2 , "pwm2_clk" , "pwm2_mux" , CLK_SET_RATE_PARENT , APBC_PWM2 , 0x3 , 0x3 , 0x0 , 0 , & pwm2_lock },
188
+ {PXA168_CLK_PWM3 , "pwm3_clk" , "pwm3_mux" , CLK_SET_RATE_PARENT , APBC_PWM3 , 0x3 , 0x3 , 0x0 , 0 , & pwm3_lock },
150
189
{PXA168_CLK_UART0 , "uart0_clk" , "uart0_mux" , CLK_SET_RATE_PARENT , APBC_UART0 , 0x3 , 0x3 , 0x0 , 0 , & uart0_lock },
151
190
{PXA168_CLK_UART1 , "uart1_clk" , "uart1_mux" , CLK_SET_RATE_PARENT , APBC_UART1 , 0x3 , 0x3 , 0x0 , 0 , & uart1_lock },
152
191
{PXA168_CLK_UART2 , "uart2_clk" , "uart2_mux" , CLK_SET_RATE_PARENT , APBC_UART2 , 0x3 , 0x3 , 0x0 , 0 , & uart2_lock },
@@ -170,22 +209,30 @@ static void pxa168_apb_periph_clk_init(struct pxa168_clk_unit *pxa_unit)
170
209
171
210
}
172
211
212
+ static DEFINE_SPINLOCK (dfc_lock );
213
+ static const char * const dfc_parent_names [] = {"pll1_4" , "pll1_8" };
214
+
173
215
static DEFINE_SPINLOCK (sdh0_lock );
174
216
static DEFINE_SPINLOCK (sdh1_lock );
175
- static const char * sdh_parent_names [] = {"pll1_12" , "pll1_13" };
217
+ static DEFINE_SPINLOCK (sdh2_lock );
218
+ static DEFINE_SPINLOCK (sdh3_lock );
219
+ static const char * const sdh_parent_names [] = {"pll1_13" , "pll1_12" , "pll1_8" };
176
220
177
221
static DEFINE_SPINLOCK (usb_lock );
178
222
179
223
static DEFINE_SPINLOCK (disp0_lock );
180
- static const char * disp_parent_names [] = {"pll1_2 " , "pll1_12 " };
224
+ static const char * const disp_parent_names [] = {"pll1 " , "pll1_2 " };
181
225
182
226
static DEFINE_SPINLOCK (ccic0_lock );
183
- static const char * ccic_parent_names [] = {"pll1_2 " , "pll1_12 " };
184
- static const char * ccic_phy_parent_names [] = {"pll1_6" , "pll1_12" };
227
+ static const char * const ccic_parent_names [] = {"pll1_4 " , "pll1_8 " };
228
+ static const char * const ccic_phy_parent_names [] = {"pll1_6" , "pll1_12" };
185
229
186
230
static struct mmp_param_mux_clk apmu_mux_clks [] = {
187
- {0 , "sdh0_mux" , sdh_parent_names , ARRAY_SIZE (sdh_parent_names ), CLK_SET_RATE_PARENT , APMU_SDH0 , 6 , 1 , 0 , & sdh0_lock },
188
- {0 , "sdh1_mux" , sdh_parent_names , ARRAY_SIZE (sdh_parent_names ), CLK_SET_RATE_PARENT , APMU_SDH1 , 6 , 1 , 0 , & sdh1_lock },
231
+ {0 , "dfc_mux" , dfc_parent_names , ARRAY_SIZE (dfc_parent_names ), CLK_SET_RATE_PARENT , APMU_DFC , 6 , 1 , 0 , & dfc_lock },
232
+ {0 , "sdh0_mux" , sdh_parent_names , ARRAY_SIZE (sdh_parent_names ), CLK_SET_RATE_PARENT , APMU_SDH0 , 6 , 2 , 0 , & sdh0_lock },
233
+ {0 , "sdh1_mux" , sdh_parent_names , ARRAY_SIZE (sdh_parent_names ), CLK_SET_RATE_PARENT , APMU_SDH1 , 6 , 2 , 0 , & sdh1_lock },
234
+ {0 , "sdh2_mux" , sdh_parent_names , ARRAY_SIZE (sdh_parent_names ), CLK_SET_RATE_PARENT , APMU_SDH2 , 6 , 2 , 0 , & sdh2_lock },
235
+ {0 , "sdh3_mux" , sdh_parent_names , ARRAY_SIZE (sdh_parent_names ), CLK_SET_RATE_PARENT , APMU_SDH3 , 6 , 2 , 0 , & sdh3_lock },
189
236
{0 , "disp0_mux" , disp_parent_names , ARRAY_SIZE (disp_parent_names ), CLK_SET_RATE_PARENT , APMU_DISP0 , 6 , 1 , 0 , & disp0_lock },
190
237
{0 , "ccic0_mux" , ccic_parent_names , ARRAY_SIZE (ccic_parent_names ), CLK_SET_RATE_PARENT , APMU_CCIC0 , 6 , 1 , 0 , & ccic0_lock },
191
238
{0 , "ccic0_phy_mux" , ccic_phy_parent_names , ARRAY_SIZE (ccic_phy_parent_names ), CLK_SET_RATE_PARENT , APMU_CCIC0 , 7 , 1 , 0 , & ccic0_lock },
@@ -196,12 +243,16 @@ static struct mmp_param_div_clk apmu_div_clks[] = {
196
243
};
197
244
198
245
static struct mmp_param_gate_clk apmu_gate_clks [] = {
199
- {PXA168_CLK_DFC , "dfc_clk" , "pll1_4 " , CLK_SET_RATE_PARENT , APMU_DFC , 0x19b , 0x19b , 0x0 , 0 , NULL },
246
+ {PXA168_CLK_DFC , "dfc_clk" , "dfc_mux " , CLK_SET_RATE_PARENT , APMU_DFC , 0x19b , 0x19b , 0x0 , 0 , & dfc_lock },
200
247
{PXA168_CLK_USB , "usb_clk" , "usb_pll" , 0 , APMU_USB , 0x9 , 0x9 , 0x0 , 0 , & usb_lock },
201
248
{PXA168_CLK_SPH , "sph_clk" , "usb_pll" , 0 , APMU_USB , 0x12 , 0x12 , 0x0 , 0 , & usb_lock },
202
- /* The gate clocks has mux parent. */
203
- {PXA168_CLK_SDH0 , "sdh0_clk" , "sdh0_mux" , CLK_SET_RATE_PARENT , APMU_SDH0 , 0x1b , 0x1b , 0x0 , 0 , & sdh0_lock },
204
- {PXA168_CLK_SDH1 , "sdh1_clk" , "sdh1_mux" , CLK_SET_RATE_PARENT , APMU_SDH1 , 0x1b , 0x1b , 0x0 , 0 , & sdh1_lock },
249
+ {PXA168_CLK_SDH0 , "sdh0_clk" , "sdh0_mux" , CLK_SET_RATE_PARENT , APMU_SDH0 , 0x12 , 0x12 , 0x0 , 0 , & sdh0_lock },
250
+ {PXA168_CLK_SDH1 , "sdh1_clk" , "sdh1_mux" , CLK_SET_RATE_PARENT , APMU_SDH1 , 0x12 , 0x12 , 0x0 , 0 , & sdh1_lock },
251
+ {PXA168_CLK_SDH2 , "sdh2_clk" , "sdh2_mux" , CLK_SET_RATE_PARENT , APMU_SDH2 , 0x12 , 0x12 , 0x0 , 0 , & sdh2_lock },
252
+ {PXA168_CLK_SDH3 , "sdh3_clk" , "sdh3_mux" , CLK_SET_RATE_PARENT , APMU_SDH3 , 0x12 , 0x12 , 0x0 , 0 , & sdh3_lock },
253
+ /* SDH0/1 and 2/3 AXI clocks are also gated by common bits in SDH0 and SDH2 registers */
254
+ {PXA168_CLK_SDH01_AXI , "sdh01_axi_clk" , NULL , CLK_SET_RATE_PARENT , APMU_SDH0 , 0x9 , 0x9 , 0x0 , 0 , & sdh0_lock },
255
+ {PXA168_CLK_SDH23_AXI , "sdh23_axi_clk" , NULL , CLK_SET_RATE_PARENT , APMU_SDH2 , 0x9 , 0x9 , 0x0 , 0 , & sdh2_lock },
205
256
{PXA168_CLK_DISP0 , "disp0_clk" , "disp0_mux" , CLK_SET_RATE_PARENT , APMU_DISP0 , 0x1b , 0x1b , 0x0 , 0 , & disp0_lock },
206
257
{PXA168_CLK_CCIC0 , "ccic0_clk" , "ccic0_mux" , CLK_SET_RATE_PARENT , APMU_CCIC0 , 0x1b , 0x1b , 0x0 , 0 , & ccic0_lock },
207
258
{PXA168_CLK_CCIC0_PHY , "ccic0_phy_clk" , "ccic0_phy_mux" , CLK_SET_RATE_PARENT , APMU_CCIC0 , 0x24 , 0x24 , 0x0 , 0 , & ccic0_lock },
0 commit comments