43
43
#define CLK_CON_MUX_MUX_CLKCMU_IS_GDC 0x104c
44
44
#define CLK_CON_MUX_MUX_CLKCMU_IS_ITP 0x1050
45
45
#define CLK_CON_MUX_MUX_CLKCMU_IS_VRA 0x1054
46
+ #define CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_JPEG 0x1058
47
+ #define CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_M2M 0x105c
48
+ #define CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_MCSC 0x1060
49
+ #define CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_MFC 0x1064
46
50
#define CLK_CON_MUX_MUX_CLKCMU_PERI_BUS 0x1070
47
51
#define CLK_CON_MUX_MUX_CLKCMU_PERI_IP 0x1074
48
52
#define CLK_CON_MUX_MUX_CLKCMU_PERI_UART 0x1078
60
64
#define CLK_CON_DIV_CLKCMU_IS_GDC 0x1858
61
65
#define CLK_CON_DIV_CLKCMU_IS_ITP 0x185c
62
66
#define CLK_CON_DIV_CLKCMU_IS_VRA 0x1860
67
+ #define CLK_CON_DIV_CLKCMU_MFCMSCL_JPEG 0x1864
68
+ #define CLK_CON_DIV_CLKCMU_MFCMSCL_M2M 0x1868
69
+ #define CLK_CON_DIV_CLKCMU_MFCMSCL_MCSC 0x186c
70
+ #define CLK_CON_DIV_CLKCMU_MFCMSCL_MFC 0x1870
63
71
#define CLK_CON_DIV_CLKCMU_PERI_BUS 0x187c
64
72
#define CLK_CON_DIV_CLKCMU_PERI_IP 0x1880
65
73
#define CLK_CON_DIV_CLKCMU_PERI_UART 0x1884
83
91
#define CLK_CON_GAT_GATE_CLKCMU_IS_GDC 0x2054
84
92
#define CLK_CON_GAT_GATE_CLKCMU_IS_ITP 0x2058
85
93
#define CLK_CON_GAT_GATE_CLKCMU_IS_VRA 0x205c
94
+ #define CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_JPEG 0x2060
95
+ #define CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_M2M 0x2064
96
+ #define CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_MCSC 0x2068
97
+ #define CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_MFC 0x206c
86
98
#define CLK_CON_GAT_GATE_CLKCMU_PERI_BUS 0x2080
87
99
#define CLK_CON_GAT_GATE_CLKCMU_PERI_IP 0x2084
88
100
#define CLK_CON_GAT_GATE_CLKCMU_PERI_UART 0x2088
@@ -111,6 +123,10 @@ static const unsigned long top_clk_regs[] __initconst = {
111
123
CLK_CON_MUX_MUX_CLKCMU_IS_GDC ,
112
124
CLK_CON_MUX_MUX_CLKCMU_IS_ITP ,
113
125
CLK_CON_MUX_MUX_CLKCMU_IS_VRA ,
126
+ CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_JPEG ,
127
+ CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_M2M ,
128
+ CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_MCSC ,
129
+ CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_MFC ,
114
130
CLK_CON_MUX_MUX_CLKCMU_PERI_BUS ,
115
131
CLK_CON_MUX_MUX_CLKCMU_PERI_IP ,
116
132
CLK_CON_MUX_MUX_CLKCMU_PERI_UART ,
@@ -128,6 +144,10 @@ static const unsigned long top_clk_regs[] __initconst = {
128
144
CLK_CON_DIV_CLKCMU_IS_GDC ,
129
145
CLK_CON_DIV_CLKCMU_IS_ITP ,
130
146
CLK_CON_DIV_CLKCMU_IS_VRA ,
147
+ CLK_CON_DIV_CLKCMU_MFCMSCL_JPEG ,
148
+ CLK_CON_DIV_CLKCMU_MFCMSCL_M2M ,
149
+ CLK_CON_DIV_CLKCMU_MFCMSCL_MCSC ,
150
+ CLK_CON_DIV_CLKCMU_MFCMSCL_MFC ,
131
151
CLK_CON_DIV_CLKCMU_PERI_BUS ,
132
152
CLK_CON_DIV_CLKCMU_PERI_IP ,
133
153
CLK_CON_DIV_CLKCMU_PERI_UART ,
@@ -151,6 +171,10 @@ static const unsigned long top_clk_regs[] __initconst = {
151
171
CLK_CON_GAT_GATE_CLKCMU_IS_GDC ,
152
172
CLK_CON_GAT_GATE_CLKCMU_IS_ITP ,
153
173
CLK_CON_GAT_GATE_CLKCMU_IS_VRA ,
174
+ CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_JPEG ,
175
+ CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_M2M ,
176
+ CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_MCSC ,
177
+ CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_MFC ,
154
178
CLK_CON_GAT_GATE_CLKCMU_PERI_BUS ,
155
179
CLK_CON_GAT_GATE_CLKCMU_PERI_IP ,
156
180
CLK_CON_GAT_GATE_CLKCMU_PERI_UART ,
@@ -209,6 +233,15 @@ PNAME(mout_is_vra_p) = { "dout_shared0_div2", "dout_shared1_div2",
209
233
"dout_shared0_div3" , "dout_shared1_div3" };
210
234
PNAME (mout_is_gdc_p ) = { "dout_shared0_div2" , "dout_shared1_div2" ,
211
235
"dout_shared0_div3" , "dout_shared1_div3" };
236
+ /* List of parent clocks for Muxes in CMU_TOP: for CMU_MFCMSCL */
237
+ PNAME (mout_mfcmscl_mfc_p ) = { "dout_shared1_div2" , "dout_shared0_div3" ,
238
+ "dout_shared1_div3" , "dout_shared0_div4" };
239
+ PNAME (mout_mfcmscl_m2m_p ) = { "dout_shared1_div2" , "dout_shared0_div3" ,
240
+ "dout_shared1_div3" , "dout_shared0_div4" };
241
+ PNAME (mout_mfcmscl_mcsc_p ) = { "dout_shared1_div2" , "dout_shared0_div3" ,
242
+ "dout_shared1_div3" , "dout_shared0_div4" };
243
+ PNAME (mout_mfcmscl_jpeg_p ) = { "dout_shared0_div3" , "dout_shared1_div3" ,
244
+ "dout_shared0_div4" , "dout_shared1_div4" };
212
245
/* List of parent clocks for Muxes in CMU_TOP: for CMU_PERI */
213
246
PNAME (mout_peri_bus_p ) = { "dout_shared0_div4" , "dout_shared1_div4" };
214
247
PNAME (mout_peri_uart_p ) = { "oscclk" , "dout_shared0_div4" ,
@@ -268,6 +301,16 @@ static const struct samsung_mux_clock top_mux_clks[] __initconst = {
268
301
MUX (CLK_MOUT_IS_GDC , "mout_is_gdc" , mout_is_gdc_p ,
269
302
CLK_CON_MUX_MUX_CLKCMU_IS_GDC , 0 , 2 ),
270
303
304
+ /* MFCMSCL */
305
+ MUX (CLK_MOUT_MFCMSCL_MFC , "mout_mfcmscl_mfc" , mout_mfcmscl_mfc_p ,
306
+ CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_MFC , 0 , 2 ),
307
+ MUX (CLK_MOUT_MFCMSCL_M2M , "mout_mfcmscl_m2m" , mout_mfcmscl_m2m_p ,
308
+ CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_M2M , 0 , 2 ),
309
+ MUX (CLK_MOUT_MFCMSCL_MCSC , "mout_mfcmscl_mcsc" , mout_mfcmscl_mcsc_p ,
310
+ CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_MCSC , 0 , 2 ),
311
+ MUX (CLK_MOUT_MFCMSCL_JPEG , "mout_mfcmscl_jpeg" , mout_mfcmscl_jpeg_p ,
312
+ CLK_CON_MUX_MUX_CLKCMU_MFCMSCL_JPEG , 0 , 2 ),
313
+
271
314
/* PERI */
272
315
MUX (CLK_MOUT_PERI_BUS , "mout_peri_bus" , mout_peri_bus_p ,
273
316
CLK_CON_MUX_MUX_CLKCMU_PERI_BUS , 0 , 1 ),
@@ -332,6 +375,16 @@ static const struct samsung_div_clock top_div_clks[] __initconst = {
332
375
DIV (CLK_DOUT_IS_GDC , "dout_is_gdc" , "gout_is_gdc" ,
333
376
CLK_CON_DIV_CLKCMU_IS_GDC , 0 , 4 ),
334
377
378
+ /* MFCMSCL */
379
+ DIV (CLK_DOUT_MFCMSCL_MFC , "dout_mfcmscl_mfc" , "gout_mfcmscl_mfc" ,
380
+ CLK_CON_DIV_CLKCMU_MFCMSCL_MFC , 0 , 4 ),
381
+ DIV (CLK_DOUT_MFCMSCL_M2M , "dout_mfcmscl_m2m" , "gout_mfcmscl_m2m" ,
382
+ CLK_CON_DIV_CLKCMU_MFCMSCL_M2M , 0 , 4 ),
383
+ DIV (CLK_DOUT_MFCMSCL_MCSC , "dout_mfcmscl_mcsc" , "gout_mfcmscl_mcsc" ,
384
+ CLK_CON_DIV_CLKCMU_MFCMSCL_MCSC , 0 , 4 ),
385
+ DIV (CLK_DOUT_MFCMSCL_JPEG , "dout_mfcmscl_jpeg" , "gout_mfcmscl_jpeg" ,
386
+ CLK_CON_DIV_CLKCMU_MFCMSCL_JPEG , 0 , 4 ),
387
+
335
388
/* PERI */
336
389
DIV (CLK_DOUT_PERI_BUS , "dout_peri_bus" , "gout_peri_bus" ,
337
390
CLK_CON_DIV_CLKCMU_PERI_BUS , 0 , 4 ),
@@ -383,6 +436,17 @@ static const struct samsung_gate_clock top_gate_clks[] __initconst = {
383
436
GATE (CLK_GOUT_IS_GDC , "gout_is_gdc" , "mout_is_gdc" ,
384
437
CLK_CON_GAT_GATE_CLKCMU_IS_GDC , 21 , CLK_IS_CRITICAL , 0 ),
385
438
439
+ /* MFCMSCL */
440
+ /* TODO: These have to be always enabled to access CMU_MFCMSCL regs */
441
+ GATE (CLK_GOUT_MFCMSCL_MFC , "gout_mfcmscl_mfc" , "mout_mfcmscl_mfc" ,
442
+ CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_MFC , 21 , CLK_IS_CRITICAL , 0 ),
443
+ GATE (CLK_GOUT_MFCMSCL_M2M , "gout_mfcmscl_m2m" , "mout_mfcmscl_m2m" ,
444
+ CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_M2M , 21 , CLK_IS_CRITICAL , 0 ),
445
+ GATE (CLK_GOUT_MFCMSCL_MCSC , "gout_mfcmscl_mcsc" , "mout_mfcmscl_mcsc" ,
446
+ CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_MCSC , 21 , CLK_IS_CRITICAL , 0 ),
447
+ GATE (CLK_GOUT_MFCMSCL_JPEG , "gout_mfcmscl_jpeg" , "mout_mfcmscl_jpeg" ,
448
+ CLK_CON_GAT_GATE_CLKCMU_MFCMSCL_JPEG , 21 , CLK_IS_CRITICAL , 0 ),
449
+
386
450
/* PERI */
387
451
GATE (CLK_GOUT_PERI_BUS , "gout_peri_bus" , "mout_peri_bus" ,
388
452
CLK_CON_GAT_GATE_CLKCMU_PERI_BUS , 21 , 0 , 0 ),
@@ -1148,6 +1212,115 @@ static const struct samsung_cmu_info is_cmu_info __initconst = {
1148
1212
.clk_name = "dout_is_bus" ,
1149
1213
};
1150
1214
1215
+ /* ---- CMU_MFCMSCL --------------------------------------------------------- */
1216
+
1217
+ #define PLL_CON0_MUX_CLKCMU_MFCMSCL_JPEG_USER 0x0600
1218
+ #define PLL_CON0_MUX_CLKCMU_MFCMSCL_M2M_USER 0x0610
1219
+ #define PLL_CON0_MUX_CLKCMU_MFCMSCL_MCSC_USER 0x0620
1220
+ #define PLL_CON0_MUX_CLKCMU_MFCMSCL_MFC_USER 0x0630
1221
+ #define CLK_CON_DIV_DIV_CLK_MFCMSCL_BUSP 0x1800
1222
+ #define CLK_CON_GAT_CLK_MFCMSCL_CMU_MFCMSCL_PCLK 0x2000
1223
+ #define CLK_CON_GAT_GOUT_MFCMSCL_TZPC_PCLK 0x2038
1224
+ #define CLK_CON_GAT_GOUT_MFCMSCL_JPEG_ACLK 0x203c
1225
+ #define CLK_CON_GAT_GOUT_MFCMSCL_M2M_ACLK 0x2048
1226
+ #define CLK_CON_GAT_GOUT_MFCMSCL_MCSC_I_CLK 0x204c
1227
+ #define CLK_CON_GAT_GOUT_MFCMSCL_MFC_ACLK 0x2050
1228
+ #define CLK_CON_GAT_GOUT_MFCMSCL_PPMU_ACLK 0x2054
1229
+ #define CLK_CON_GAT_GOUT_MFCMSCL_PPMU_PCLK 0x2058
1230
+ #define CLK_CON_GAT_GOUT_MFCMSCL_SYSMMU_CLK_S1 0x2074
1231
+ #define CLK_CON_GAT_GOUT_MFCMSCL_SYSREG_PCLK 0x2078
1232
+
1233
+ static const unsigned long mfcmscl_clk_regs [] __initconst = {
1234
+ PLL_CON0_MUX_CLKCMU_MFCMSCL_JPEG_USER ,
1235
+ PLL_CON0_MUX_CLKCMU_MFCMSCL_M2M_USER ,
1236
+ PLL_CON0_MUX_CLKCMU_MFCMSCL_MCSC_USER ,
1237
+ PLL_CON0_MUX_CLKCMU_MFCMSCL_MFC_USER ,
1238
+ CLK_CON_DIV_DIV_CLK_MFCMSCL_BUSP ,
1239
+ CLK_CON_GAT_CLK_MFCMSCL_CMU_MFCMSCL_PCLK ,
1240
+ CLK_CON_GAT_GOUT_MFCMSCL_TZPC_PCLK ,
1241
+ CLK_CON_GAT_GOUT_MFCMSCL_JPEG_ACLK ,
1242
+ CLK_CON_GAT_GOUT_MFCMSCL_M2M_ACLK ,
1243
+ CLK_CON_GAT_GOUT_MFCMSCL_MCSC_I_CLK ,
1244
+ CLK_CON_GAT_GOUT_MFCMSCL_MFC_ACLK ,
1245
+ CLK_CON_GAT_GOUT_MFCMSCL_PPMU_ACLK ,
1246
+ CLK_CON_GAT_GOUT_MFCMSCL_PPMU_PCLK ,
1247
+ CLK_CON_GAT_GOUT_MFCMSCL_SYSMMU_CLK_S1 ,
1248
+ CLK_CON_GAT_GOUT_MFCMSCL_SYSREG_PCLK ,
1249
+ };
1250
+
1251
+ /* List of parent clocks for Muxes in CMU_MFCMSCL */
1252
+ PNAME (mout_mfcmscl_mfc_user_p ) = { "oscclk" , "dout_mfcmscl_mfc" };
1253
+ PNAME (mout_mfcmscl_m2m_user_p ) = { "oscclk" , "dout_mfcmscl_m2m" };
1254
+ PNAME (mout_mfcmscl_mcsc_user_p ) = { "oscclk" , "dout_mfcmscl_mcsc" };
1255
+ PNAME (mout_mfcmscl_jpeg_user_p ) = { "oscclk" , "dout_mfcmscl_jpeg" };
1256
+
1257
+ static const struct samsung_mux_clock mfcmscl_mux_clks [] __initconst = {
1258
+ MUX (CLK_MOUT_MFCMSCL_MFC_USER , "mout_mfcmscl_mfc_user" ,
1259
+ mout_mfcmscl_mfc_user_p ,
1260
+ PLL_CON0_MUX_CLKCMU_MFCMSCL_MFC_USER , 4 , 1 ),
1261
+ MUX (CLK_MOUT_MFCMSCL_M2M_USER , "mout_mfcmscl_m2m_user" ,
1262
+ mout_mfcmscl_m2m_user_p ,
1263
+ PLL_CON0_MUX_CLKCMU_MFCMSCL_M2M_USER , 4 , 1 ),
1264
+ MUX (CLK_MOUT_MFCMSCL_MCSC_USER , "mout_mfcmscl_mcsc_user" ,
1265
+ mout_mfcmscl_mcsc_user_p ,
1266
+ PLL_CON0_MUX_CLKCMU_MFCMSCL_MCSC_USER , 4 , 1 ),
1267
+ MUX (CLK_MOUT_MFCMSCL_JPEG_USER , "mout_mfcmscl_jpeg_user" ,
1268
+ mout_mfcmscl_jpeg_user_p ,
1269
+ PLL_CON0_MUX_CLKCMU_MFCMSCL_JPEG_USER , 4 , 1 ),
1270
+ };
1271
+
1272
+ static const struct samsung_div_clock mfcmscl_div_clks [] __initconst = {
1273
+ DIV (CLK_DOUT_MFCMSCL_BUSP , "dout_mfcmscl_busp" , "mout_mfcmscl_mfc_user" ,
1274
+ CLK_CON_DIV_DIV_CLK_MFCMSCL_BUSP , 0 , 3 ),
1275
+ };
1276
+
1277
+ static const struct samsung_gate_clock mfcmscl_gate_clks [] __initconst = {
1278
+ /* TODO: Should be enabled in MFC driver */
1279
+ GATE (CLK_GOUT_MFCMSCL_CMU_MFCMSCL_PCLK , "gout_mfcmscl_cmu_mfcmscl_pclk" ,
1280
+ "dout_mfcmscl_busp" , CLK_CON_GAT_CLK_MFCMSCL_CMU_MFCMSCL_PCLK ,
1281
+ 21 , CLK_IGNORE_UNUSED , 0 ),
1282
+ GATE (CLK_GOUT_MFCMSCL_TZPC_PCLK , "gout_mfcmscl_tzpc_pclk" ,
1283
+ "dout_mfcmscl_busp" , CLK_CON_GAT_GOUT_MFCMSCL_TZPC_PCLK ,
1284
+ 21 , 0 , 0 ),
1285
+ GATE (CLK_GOUT_MFCMSCL_JPEG_ACLK , "gout_mfcmscl_jpeg_aclk" ,
1286
+ "mout_mfcmscl_jpeg_user" , CLK_CON_GAT_GOUT_MFCMSCL_JPEG_ACLK ,
1287
+ 21 , 0 , 0 ),
1288
+ GATE (CLK_GOUT_MFCMSCL_M2M_ACLK , "gout_mfcmscl_m2m_aclk" ,
1289
+ "mout_mfcmscl_m2m_user" , CLK_CON_GAT_GOUT_MFCMSCL_M2M_ACLK ,
1290
+ 21 , 0 , 0 ),
1291
+ GATE (CLK_GOUT_MFCMSCL_MCSC_CLK , "gout_mfcmscl_mcsc_clk" ,
1292
+ "mout_mfcmscl_mcsc_user" , CLK_CON_GAT_GOUT_MFCMSCL_MCSC_I_CLK ,
1293
+ 21 , 0 , 0 ),
1294
+ GATE (CLK_GOUT_MFCMSCL_MFC_ACLK , "gout_mfcmscl_mfc_aclk" ,
1295
+ "mout_mfcmscl_mfc_user" , CLK_CON_GAT_GOUT_MFCMSCL_MFC_ACLK ,
1296
+ 21 , 0 , 0 ),
1297
+ GATE (CLK_GOUT_MFCMSCL_PPMU_ACLK , "gout_mfcmscl_ppmu_aclk" ,
1298
+ "mout_mfcmscl_mfc_user" , CLK_CON_GAT_GOUT_MFCMSCL_PPMU_ACLK ,
1299
+ 21 , 0 , 0 ),
1300
+ GATE (CLK_GOUT_MFCMSCL_PPMU_PCLK , "gout_mfcmscl_ppmu_pclk" ,
1301
+ "dout_mfcmscl_busp" , CLK_CON_GAT_GOUT_MFCMSCL_PPMU_PCLK ,
1302
+ 21 , 0 , 0 ),
1303
+ GATE (CLK_GOUT_MFCMSCL_SYSMMU_CLK , "gout_mfcmscl_sysmmu_clk" ,
1304
+ "mout_mfcmscl_mfc_user" , CLK_CON_GAT_GOUT_MFCMSCL_SYSMMU_CLK_S1 ,
1305
+ 21 , 0 , 0 ),
1306
+ GATE (CLK_GOUT_MFCMSCL_SYSREG_PCLK , "gout_mfcmscl_sysreg_pclk" ,
1307
+ "dout_mfcmscl_busp" , CLK_CON_GAT_GOUT_MFCMSCL_SYSREG_PCLK ,
1308
+ 21 , 0 , 0 ),
1309
+ };
1310
+
1311
+ static const struct samsung_cmu_info mfcmscl_cmu_info __initconst = {
1312
+ .mux_clks = mfcmscl_mux_clks ,
1313
+ .nr_mux_clks = ARRAY_SIZE (mfcmscl_mux_clks ),
1314
+ .div_clks = mfcmscl_div_clks ,
1315
+ .nr_div_clks = ARRAY_SIZE (mfcmscl_div_clks ),
1316
+ .gate_clks = mfcmscl_gate_clks ,
1317
+ .nr_gate_clks = ARRAY_SIZE (mfcmscl_gate_clks ),
1318
+ .nr_clk_ids = MFCMSCL_NR_CLK ,
1319
+ .clk_regs = mfcmscl_clk_regs ,
1320
+ .nr_clk_regs = ARRAY_SIZE (mfcmscl_clk_regs ),
1321
+ .clk_name = "dout_mfcmscl_mfc" ,
1322
+ };
1323
+
1151
1324
/* ---- CMU_PERI ------------------------------------------------------------ */
1152
1325
1153
1326
/* Register Offset definitions for CMU_PERI (0x10030000) */
@@ -1533,6 +1706,9 @@ static const struct of_device_id exynos850_cmu_of_match[] = {
1533
1706
}, {
1534
1707
.compatible = "samsung,exynos850-cmu-is" ,
1535
1708
.data = & is_cmu_info ,
1709
+ }, {
1710
+ .compatible = "samsung,exynos850-cmu-mfcmscl" ,
1711
+ .data = & mfcmscl_cmu_info ,
1536
1712
}, {
1537
1713
.compatible = "samsung,exynos850-cmu-core" ,
1538
1714
.data = & core_cmu_info ,
0 commit comments