36
36
#define CLK_CON_MUX_MUX_CLKCMU_CORE_MMC_EMBD 0x101c
37
37
#define CLK_CON_MUX_MUX_CLKCMU_CORE_SSS 0x1020
38
38
#define CLK_CON_MUX_MUX_CLKCMU_DPU 0x1034
39
+ #define CLK_CON_MUX_MUX_CLKCMU_G3D_SWITCH 0x1038
39
40
#define CLK_CON_MUX_MUX_CLKCMU_HSI_BUS 0x103c
40
41
#define CLK_CON_MUX_MUX_CLKCMU_HSI_MMC_CARD 0x1040
41
42
#define CLK_CON_MUX_MUX_CLKCMU_HSI_USB20DRD 0x1044
57
58
#define CLK_CON_DIV_CLKCMU_CORE_MMC_EMBD 0x1828
58
59
#define CLK_CON_DIV_CLKCMU_CORE_SSS 0x182c
59
60
#define CLK_CON_DIV_CLKCMU_DPU 0x1840
61
+ #define CLK_CON_DIV_CLKCMU_G3D_SWITCH 0x1844
60
62
#define CLK_CON_DIV_CLKCMU_HSI_BUS 0x1848
61
63
#define CLK_CON_DIV_CLKCMU_HSI_MMC_CARD 0x184c
62
64
#define CLK_CON_DIV_CLKCMU_HSI_USB20DRD 0x1850
84
86
#define CLK_CON_GAT_GATE_CLKCMU_CORE_MMC_EMBD 0x2024
85
87
#define CLK_CON_GAT_GATE_CLKCMU_CORE_SSS 0x2028
86
88
#define CLK_CON_GAT_GATE_CLKCMU_DPU 0x203c
89
+ #define CLK_CON_GAT_GATE_CLKCMU_G3D_SWITCH 0x2040
87
90
#define CLK_CON_GAT_GATE_CLKCMU_HSI_BUS 0x2044
88
91
#define CLK_CON_GAT_GATE_CLKCMU_HSI_MMC_CARD 0x2048
89
92
#define CLK_CON_GAT_GATE_CLKCMU_HSI_USB20DRD 0x204c
@@ -116,6 +119,7 @@ static const unsigned long top_clk_regs[] __initconst = {
116
119
CLK_CON_MUX_MUX_CLKCMU_CORE_MMC_EMBD ,
117
120
CLK_CON_MUX_MUX_CLKCMU_CORE_SSS ,
118
121
CLK_CON_MUX_MUX_CLKCMU_DPU ,
122
+ CLK_CON_MUX_MUX_CLKCMU_G3D_SWITCH ,
119
123
CLK_CON_MUX_MUX_CLKCMU_HSI_BUS ,
120
124
CLK_CON_MUX_MUX_CLKCMU_HSI_MMC_CARD ,
121
125
CLK_CON_MUX_MUX_CLKCMU_HSI_USB20DRD ,
@@ -137,6 +141,7 @@ static const unsigned long top_clk_regs[] __initconst = {
137
141
CLK_CON_DIV_CLKCMU_CORE_MMC_EMBD ,
138
142
CLK_CON_DIV_CLKCMU_CORE_SSS ,
139
143
CLK_CON_DIV_CLKCMU_DPU ,
144
+ CLK_CON_DIV_CLKCMU_G3D_SWITCH ,
140
145
CLK_CON_DIV_CLKCMU_HSI_BUS ,
141
146
CLK_CON_DIV_CLKCMU_HSI_MMC_CARD ,
142
147
CLK_CON_DIV_CLKCMU_HSI_USB20DRD ,
@@ -164,6 +169,7 @@ static const unsigned long top_clk_regs[] __initconst = {
164
169
CLK_CON_GAT_GATE_CLKCMU_CORE_MMC_EMBD ,
165
170
CLK_CON_GAT_GATE_CLKCMU_CORE_SSS ,
166
171
CLK_CON_GAT_GATE_CLKCMU_DPU ,
172
+ CLK_CON_GAT_GATE_CLKCMU_G3D_SWITCH ,
167
173
CLK_CON_GAT_GATE_CLKCMU_HSI_BUS ,
168
174
CLK_CON_GAT_GATE_CLKCMU_HSI_MMC_CARD ,
169
175
CLK_CON_GAT_GATE_CLKCMU_HSI_USB20DRD ,
@@ -216,6 +222,9 @@ PNAME(mout_core_mmc_embd_p) = { "oscclk", "dout_shared0_div2",
216
222
"oscclk" , "oscclk" };
217
223
PNAME (mout_core_sss_p ) = { "dout_shared0_div3" , "dout_shared1_div3" ,
218
224
"dout_shared0_div4" , "dout_shared1_div4" };
225
+ /* List of parent clocks for Muxes in CMU_TOP: for CMU_G3D */
226
+ PNAME (mout_g3d_switch_p ) = { "dout_shared0_div2" , "dout_shared1_div2" ,
227
+ "dout_shared0_div3" , "dout_shared1_div3" };
219
228
/* List of parent clocks for Muxes in CMU_TOP: for CMU_HSI */
220
229
PNAME (mout_hsi_bus_p ) = { "dout_shared0_div2" , "dout_shared1_div2" };
221
230
PNAME (mout_hsi_mmc_card_p ) = { "oscclk" , "dout_shared0_div2" ,
@@ -283,6 +292,10 @@ static const struct samsung_mux_clock top_mux_clks[] __initconst = {
283
292
MUX (CLK_MOUT_DPU , "mout_dpu" , mout_dpu_p ,
284
293
CLK_CON_MUX_MUX_CLKCMU_DPU , 0 , 2 ),
285
294
295
+ /* G3D */
296
+ MUX (CLK_MOUT_G3D_SWITCH , "mout_g3d_switch" , mout_g3d_switch_p ,
297
+ CLK_CON_MUX_MUX_CLKCMU_G3D_SWITCH , 0 , 2 ),
298
+
286
299
/* HSI */
287
300
MUX (CLK_MOUT_HSI_BUS , "mout_hsi_bus" , mout_hsi_bus_p ,
288
301
CLK_CON_MUX_MUX_CLKCMU_HSI_BUS , 0 , 1 ),
@@ -357,6 +370,10 @@ static const struct samsung_div_clock top_div_clks[] __initconst = {
357
370
DIV (CLK_DOUT_DPU , "dout_dpu" , "gout_dpu" ,
358
371
CLK_CON_DIV_CLKCMU_DPU , 0 , 4 ),
359
372
373
+ /* G3D */
374
+ DIV (CLK_DOUT_G3D_SWITCH , "dout_g3d_switch" , "gout_g3d_switch" ,
375
+ CLK_CON_DIV_CLKCMU_G3D_SWITCH , 0 , 3 ),
376
+
360
377
/* HSI */
361
378
DIV (CLK_DOUT_HSI_BUS , "dout_hsi_bus" , "gout_hsi_bus" ,
362
379
CLK_CON_DIV_CLKCMU_HSI_BUS , 0 , 4 ),
@@ -417,6 +434,10 @@ static const struct samsung_gate_clock top_gate_clks[] __initconst = {
417
434
GATE (CLK_GOUT_DPU , "gout_dpu" , "mout_dpu" ,
418
435
CLK_CON_GAT_GATE_CLKCMU_DPU , 21 , 0 , 0 ),
419
436
437
+ /* G3D */
438
+ GATE (CLK_GOUT_G3D_SWITCH , "gout_g3d_switch" , "mout_g3d_switch" ,
439
+ CLK_CON_GAT_GATE_CLKCMU_G3D_SWITCH , 21 , 0 , 0 ),
440
+
420
441
/* HSI */
421
442
GATE (CLK_GOUT_HSI_BUS , "gout_hsi_bus" , "mout_hsi_bus" ,
422
443
CLK_CON_GAT_GATE_CLKCMU_HSI_BUS , 21 , 0 , 0 ),
@@ -992,6 +1013,102 @@ static const struct samsung_cmu_info cmgp_cmu_info __initconst = {
992
1013
.clk_name = "gout_clkcmu_cmgp_bus" ,
993
1014
};
994
1015
1016
+ /* ---- CMU_G3D ------------------------------------------------------------- */
1017
+
1018
+ /* Register Offset definitions for CMU_G3D (0x11400000) */
1019
+ #define PLL_LOCKTIME_PLL_G3D 0x0000
1020
+ #define PLL_CON0_PLL_G3D 0x0100
1021
+ #define PLL_CON3_PLL_G3D 0x010c
1022
+ #define PLL_CON0_MUX_CLKCMU_G3D_SWITCH_USER 0x0600
1023
+ #define CLK_CON_MUX_MUX_CLK_G3D_BUSD 0x1000
1024
+ #define CLK_CON_DIV_DIV_CLK_G3D_BUSP 0x1804
1025
+ #define CLK_CON_GAT_CLK_G3D_CMU_G3D_PCLK 0x2000
1026
+ #define CLK_CON_GAT_CLK_G3D_GPU_CLK 0x2004
1027
+ #define CLK_CON_GAT_GOUT_G3D_TZPC_PCLK 0x200c
1028
+ #define CLK_CON_GAT_GOUT_G3D_GRAY2BIN_CLK 0x2010
1029
+ #define CLK_CON_GAT_GOUT_G3D_BUSD_CLK 0x2024
1030
+ #define CLK_CON_GAT_GOUT_G3D_BUSP_CLK 0x2028
1031
+ #define CLK_CON_GAT_GOUT_G3D_SYSREG_PCLK 0x202c
1032
+
1033
+ static const unsigned long g3d_clk_regs [] __initconst = {
1034
+ PLL_LOCKTIME_PLL_G3D ,
1035
+ PLL_CON0_PLL_G3D ,
1036
+ PLL_CON3_PLL_G3D ,
1037
+ PLL_CON0_MUX_CLKCMU_G3D_SWITCH_USER ,
1038
+ CLK_CON_MUX_MUX_CLK_G3D_BUSD ,
1039
+ CLK_CON_DIV_DIV_CLK_G3D_BUSP ,
1040
+ CLK_CON_GAT_CLK_G3D_CMU_G3D_PCLK ,
1041
+ CLK_CON_GAT_CLK_G3D_GPU_CLK ,
1042
+ CLK_CON_GAT_GOUT_G3D_TZPC_PCLK ,
1043
+ CLK_CON_GAT_GOUT_G3D_GRAY2BIN_CLK ,
1044
+ CLK_CON_GAT_GOUT_G3D_BUSD_CLK ,
1045
+ CLK_CON_GAT_GOUT_G3D_BUSP_CLK ,
1046
+ CLK_CON_GAT_GOUT_G3D_SYSREG_PCLK ,
1047
+ };
1048
+
1049
+ /* List of parent clocks for Muxes in CMU_G3D */
1050
+ PNAME (mout_g3d_pll_p ) = { "oscclk" , "fout_g3d_pll" };
1051
+ PNAME (mout_g3d_switch_user_p ) = { "oscclk" , "dout_g3d_switch" };
1052
+ PNAME (mout_g3d_busd_p ) = { "mout_g3d_pll" , "mout_g3d_switch_user" };
1053
+
1054
+ /*
1055
+ * Do not provide PLL table to PLL_G3D, as MANUAL_PLL_CTRL bit is not set
1056
+ * for that PLL by default, so set_rate operation would fail.
1057
+ */
1058
+ static const struct samsung_pll_clock g3d_pll_clks [] __initconst = {
1059
+ PLL (pll_0818x , CLK_FOUT_G3D_PLL , "fout_g3d_pll" , "oscclk" ,
1060
+ PLL_LOCKTIME_PLL_G3D , PLL_CON3_PLL_G3D , NULL ),
1061
+ };
1062
+
1063
+ static const struct samsung_mux_clock g3d_mux_clks [] __initconst = {
1064
+ MUX (CLK_MOUT_G3D_PLL , "mout_g3d_pll" , mout_g3d_pll_p ,
1065
+ PLL_CON0_PLL_G3D , 4 , 1 ),
1066
+ MUX (CLK_MOUT_G3D_SWITCH_USER , "mout_g3d_switch_user" ,
1067
+ mout_g3d_switch_user_p ,
1068
+ PLL_CON0_MUX_CLKCMU_G3D_SWITCH_USER , 4 , 1 ),
1069
+ MUX (CLK_MOUT_G3D_BUSD , "mout_g3d_busd" , mout_g3d_busd_p ,
1070
+ CLK_CON_MUX_MUX_CLK_G3D_BUSD , 0 , 1 ),
1071
+ };
1072
+
1073
+ static const struct samsung_div_clock g3d_div_clks [] __initconst = {
1074
+ DIV (CLK_DOUT_G3D_BUSP , "dout_g3d_busp" , "mout_g3d_busd" ,
1075
+ CLK_CON_DIV_DIV_CLK_G3D_BUSP , 0 , 3 ),
1076
+ };
1077
+
1078
+ static const struct samsung_gate_clock g3d_gate_clks [] __initconst = {
1079
+ GATE (CLK_GOUT_G3D_CMU_G3D_PCLK , "gout_g3d_cmu_g3d_pclk" ,
1080
+ "dout_g3d_busp" ,
1081
+ CLK_CON_GAT_CLK_G3D_CMU_G3D_PCLK , 21 , CLK_IGNORE_UNUSED , 0 ),
1082
+ GATE (CLK_GOUT_G3D_GPU_CLK , "gout_g3d_gpu_clk" , "mout_g3d_busd" ,
1083
+ CLK_CON_GAT_CLK_G3D_GPU_CLK , 21 , 0 , 0 ),
1084
+ GATE (CLK_GOUT_G3D_TZPC_PCLK , "gout_g3d_tzpc_pclk" , "dout_g3d_busp" ,
1085
+ CLK_CON_GAT_GOUT_G3D_TZPC_PCLK , 21 , 0 , 0 ),
1086
+ GATE (CLK_GOUT_G3D_GRAY2BIN_CLK , "gout_g3d_gray2bin_clk" ,
1087
+ "mout_g3d_busd" ,
1088
+ CLK_CON_GAT_GOUT_G3D_GRAY2BIN_CLK , 21 , 0 , 0 ),
1089
+ GATE (CLK_GOUT_G3D_BUSD_CLK , "gout_g3d_busd_clk" , "mout_g3d_busd" ,
1090
+ CLK_CON_GAT_GOUT_G3D_BUSD_CLK , 21 , 0 , 0 ),
1091
+ GATE (CLK_GOUT_G3D_BUSP_CLK , "gout_g3d_busp_clk" , "dout_g3d_busp" ,
1092
+ CLK_CON_GAT_GOUT_G3D_BUSP_CLK , 21 , 0 , 0 ),
1093
+ GATE (CLK_GOUT_G3D_SYSREG_PCLK , "gout_g3d_sysreg_pclk" , "dout_g3d_busp" ,
1094
+ CLK_CON_GAT_GOUT_G3D_SYSREG_PCLK , 21 , 0 , 0 ),
1095
+ };
1096
+
1097
+ static const struct samsung_cmu_info g3d_cmu_info __initconst = {
1098
+ .pll_clks = g3d_pll_clks ,
1099
+ .nr_pll_clks = ARRAY_SIZE (g3d_pll_clks ),
1100
+ .mux_clks = g3d_mux_clks ,
1101
+ .nr_mux_clks = ARRAY_SIZE (g3d_mux_clks ),
1102
+ .div_clks = g3d_div_clks ,
1103
+ .nr_div_clks = ARRAY_SIZE (g3d_div_clks ),
1104
+ .gate_clks = g3d_gate_clks ,
1105
+ .nr_gate_clks = ARRAY_SIZE (g3d_gate_clks ),
1106
+ .nr_clk_ids = G3D_NR_CLK ,
1107
+ .clk_regs = g3d_clk_regs ,
1108
+ .nr_clk_regs = ARRAY_SIZE (g3d_clk_regs ),
1109
+ .clk_name = "dout_g3d_switch" ,
1110
+ };
1111
+
995
1112
/* ---- CMU_HSI ------------------------------------------------------------- */
996
1113
997
1114
/* Register Offset definitions for CMU_HSI (0x13400000) */
@@ -1700,6 +1817,9 @@ static const struct of_device_id exynos850_cmu_of_match[] = {
1700
1817
}, {
1701
1818
.compatible = "samsung,exynos850-cmu-cmgp" ,
1702
1819
.data = & cmgp_cmu_info ,
1820
+ }, {
1821
+ .compatible = "samsung,exynos850-cmu-g3d" ,
1822
+ .data = & g3d_cmu_info ,
1703
1823
}, {
1704
1824
.compatible = "samsung,exynos850-cmu-hsi" ,
1705
1825
.data = & hsi_cmu_info ,
0 commit comments