25
25
26
26
#include <dt-bindings/clock/r8a779a0-cpg-mssr.h>
27
27
28
+ #include "rcar-cpg-lib.h"
28
29
#include "renesas-cpg-mssr.h"
29
30
30
31
enum rcar_r8a779a0_clk_types {
31
32
CLK_TYPE_R8A779A0_MAIN = CLK_TYPE_CUSTOM ,
32
33
CLK_TYPE_R8A779A0_PLL1 ,
33
34
CLK_TYPE_R8A779A0_PLL2X_3X , /* PLL[23][01] */
34
35
CLK_TYPE_R8A779A0_PLL5 ,
36
+ CLK_TYPE_R8A779A0_SD ,
35
37
CLK_TYPE_R8A779A0_MDSEL , /* Select parent/divider using mode pin */
36
38
CLK_TYPE_R8A779A0_OSC , /* OSC EXTAL predivider and fixed divider */
37
39
};
@@ -69,7 +71,6 @@ enum clk_ids {
69
71
CLK_PLL5_DIV2 ,
70
72
CLK_PLL5_DIV4 ,
71
73
CLK_S1 ,
72
- CLK_S2 ,
73
74
CLK_S3 ,
74
75
CLK_SDSRC ,
75
76
CLK_RPCSRC ,
@@ -83,6 +84,9 @@ enum clk_ids {
83
84
DEF_BASE(_name, _id, CLK_TYPE_R8A779A0_PLL2X_3X, CLK_MAIN, \
84
85
.offset = _offset)
85
86
87
+ #define DEF_SD (_name , _id , _parent , _offset ) \
88
+ DEF_BASE(_name, _id, CLK_TYPE_R8A779A0_SD, _parent, .offset = _offset)
89
+
86
90
#define DEF_MDSEL (_name , _id , _md , _parent0 , _div0 , _parent1 , _div1 ) \
87
91
DEF_BASE(_name, _id, CLK_TYPE_R8A779A0_MDSEL, \
88
92
(_parent0) << 16 | (_parent1), \
@@ -114,6 +118,7 @@ static const struct cpg_core_clk r8a779a0_core_clks[] __initconst = {
114
118
DEF_FIXED (".pll5_div4" , CLK_PLL5_DIV4 , CLK_PLL5_DIV2 , 2 , 1 ),
115
119
DEF_FIXED (".s1" , CLK_S1 , CLK_PLL1_DIV2 , 2 , 1 ),
116
120
DEF_FIXED (".s3" , CLK_S3 , CLK_PLL1_DIV2 , 4 , 1 ),
121
+ DEF_FIXED (".sdsrc" , CLK_SDSRC , CLK_PLL5_DIV4 , 1 , 1 ),
117
122
DEF_RATE (".oco" , CLK_OCO , 32768 ),
118
123
119
124
/* Core Clock Outputs */
@@ -137,7 +142,10 @@ static const struct cpg_core_clk r8a779a0_core_clks[] __initconst = {
137
142
DEF_FIXED ("icu" , R8A779A0_CLK_ICU , CLK_PLL5_DIV4 , 2 , 1 ),
138
143
DEF_FIXED ("icud2" , R8A779A0_CLK_ICUD2 , CLK_PLL5_DIV4 , 4 , 1 ),
139
144
DEF_FIXED ("vcbus" , R8A779A0_CLK_VCBUS , CLK_PLL5_DIV4 , 1 , 1 ),
140
- DEF_FIXED ("cbfusa" , R8A779A0_CLK_CBFUSA , CLK_MAIN , 2 , 1 ),
145
+ DEF_FIXED ("cbfusa" , R8A779A0_CLK_CBFUSA , CLK_EXTAL , 2 , 1 ),
146
+ DEF_FIXED ("cp" , R8A779A0_CLK_CP , CLK_EXTAL , 2 , 1 ),
147
+
148
+ DEF_SD ("sd0" , R8A779A0_CLK_SD0 , CLK_SDSRC , 0x870 ),
141
149
142
150
DEF_DIV6P1 ("mso" , R8A779A0_CLK_MSO , CLK_PLL5_DIV4 , 0x87c ),
143
151
DEF_DIV6P1 ("canfd" , R8A779A0_CLK_CANFD , CLK_PLL5_DIV4 , 0x878 ),
@@ -148,14 +156,42 @@ static const struct cpg_core_clk r8a779a0_core_clks[] __initconst = {
148
156
};
149
157
150
158
static const struct mssr_mod_clk r8a779a0_mod_clks [] __initconst = {
159
+ DEF_MOD ("avb0" , 211 , R8A779A0_CLK_S3D2 ),
160
+ DEF_MOD ("avb1" , 212 , R8A779A0_CLK_S3D2 ),
161
+ DEF_MOD ("avb2" , 213 , R8A779A0_CLK_S3D2 ),
162
+ DEF_MOD ("avb3" , 214 , R8A779A0_CLK_S3D2 ),
163
+ DEF_MOD ("avb4" , 215 , R8A779A0_CLK_S3D2 ),
164
+ DEF_MOD ("avb5" , 216 , R8A779A0_CLK_S3D2 ),
151
165
DEF_MOD ("csi40" , 331 , R8A779A0_CLK_CSI0 ),
152
166
DEF_MOD ("csi41" , 400 , R8A779A0_CLK_CSI0 ),
153
167
DEF_MOD ("csi42" , 401 , R8A779A0_CLK_CSI0 ),
154
168
DEF_MOD ("csi43" , 402 , R8A779A0_CLK_CSI0 ),
169
+ DEF_MOD ("fcpvd0" , 508 , R8A779A0_CLK_S3D1 ),
170
+ DEF_MOD ("fcpvd1" , 509 , R8A779A0_CLK_S3D1 ),
171
+ DEF_MOD ("hscif0" , 514 , R8A779A0_CLK_S1D2 ),
172
+ DEF_MOD ("hscif1" , 515 , R8A779A0_CLK_S1D2 ),
173
+ DEF_MOD ("hscif2" , 516 , R8A779A0_CLK_S1D2 ),
174
+ DEF_MOD ("hscif3" , 517 , R8A779A0_CLK_S1D2 ),
175
+ DEF_MOD ("i2c0" , 518 , R8A779A0_CLK_S1D4 ),
176
+ DEF_MOD ("i2c1" , 519 , R8A779A0_CLK_S1D4 ),
177
+ DEF_MOD ("i2c2" , 520 , R8A779A0_CLK_S1D4 ),
178
+ DEF_MOD ("i2c3" , 521 , R8A779A0_CLK_S1D4 ),
179
+ DEF_MOD ("i2c4" , 522 , R8A779A0_CLK_S1D4 ),
180
+ DEF_MOD ("i2c5" , 523 , R8A779A0_CLK_S1D4 ),
181
+ DEF_MOD ("i2c6" , 524 , R8A779A0_CLK_S1D4 ),
182
+ DEF_MOD ("msi0" , 618 , R8A779A0_CLK_MSO ),
183
+ DEF_MOD ("msi1" , 619 , R8A779A0_CLK_MSO ),
184
+ DEF_MOD ("msi2" , 620 , R8A779A0_CLK_MSO ),
185
+ DEF_MOD ("msi3" , 621 , R8A779A0_CLK_MSO ),
186
+ DEF_MOD ("msi4" , 622 , R8A779A0_CLK_MSO ),
187
+ DEF_MOD ("msi5" , 623 , R8A779A0_CLK_MSO ),
155
188
DEF_MOD ("scif0" , 702 , R8A779A0_CLK_S1D8 ),
156
189
DEF_MOD ("scif1" , 703 , R8A779A0_CLK_S1D8 ),
157
190
DEF_MOD ("scif3" , 704 , R8A779A0_CLK_S1D8 ),
158
191
DEF_MOD ("scif4" , 705 , R8A779A0_CLK_S1D8 ),
192
+ DEF_MOD ("sdhi0" , 706 , R8A779A0_CLK_SD0 ),
193
+ DEF_MOD ("sydm1" , 709 , R8A779A0_CLK_S1D2 ),
194
+ DEF_MOD ("sydm2" , 710 , R8A779A0_CLK_S1D2 ),
159
195
DEF_MOD ("vin00" , 730 , R8A779A0_CLK_S1D1 ),
160
196
DEF_MOD ("vin01" , 731 , R8A779A0_CLK_S1D1 ),
161
197
DEF_MOD ("vin02" , 800 , R8A779A0_CLK_S1D1 ),
@@ -188,10 +224,19 @@ static const struct mssr_mod_clk r8a779a0_mod_clks[] __initconst = {
188
224
DEF_MOD ("vin35" , 827 , R8A779A0_CLK_S1D1 ),
189
225
DEF_MOD ("vin36" , 828 , R8A779A0_CLK_S1D1 ),
190
226
DEF_MOD ("vin37" , 829 , R8A779A0_CLK_S1D1 ),
227
+ DEF_MOD ("vspd0" , 830 , R8A779A0_CLK_S3D1 ),
228
+ DEF_MOD ("vspd1" , 831 , R8A779A0_CLK_S3D1 ),
229
+ DEF_MOD ("rwdt" , 907 , R8A779A0_CLK_R ),
230
+ DEF_MOD ("pfc0" , 915 , R8A779A0_CLK_CP ),
231
+ DEF_MOD ("pfc1" , 916 , R8A779A0_CLK_CP ),
232
+ DEF_MOD ("pfc2" , 917 , R8A779A0_CLK_CP ),
233
+ DEF_MOD ("pfc3" , 918 , R8A779A0_CLK_CP ),
234
+ DEF_MOD ("vspx0" , 1028 , R8A779A0_CLK_S1D1 ),
235
+ DEF_MOD ("vspx1" , 1029 , R8A779A0_CLK_S1D1 ),
236
+ DEF_MOD ("vspx2" , 1030 , R8A779A0_CLK_S1D1 ),
237
+ DEF_MOD ("vspx3" , 1031 , R8A779A0_CLK_S1D1 ),
191
238
};
192
239
193
- static spinlock_t cpg_lock ;
194
-
195
240
static const struct rcar_r8a779a0_cpg_pll_config * cpg_pll_config __initdata ;
196
241
static unsigned int cpg_clk_extalr __initdata ;
197
242
static u32 cpg_mode __initdata ;
@@ -230,6 +275,12 @@ static struct clk * __init rcar_r8a779a0_cpg_clk_register(struct device *dev,
230
275
div = cpg_pll_config -> pll5_div ;
231
276
break ;
232
277
278
+ case CLK_TYPE_R8A779A0_SD :
279
+ return cpg_sd_clk_register (core -> name , base , core -> offset ,
280
+ __clk_get_name (parent ), notifiers ,
281
+ false);
282
+ break ;
283
+
233
284
case CLK_TYPE_R8A779A0_MDSEL :
234
285
/*
235
286
* Clock selectable between two parents and two fixed dividers
@@ -261,6 +312,10 @@ static struct clk * __init rcar_r8a779a0_cpg_clk_register(struct device *dev,
261
312
__clk_get_name (parent ), 0 , mult , div );
262
313
}
263
314
315
+ static const unsigned int r8a779a0_crit_mod_clks [] __initconst = {
316
+ MOD_CLK_ID (907 ), /* RWDT */
317
+ };
318
+
264
319
/*
265
320
* CPG Clock Data
266
321
*/
@@ -311,6 +366,10 @@ const struct cpg_mssr_info r8a779a0_cpg_mssr_info __initconst = {
311
366
.num_mod_clks = ARRAY_SIZE (r8a779a0_mod_clks ),
312
367
.num_hw_mod_clks = 15 * 32 ,
313
368
369
+ /* Critical Module Clocks */
370
+ .crit_mod_clks = r8a779a0_crit_mod_clks ,
371
+ .num_crit_mod_clks = ARRAY_SIZE (r8a779a0_crit_mod_clks ),
372
+
314
373
/* Callbacks */
315
374
.init = r8a779a0_cpg_mssr_init ,
316
375
.cpg_clk_register = rcar_r8a779a0_cpg_clk_register ,
0 commit comments