Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clk: samsung: exynosautov920: add peric1, misc and hsi0/1 clock support

Register compatible and cmu_info data to support clocks.
CMU_PERIC1, this provides clocks for USI09 ~ USI17, USI_I2C and USI_I3C.
CMU_MISC, this provides clocks for MISC, GIC and OTP.
CMU_HSI0, this provides clocks for PCIE.
CMU_HSI1, this provides clocks for USB and MMC.

Signed-off-by: Sunyeal Hong <sunyeal.hong@samsung.com>
Link: https://lore.kernel.org/r/20241009042110.2379903-3-sunyeal.hong@samsung.com
Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>

authored by

Sunyeal Hong and committed by
Krzysztof Kozlowski
5e830d3c ac08b52a

+289
+289
drivers/clk/samsung/clk-exynosautov920.c
··· 19 19 /* NOTE: Must be equal to the last clock ID increased by one */ 20 20 #define CLKS_NR_TOP (DOUT_CLKCMU_TAA_NOC + 1) 21 21 #define CLKS_NR_PERIC0 (CLK_DOUT_PERIC0_I3C + 1) 22 + #define CLKS_NR_PERIC1 (CLK_DOUT_PERIC1_I3C + 1) 23 + #define CLKS_NR_MISC (CLK_DOUT_MISC_OSC_DIV2 + 1) 24 + #define CLKS_NR_HSI0 (CLK_DOUT_HSI0_PCIE_APB + 1) 25 + #define CLKS_NR_HSI1 (CLK_MOUT_HSI1_USBDRD + 1) 22 26 23 27 /* ---- CMU_TOP ------------------------------------------------------------ */ 24 28 ··· 978 974 "mout_shared5_pll", 1, 3, 0), 979 975 FFACTOR(DOUT_SHARED5_DIV4, "dout_shared5_div4", 980 976 "mout_shared5_pll", 1, 4, 0), 977 + FFACTOR(DOUT_TCXO_DIV2, "dout_tcxo_div2", 978 + "oscclk", 1, 2, 0), 981 979 }; 982 980 983 981 static const struct samsung_cmu_info top_cmu_info __initconst = { ··· 1145 1139 .clk_name = "noc", 1146 1140 }; 1147 1141 1142 + /* ---- CMU_PERIC1 --------------------------------------------------------- */ 1143 + 1144 + /* Register Offset definitions for CMU_PERIC1 (0x10C00000) */ 1145 + #define PLL_CON0_MUX_CLKCMU_PERIC1_IP_USER 0x600 1146 + #define PLL_CON0_MUX_CLKCMU_PERIC1_NOC_USER 0x610 1147 + #define CLK_CON_MUX_MUX_CLK_PERIC1_I3C 0x1000 1148 + #define CLK_CON_MUX_MUX_CLK_PERIC1_USI09_USI 0x1004 1149 + #define CLK_CON_MUX_MUX_CLK_PERIC1_USI10_USI 0x1008 1150 + #define CLK_CON_MUX_MUX_CLK_PERIC1_USI11_USI 0x100c 1151 + #define CLK_CON_MUX_MUX_CLK_PERIC1_USI12_USI 0x1010 1152 + #define CLK_CON_MUX_MUX_CLK_PERIC1_USI13_USI 0x1014 1153 + #define CLK_CON_MUX_MUX_CLK_PERIC1_USI14_USI 0x1018 1154 + #define CLK_CON_MUX_MUX_CLK_PERIC1_USI15_USI 0x101c 1155 + #define CLK_CON_MUX_MUX_CLK_PERIC1_USI16_USI 0x1020 1156 + #define CLK_CON_MUX_MUX_CLK_PERIC1_USI17_USI 0x1024 1157 + #define CLK_CON_MUX_MUX_CLK_PERIC1_USI_I2C 0x1028 1158 + #define CLK_CON_DIV_DIV_CLK_PERIC1_I3C 0x1800 1159 + #define CLK_CON_DIV_DIV_CLK_PERIC1_USI09_USI 0x1804 1160 + #define CLK_CON_DIV_DIV_CLK_PERIC1_USI10_USI 0x1808 1161 + #define CLK_CON_DIV_DIV_CLK_PERIC1_USI11_USI 0x180c 1162 + #define CLK_CON_DIV_DIV_CLK_PERIC1_USI12_USI 0x1810 1163 + #define CLK_CON_DIV_DIV_CLK_PERIC1_USI13_USI 0x1814 1164 + #define CLK_CON_DIV_DIV_CLK_PERIC1_USI14_USI 0x1818 1165 + #define CLK_CON_DIV_DIV_CLK_PERIC1_USI15_USI 0x181c 1166 + #define CLK_CON_DIV_DIV_CLK_PERIC1_USI16_USI 0x1820 1167 + #define CLK_CON_DIV_DIV_CLK_PERIC1_USI17_USI 0x1824 1168 + #define CLK_CON_DIV_DIV_CLK_PERIC1_USI_I2C 0x1828 1169 + 1170 + static const unsigned long peric1_clk_regs[] __initconst = { 1171 + PLL_CON0_MUX_CLKCMU_PERIC1_IP_USER, 1172 + PLL_CON0_MUX_CLKCMU_PERIC1_NOC_USER, 1173 + CLK_CON_MUX_MUX_CLK_PERIC1_I3C, 1174 + CLK_CON_MUX_MUX_CLK_PERIC1_USI09_USI, 1175 + CLK_CON_MUX_MUX_CLK_PERIC1_USI10_USI, 1176 + CLK_CON_MUX_MUX_CLK_PERIC1_USI11_USI, 1177 + CLK_CON_MUX_MUX_CLK_PERIC1_USI12_USI, 1178 + CLK_CON_MUX_MUX_CLK_PERIC1_USI13_USI, 1179 + CLK_CON_MUX_MUX_CLK_PERIC1_USI14_USI, 1180 + CLK_CON_MUX_MUX_CLK_PERIC1_USI15_USI, 1181 + CLK_CON_MUX_MUX_CLK_PERIC1_USI16_USI, 1182 + CLK_CON_MUX_MUX_CLK_PERIC1_USI17_USI, 1183 + CLK_CON_MUX_MUX_CLK_PERIC1_USI_I2C, 1184 + CLK_CON_DIV_DIV_CLK_PERIC1_I3C, 1185 + CLK_CON_DIV_DIV_CLK_PERIC1_USI09_USI, 1186 + CLK_CON_DIV_DIV_CLK_PERIC1_USI10_USI, 1187 + CLK_CON_DIV_DIV_CLK_PERIC1_USI11_USI, 1188 + CLK_CON_DIV_DIV_CLK_PERIC1_USI12_USI, 1189 + CLK_CON_DIV_DIV_CLK_PERIC1_USI13_USI, 1190 + CLK_CON_DIV_DIV_CLK_PERIC1_USI14_USI, 1191 + CLK_CON_DIV_DIV_CLK_PERIC1_USI15_USI, 1192 + CLK_CON_DIV_DIV_CLK_PERIC1_USI16_USI, 1193 + CLK_CON_DIV_DIV_CLK_PERIC1_USI17_USI, 1194 + CLK_CON_DIV_DIV_CLK_PERIC1_USI_I2C, 1195 + }; 1196 + 1197 + /* List of parent clocks for Muxes in CMU_PERIC1 */ 1198 + PNAME(mout_peric1_ip_user_p) = { "oscclk", "dout_clkcmu_peric1_ip" }; 1199 + PNAME(mout_peric1_noc_user_p) = { "oscclk", "dout_clkcmu_peric1_noc" }; 1200 + PNAME(mout_peric1_usi_p) = { "oscclk", "mout_peric1_ip_user" }; 1201 + 1202 + static const struct samsung_mux_clock peric1_mux_clks[] __initconst = { 1203 + MUX(CLK_MOUT_PERIC1_IP_USER, "mout_peric1_ip_user", 1204 + mout_peric1_ip_user_p, PLL_CON0_MUX_CLKCMU_PERIC1_IP_USER, 4, 1), 1205 + MUX(CLK_MOUT_PERIC1_NOC_USER, "mout_peric1_noc_user", 1206 + mout_peric1_noc_user_p, PLL_CON0_MUX_CLKCMU_PERIC1_NOC_USER, 4, 1), 1207 + /* USI09 ~ USI17 */ 1208 + MUX(CLK_MOUT_PERIC1_USI09_USI, "mout_peric1_usi09_usi", 1209 + mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI09_USI, 0, 1), 1210 + MUX(CLK_MOUT_PERIC1_USI10_USI, "mout_peric1_usi10_usi", 1211 + mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI10_USI, 0, 1), 1212 + MUX(CLK_MOUT_PERIC1_USI11_USI, "mout_peric1_usi11_usi", 1213 + mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI11_USI, 0, 1), 1214 + MUX(CLK_MOUT_PERIC1_USI12_USI, "mout_peric1_usi12_usi", 1215 + mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI12_USI, 0, 1), 1216 + MUX(CLK_MOUT_PERIC1_USI13_USI, "mout_peric1_usi13_usi", 1217 + mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI13_USI, 0, 1), 1218 + MUX(CLK_MOUT_PERIC1_USI14_USI, "mout_peric1_usi14_usi", 1219 + mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI14_USI, 0, 1), 1220 + MUX(CLK_MOUT_PERIC1_USI15_USI, "mout_peric1_usi15_usi", 1221 + mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI15_USI, 0, 1), 1222 + MUX(CLK_MOUT_PERIC1_USI16_USI, "mout_peric1_usi16_usi", 1223 + mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI16_USI, 0, 1), 1224 + MUX(CLK_MOUT_PERIC1_USI17_USI, "mout_peric1_usi17_usi", 1225 + mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI17_USI, 0, 1), 1226 + /* USI_I2C */ 1227 + MUX(CLK_MOUT_PERIC1_USI_I2C, "mout_peric1_usi_i2c", 1228 + mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_USI_I2C, 0, 1), 1229 + /* USI_I3C */ 1230 + MUX(CLK_MOUT_PERIC1_I3C, "mout_peric1_i3c", 1231 + mout_peric1_usi_p, CLK_CON_MUX_MUX_CLK_PERIC1_I3C, 0, 1), 1232 + }; 1233 + 1234 + static const struct samsung_div_clock peric1_div_clks[] __initconst = { 1235 + /* USI09 ~ USI17 */ 1236 + DIV(CLK_DOUT_PERIC1_USI09_USI, "dout_peric1_usi09_usi", 1237 + "mout_peric1_usi09_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI09_USI, 1238 + 0, 4), 1239 + DIV(CLK_DOUT_PERIC1_USI10_USI, "dout_peric1_usi10_usi", 1240 + "mout_peric1_usi10_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI10_USI, 1241 + 0, 4), 1242 + DIV(CLK_DOUT_PERIC1_USI11_USI, "dout_peric1_usi11_usi", 1243 + "mout_peric1_usi11_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI11_USI, 1244 + 0, 4), 1245 + DIV(CLK_DOUT_PERIC1_USI12_USI, "dout_peric1_usi12_usi", 1246 + "mout_peric1_usi12_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI12_USI, 1247 + 0, 4), 1248 + DIV(CLK_DOUT_PERIC1_USI13_USI, "dout_peric1_usi13_usi", 1249 + "mout_peric1_usi13_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI13_USI, 1250 + 0, 4), 1251 + DIV(CLK_DOUT_PERIC1_USI14_USI, "dout_peric1_usi14_usi", 1252 + "mout_peric1_usi14_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI14_USI, 1253 + 0, 4), 1254 + DIV(CLK_DOUT_PERIC1_USI15_USI, "dout_peric1_usi15_usi", 1255 + "mout_peric1_usi15_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI15_USI, 1256 + 0, 4), 1257 + DIV(CLK_DOUT_PERIC1_USI16_USI, "dout_peric1_usi16_usi", 1258 + "mout_peric1_usi16_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI16_USI, 1259 + 0, 4), 1260 + DIV(CLK_DOUT_PERIC1_USI17_USI, "dout_peric1_usi17_usi", 1261 + "mout_peric1_usi17_usi", CLK_CON_DIV_DIV_CLK_PERIC1_USI17_USI, 1262 + 0, 4), 1263 + /* USI_I2C */ 1264 + DIV(CLK_DOUT_PERIC1_USI_I2C, "dout_peric1_usi_i2c", 1265 + "mout_peric1_usi_i2c", CLK_CON_DIV_DIV_CLK_PERIC1_USI_I2C, 0, 4), 1266 + /* USI_I3C */ 1267 + DIV(CLK_DOUT_PERIC1_I3C, "dout_peric1_i3c", 1268 + "mout_peric1_i3c", CLK_CON_DIV_DIV_CLK_PERIC1_I3C, 0, 4), 1269 + }; 1270 + 1271 + static const struct samsung_cmu_info peric1_cmu_info __initconst = { 1272 + .mux_clks = peric1_mux_clks, 1273 + .nr_mux_clks = ARRAY_SIZE(peric1_mux_clks), 1274 + .div_clks = peric1_div_clks, 1275 + .nr_div_clks = ARRAY_SIZE(peric1_div_clks), 1276 + .nr_clk_ids = CLKS_NR_PERIC1, 1277 + .clk_regs = peric1_clk_regs, 1278 + .nr_clk_regs = ARRAY_SIZE(peric1_clk_regs), 1279 + .clk_name = "noc", 1280 + }; 1281 + 1282 + /* ---- CMU_MISC --------------------------------------------------------- */ 1283 + 1284 + /* Register Offset definitions for CMU_MISC (0x10020000) */ 1285 + #define PLL_CON0_MUX_CLKCMU_MISC_NOC_USER 0x600 1286 + #define CLK_CON_MUX_MUX_CLK_MISC_GIC 0x1000 1287 + #define CLK_CON_DIV_CLKCMU_OTP 0x1800 1288 + #define CLK_CON_DIV_DIV_CLK_MISC_NOCP 0x1804 1289 + #define CLK_CON_DIV_DIV_CLK_MISC_OSC_DIV2 0x1808 1290 + 1291 + static const unsigned long misc_clk_regs[] __initconst = { 1292 + PLL_CON0_MUX_CLKCMU_MISC_NOC_USER, 1293 + CLK_CON_MUX_MUX_CLK_MISC_GIC, 1294 + CLK_CON_DIV_CLKCMU_OTP, 1295 + CLK_CON_DIV_DIV_CLK_MISC_NOCP, 1296 + CLK_CON_DIV_DIV_CLK_MISC_OSC_DIV2, 1297 + }; 1298 + 1299 + /* List of parent clocks for Muxes in CMU_MISC */ 1300 + PNAME(mout_misc_noc_user_p) = { "oscclk", "dout_clkcmu_misc_noc" }; 1301 + PNAME(mout_misc_gic_p) = { "dout_misc_nocp", "oscclk" }; 1302 + 1303 + static const struct samsung_mux_clock misc_mux_clks[] __initconst = { 1304 + MUX(CLK_MOUT_MISC_NOC_USER, "mout_misc_noc_user", 1305 + mout_misc_noc_user_p, PLL_CON0_MUX_CLKCMU_MISC_NOC_USER, 4, 1), 1306 + MUX(CLK_MOUT_MISC_GIC, "mout_misc_gic", 1307 + mout_misc_gic_p, CLK_CON_MUX_MUX_CLK_MISC_GIC, 0, 1), 1308 + }; 1309 + 1310 + static const struct samsung_div_clock misc_div_clks[] __initconst = { 1311 + DIV(CLK_DOUT_MISC_NOCP, "dout_misc_nocp", 1312 + "mout_misc_noc_user", CLK_CON_DIV_DIV_CLK_MISC_NOCP, 1313 + 0, 3), 1314 + }; 1315 + 1316 + static const struct samsung_fixed_factor_clock misc_fixed_factor_clks[] __initconst = { 1317 + FFACTOR(CLK_DOUT_MISC_OTP, "dout_misc_otp", 1318 + "oscclk", 1, 10, 0), 1319 + FFACTOR(CLK_DOUT_MISC_OSC_DIV2, "dout_misc_osc_div2", 1320 + "oscclk", 1, 2, 0), 1321 + }; 1322 + 1323 + static const struct samsung_cmu_info misc_cmu_info __initconst = { 1324 + .mux_clks = misc_mux_clks, 1325 + .nr_mux_clks = ARRAY_SIZE(misc_mux_clks), 1326 + .div_clks = misc_div_clks, 1327 + .nr_div_clks = ARRAY_SIZE(misc_div_clks), 1328 + .fixed_factor_clks = misc_fixed_factor_clks, 1329 + .nr_fixed_factor_clks = ARRAY_SIZE(misc_fixed_factor_clks), 1330 + .nr_clk_ids = CLKS_NR_MISC, 1331 + .clk_regs = misc_clk_regs, 1332 + .nr_clk_regs = ARRAY_SIZE(misc_clk_regs), 1333 + .clk_name = "noc", 1334 + }; 1335 + 1336 + /* ---- CMU_HSI0 --------------------------------------------------------- */ 1337 + 1338 + /* Register Offset definitions for CMU_HSI0 (0x16000000) */ 1339 + #define PLL_CON0_MUX_CLKCMU_HSI0_NOC_USER 0x600 1340 + #define CLK_CON_DIV_DIV_CLK_HSI0_PCIE_APB 0x1800 1341 + 1342 + static const unsigned long hsi0_clk_regs[] __initconst = { 1343 + PLL_CON0_MUX_CLKCMU_HSI0_NOC_USER, 1344 + CLK_CON_DIV_DIV_CLK_HSI0_PCIE_APB, 1345 + }; 1346 + 1347 + /* List of parent clocks for Muxes in CMU_HSI0 */ 1348 + PNAME(mout_hsi0_noc_user_p) = { "oscclk", "dout_clkcmu_hsi0_noc" }; 1349 + 1350 + static const struct samsung_mux_clock hsi0_mux_clks[] __initconst = { 1351 + MUX(CLK_MOUT_HSI0_NOC_USER, "mout_hsi0_noc_user", 1352 + mout_hsi0_noc_user_p, PLL_CON0_MUX_CLKCMU_HSI0_NOC_USER, 4, 1), 1353 + }; 1354 + 1355 + static const struct samsung_div_clock hsi0_div_clks[] __initconst = { 1356 + DIV(CLK_DOUT_HSI0_PCIE_APB, "dout_hsi0_pcie_apb", 1357 + "mout_hsi0_noc_user", CLK_CON_DIV_DIV_CLK_HSI0_PCIE_APB, 1358 + 0, 4), 1359 + }; 1360 + 1361 + static const struct samsung_cmu_info hsi0_cmu_info __initconst = { 1362 + .mux_clks = hsi0_mux_clks, 1363 + .nr_mux_clks = ARRAY_SIZE(hsi0_mux_clks), 1364 + .div_clks = hsi0_div_clks, 1365 + .nr_div_clks = ARRAY_SIZE(hsi0_div_clks), 1366 + .nr_clk_ids = CLKS_NR_HSI0, 1367 + .clk_regs = hsi0_clk_regs, 1368 + .nr_clk_regs = ARRAY_SIZE(hsi0_clk_regs), 1369 + .clk_name = "noc", 1370 + }; 1371 + 1372 + /* ---- CMU_HSI1 --------------------------------------------------------- */ 1373 + 1374 + /* Register Offset definitions for CMU_HSI1 (0x16400000) */ 1375 + #define PLL_CON0_MUX_CLKCMU_HSI1_MMC_CARD_USER 0x600 1376 + #define PLL_CON0_MUX_CLKCMU_HSI1_NOC_USER 0x610 1377 + #define PLL_CON0_MUX_CLKCMU_HSI1_USBDRD_USER 0x620 1378 + #define CLK_CON_MUX_MUX_CLK_HSI1_USBDRD 0x1000 1379 + 1380 + static const unsigned long hsi1_clk_regs[] __initconst = { 1381 + PLL_CON0_MUX_CLKCMU_HSI1_MMC_CARD_USER, 1382 + PLL_CON0_MUX_CLKCMU_HSI1_NOC_USER, 1383 + PLL_CON0_MUX_CLKCMU_HSI1_USBDRD_USER, 1384 + CLK_CON_MUX_MUX_CLK_HSI1_USBDRD, 1385 + }; 1386 + 1387 + /* List of parent clocks for Muxes in CMU_HSI1 */ 1388 + PNAME(mout_hsi1_mmc_card_user_p) = {"oscclk", "dout_clkcmu_hsi1_mmc_card"}; 1389 + PNAME(mout_hsi1_noc_user_p) = { "oscclk", "dout_clkcmu_hsi1_noc" }; 1390 + PNAME(mout_hsi1_usbdrd_user_p) = { "oscclk", "mout_clkcmu_hsi1_usbdrd" }; 1391 + PNAME(mout_hsi1_usbdrd_p) = { "dout_tcxo_div2", "mout_hsi1_usbdrd_user" }; 1392 + 1393 + static const struct samsung_mux_clock hsi1_mux_clks[] __initconst = { 1394 + MUX(CLK_MOUT_HSI1_MMC_CARD_USER, "mout_hsi1_mmc_card_user", 1395 + mout_hsi1_mmc_card_user_p, PLL_CON0_MUX_CLKCMU_HSI1_MMC_CARD_USER, 4, 1), 1396 + MUX(CLK_MOUT_HSI1_NOC_USER, "mout_hsi1_noc_user", 1397 + mout_hsi1_noc_user_p, PLL_CON0_MUX_CLKCMU_HSI1_NOC_USER, 4, 1), 1398 + MUX(CLK_MOUT_HSI1_USBDRD_USER, "mout_hsi1_usbdrd_user", 1399 + mout_hsi1_usbdrd_user_p, PLL_CON0_MUX_CLKCMU_HSI1_USBDRD_USER, 4, 1), 1400 + MUX(CLK_MOUT_HSI1_USBDRD, "mout_hsi1_usbdrd", 1401 + mout_hsi1_usbdrd_p, CLK_CON_MUX_MUX_CLK_HSI1_USBDRD, 4, 1), 1402 + }; 1403 + 1404 + static const struct samsung_cmu_info hsi1_cmu_info __initconst = { 1405 + .mux_clks = hsi1_mux_clks, 1406 + .nr_mux_clks = ARRAY_SIZE(hsi1_mux_clks), 1407 + .nr_clk_ids = CLKS_NR_HSI1, 1408 + .clk_regs = hsi1_clk_regs, 1409 + .nr_clk_regs = ARRAY_SIZE(hsi1_clk_regs), 1410 + .clk_name = "noc", 1411 + }; 1412 + 1148 1413 static int __init exynosautov920_cmu_probe(struct platform_device *pdev) 1149 1414 { 1150 1415 const struct samsung_cmu_info *info; ··· 1431 1154 { 1432 1155 .compatible = "samsung,exynosautov920-cmu-peric0", 1433 1156 .data = &peric0_cmu_info, 1157 + }, { 1158 + .compatible = "samsung,exynosautov920-cmu-peric1", 1159 + .data = &peric1_cmu_info, 1160 + }, { 1161 + .compatible = "samsung,exynosautov920-cmu-misc", 1162 + .data = &misc_cmu_info, 1163 + }, { 1164 + .compatible = "samsung,exynosautov920-cmu-hsi0", 1165 + .data = &hsi0_cmu_info, 1166 + }, { 1167 + .compatible = "samsung,exynosautov920-cmu-hsi1", 1168 + .data = &hsi1_cmu_info, 1434 1169 }, 1435 1170 { } 1436 1171 };