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

clk: qcom: gcc: Add support for Global Clock controller found on MSM8937

Modify existing MSM8917 driver to support MSM8937 SoC. Override frequencies
which are different in this chip. Register all the clocks to the framework
for the clients to be able to request for them. Add new variant of GDSC for
new chip.

Signed-off-by: Daniil Titov <daniilt971@gmail.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Barnabás Czémán <barnabas.czeman@mainlining.org>
Link: https://lore.kernel.org/r/20250903-msm8937-v9-2-a097c91c5801@mainlining.org
Signed-off-by: Bjorn Andersson <andersson@kernel.org>

authored by

Daniil Titov and committed by
Bjorn Andersson
6be1f55f 154691e7

+616 -7
+3 -3
drivers/clk/qcom/Kconfig
··· 359 359 SD/eMMC, display, graphics, camera etc. 360 360 361 361 config MSM_GCC_8917 362 - tristate "MSM8917/QM215 Global Clock Controller" 362 + tristate "MSM89(17/37)/QM215 Global Clock Controller" 363 363 depends on ARM64 || COMPILE_TEST 364 364 select QCOM_GDSC 365 365 help 366 - Support for the global clock controller on msm8917 and qm215 367 - devices. 366 + Support for the global clock controller on msm8917, msm8937 367 + and qm215 devices. 368 368 Say Y if you want to use devices such as UART, SPI i2c, USB, 369 369 SD/eMMC, display, graphics, camera etc. 370 370
+613 -4
drivers/clk/qcom/gcc-msm8917.c
··· 37 37 DT_SLEEP_CLK, 38 38 DT_DSI0PLL, 39 39 DT_DSI0PLL_BYTE, 40 + DT_DSI1PLL, 41 + DT_DSI1PLL_BYTE, 40 42 }; 41 43 42 44 enum { ··· 50 48 P_GPLL6, 51 49 P_DSI0PLL, 52 50 P_DSI0PLL_BYTE, 51 + P_DSI1PLL, 52 + P_DSI1PLL_BYTE, 53 53 }; 54 54 55 55 static struct clk_alpha_pll gpll0_sleep_clk_src = { ··· 106 102 { 700000000, 1400000000, 0 }, 107 103 }; 108 104 109 - static const struct alpha_pll_config gpll3_early_config = { 105 + static const struct pll_vco gpll3_p_vco_msm8937[] = { 106 + { 525000000, 1066000000, 0 }, 107 + }; 108 + 109 + static struct alpha_pll_config gpll3_early_config = { 110 110 .l = 63, 111 111 .config_ctl_val = 0x4001055b, 112 112 .early_output_mask = 0, ··· 281 273 { } 282 274 }; 283 275 276 + static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = { 277 + .cmd_rcgr = 0x0200c, 278 + .hid_width = 5, 279 + .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 280 + .parent_map = gcc_xo_gpll0_map, 281 + .clkr.hw.init = &(struct clk_init_data){ 282 + .name = "blsp1_qup1_i2c_apps_clk_src", 283 + .parent_data = gcc_xo_gpll0_data, 284 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), 285 + .ops = &clk_rcg2_ops, 286 + }, 287 + }; 288 + 284 289 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = { 285 290 .cmd_rcgr = 0x03000, 286 291 .hid_width = 5, ··· 372 351 } 373 352 }; 374 353 354 + static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = { 355 + .cmd_rcgr = 0x18000, 356 + .hid_width = 5, 357 + .freq_tbl = ftbl_blsp_i2c_apps_clk_src, 358 + .parent_map = gcc_xo_gpll0_map, 359 + .clkr.hw.init = &(struct clk_init_data){ 360 + .name = "blsp2_qup4_i2c_apps_clk_src", 361 + .parent_data = gcc_xo_gpll0_data, 362 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), 363 + .ops = &clk_rcg2_ops, 364 + }, 365 + }; 366 + 375 367 static const struct freq_tbl ftbl_blsp_spi_apps_clk_src[] = { 376 368 F(960000, P_XO, 10, 1, 2), 377 369 F(4800000, P_XO, 4, 0, 0), ··· 394 360 F(25000000, P_GPLL0, 16, 1, 2), 395 361 F(50000000, P_GPLL0, 16, 0, 0), 396 362 { } 363 + }; 364 + 365 + static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = { 366 + .cmd_rcgr = 0x02024, 367 + .mnd_width = 8, 368 + .hid_width = 5, 369 + .freq_tbl = ftbl_blsp_spi_apps_clk_src, 370 + .parent_map = gcc_xo_gpll0_map, 371 + .clkr.hw.init = &(struct clk_init_data){ 372 + .name = "blsp1_qup1_spi_apps_clk_src", 373 + .parent_data = gcc_xo_gpll0_data, 374 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), 375 + .ops = &clk_rcg2_ops, 376 + }, 397 377 }; 398 378 399 379 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = { ··· 494 446 } 495 447 }; 496 448 449 + static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = { 450 + .cmd_rcgr = 0x18024, 451 + .mnd_width = 8, 452 + .hid_width = 5, 453 + .freq_tbl = ftbl_blsp_spi_apps_clk_src, 454 + .parent_map = gcc_xo_gpll0_map, 455 + .clkr.hw.init = &(struct clk_init_data){ 456 + .name = "blsp2_qup4_spi_apps_clk_src", 457 + .parent_data = gcc_xo_gpll0_data, 458 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), 459 + .ops = &clk_rcg2_ops, 460 + }, 461 + }; 462 + 497 463 static const struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = { 498 464 F(3686400, P_GPLL0, 1, 72, 15625), 499 465 F(7372800, P_GPLL0, 1, 144, 15625), ··· 587 525 static const struct parent_map gcc_byte0_map[] = { 588 526 { P_XO, 0 }, 589 527 { P_DSI0PLL_BYTE, 1 }, 528 + { P_DSI1PLL_BYTE, 3 }, 529 + }; 530 + 531 + static const struct parent_map gcc_byte1_map[] = { 532 + { P_XO, 0 }, 533 + { P_DSI0PLL_BYTE, 3 }, 534 + { P_DSI1PLL_BYTE, 1 }, 590 535 }; 591 536 592 537 static const struct clk_parent_data gcc_byte_data[] = { 593 538 { .index = DT_XO }, 594 539 { .index = DT_DSI0PLL_BYTE }, 540 + { .index = DT_DSI1PLL_BYTE }, 595 541 }; 596 542 597 543 static struct clk_rcg2 byte0_clk_src = { ··· 613 543 .ops = &clk_byte2_ops, 614 544 .flags = CLK_SET_RATE_PARENT, 615 545 } 546 + }; 547 + 548 + static struct clk_rcg2 byte1_clk_src = { 549 + .cmd_rcgr = 0x4d0b0, 550 + .hid_width = 5, 551 + .parent_map = gcc_byte1_map, 552 + .clkr.hw.init = &(struct clk_init_data){ 553 + .name = "byte1_clk_src", 554 + .parent_data = gcc_byte_data, 555 + .num_parents = ARRAY_SIZE(gcc_byte_data), 556 + .ops = &clk_byte2_ops, 557 + .flags = CLK_SET_RATE_PARENT, 558 + }, 616 559 }; 617 560 618 561 static const struct freq_tbl ftbl_camss_gp_clk_src[] = { ··· 725 642 { } 726 643 }; 727 644 645 + static const struct freq_tbl ftbl_cpp_clk_src_msm8937[] = { 646 + F(133330000, P_GPLL0, 6, 0, 0), 647 + F(160000000, P_GPLL0, 5, 0, 0), 648 + F(200000000, P_GPLL0, 5, 0, 0), 649 + F(266666667, P_GPLL0, 3, 0, 0), 650 + F(308570000, P_GPLL6, 3.5, 0, 0), 651 + F(320000000, P_GPLL0, 2.5, 0, 0), 652 + F(360000000, P_GPLL6, 3, 0, 0), 653 + { } 654 + }; 655 + 728 656 static struct clk_rcg2 cpp_clk_src = { 729 657 .cmd_rcgr = 0x58018, 730 658 .hid_width = 5, ··· 747 653 .num_parents = ARRAY_SIZE(gcc_cpp_data), 748 654 .ops = &clk_rcg2_ops, 749 655 } 656 + }; 657 + 658 + static struct clk_init_data vcodec0_clk_src_init_msm8937 = { 659 + .name = "vcodec0_clk_src", 660 + .parent_data = gcc_cpp_data, 661 + .num_parents = ARRAY_SIZE(gcc_cpp_data), 662 + .ops = &clk_rcg2_ops, 750 663 }; 751 664 752 665 static const struct freq_tbl ftbl_crypto_clk_src[] = { ··· 831 730 { } 832 731 }; 833 732 733 + static const struct freq_tbl ftbl_csi_phytimer_clk_src_msm8937[] = { 734 + F(100000000, P_GPLL0, 8, 0, 0), 735 + F(160000000, P_GPLL0, 5, 0, 0), 736 + F(200000000, P_GPLL0, 4, 0, 0), 737 + { } 738 + }; 739 + 834 740 static struct clk_rcg2 csi0phytimer_clk_src = { 835 741 .cmd_rcgr = 0x4e000, 836 742 .hid_width = 5, ··· 882 774 } 883 775 }; 884 776 777 + static struct clk_rcg2 esc1_clk_src = { 778 + .cmd_rcgr = 0x4d0a8, 779 + .hid_width = 5, 780 + .freq_tbl = ftbl_esc0_1_clk_src, 781 + .parent_map = gcc_xo_gpll0_out_aux_map, 782 + .clkr.hw.init = &(struct clk_init_data){ 783 + .name = "esc1_clk_src", 784 + .parent_data = gcc_xo_gpll0_data, 785 + .num_parents = ARRAY_SIZE(gcc_xo_gpll0_data), 786 + .ops = &clk_rcg2_ops, 787 + }, 788 + }; 789 + 885 790 static const struct parent_map gcc_gfx3d_map[] = { 886 791 { P_XO, 0 }, 887 792 { P_GPLL0, 1 }, ··· 935 814 F(523200000, P_GPLL3, 1, 0, 0), 936 815 F(550000000, P_GPLL3, 1, 0, 0), 937 816 F(598000000, P_GPLL3, 1, 0, 0), 817 + { } 818 + }; 819 + 820 + static const struct freq_tbl ftbl_gfx3d_clk_src_msm8937[] = { 821 + F(19200000, P_XO, 1, 0, 0), 822 + F(50000000, P_GPLL0, 16, 0, 0), 823 + F(80000000, P_GPLL0, 10, 0, 0), 824 + F(100000000, P_GPLL0, 8, 0, 0), 825 + F(160000000, P_GPLL0, 5, 0, 0), 826 + F(200000000, P_GPLL0, 4, 0, 0), 827 + F(216000000, P_GPLL6, 5, 0, 0), 828 + F(228570000, P_GPLL0, 3.5, 0, 0), 829 + F(240000000, P_GPLL6, 4.5, 0, 0), 830 + F(266670000, P_GPLL0, 3, 0, 0), 831 + F(300000000, P_GPLL3, 1, 0, 0), 832 + F(320000000, P_GPLL0, 2.5, 0, 0), 833 + F(375000000, P_GPLL3, 1, 0, 0), 834 + F(400000000, P_GPLL0, 2, 0, 0), 835 + F(450000000, P_GPLL3, 1, 0, 0), 938 836 { } 939 837 }; 940 838 ··· 1113 973 } 1114 974 }; 1115 975 1116 - static const struct parent_map gcc_pclk_map[] = { 976 + static const struct parent_map gcc_pclk0_map[] = { 1117 977 { P_XO, 0 }, 1118 978 { P_DSI0PLL, 1 }, 979 + { P_DSI1PLL, 3 }, 980 + }; 981 + 982 + static const struct parent_map gcc_pclk1_map[] = { 983 + { P_XO, 0 }, 984 + { P_DSI0PLL, 3 }, 985 + { P_DSI1PLL, 1 }, 1119 986 }; 1120 987 1121 988 static const struct clk_parent_data gcc_pclk_data[] = { 1122 989 { .index = DT_XO }, 1123 990 { .index = DT_DSI0PLL }, 991 + { .index = DT_DSI1PLL }, 1124 992 }; 1125 993 1126 994 static struct clk_rcg2 pclk0_clk_src = { 1127 995 .cmd_rcgr = 0x4d000, 1128 996 .hid_width = 5, 1129 997 .mnd_width = 8, 1130 - .parent_map = gcc_pclk_map, 998 + .parent_map = gcc_pclk0_map, 1131 999 .clkr.hw.init = &(struct clk_init_data) { 1132 1000 .name = "pclk0_clk_src", 1133 1001 .parent_data = gcc_pclk_data, ··· 1143 995 .ops = &clk_pixel_ops, 1144 996 .flags = CLK_SET_RATE_PARENT, 1145 997 } 998 + }; 999 + 1000 + static struct clk_rcg2 pclk1_clk_src = { 1001 + .cmd_rcgr = 0x4d0b8, 1002 + .hid_width = 5, 1003 + .mnd_width = 8, 1004 + .parent_map = gcc_pclk1_map, 1005 + .clkr.hw.init = &(struct clk_init_data){ 1006 + .name = "pclk1_clk_src", 1007 + .parent_data = gcc_pclk_data, 1008 + .num_parents = ARRAY_SIZE(gcc_pclk_data), 1009 + .ops = &clk_pixel_ops, 1010 + .flags = CLK_SET_RATE_PARENT, 1011 + }, 1146 1012 }; 1147 1013 1148 1014 static const struct freq_tbl ftbl_pdm2_clk_src[] = { ··· 1270 1108 { } 1271 1109 }; 1272 1110 1111 + static const struct freq_tbl ftbl_usb_hs_system_clk_src_msm8937[] = { 1112 + F(57142857, P_GPLL0, 14, 0, 0), 1113 + F(100000000, P_GPLL0, 8, 0, 0), 1114 + F(133333333, P_GPLL0, 6, 0, 0), 1115 + F(177777778, P_GPLL0, 4.5, 0, 0), 1116 + { } 1117 + }; 1118 + 1273 1119 static struct clk_rcg2 usb_hs_system_clk_src = { 1274 1120 .cmd_rcgr = 0x41010, 1275 1121 .hid_width = 5, ··· 1298 1128 F(266670000, P_GPLL0, 3, 0, 0), 1299 1129 F(308570000, P_GPLL6, 3.5, 0, 0), 1300 1130 F(329140000, P_GPLL4, 3.5, 0, 0), 1131 + F(360000000, P_GPLL6, 3, 0, 0), 1132 + { } 1133 + }; 1134 + 1135 + static const struct freq_tbl ftbl_vcodec0_clk_src_msm8937[] = { 1136 + F(166150000, P_GPLL6, 6.5, 0, 0), 1137 + F(240000000, P_GPLL6, 4.5, 0, 0), 1138 + F(308571428, P_GPLL6, 3.5, 0, 0), 1139 + F(320000000, P_GPLL0, 2.5, 0, 0), 1301 1140 F(360000000, P_GPLL6, 3, 0, 0), 1302 1141 { } 1303 1142 }; ··· 1336 1157 F(320000000, P_GPLL0, 2.5, 0, 0), 1337 1158 F(329140000, P_GPLL4, 3.5, 0, 0), 1338 1159 F(360000000, P_GPLL6, 3, 0, 0), 1160 + { } 1161 + }; 1162 + 1163 + static const struct freq_tbl ftbl_vfe_clk_src_msm8937[] = { 1164 + F(50000000, P_GPLL0, 16, 0, 0), 1165 + F(80000000, P_GPLL0, 10, 0, 0), 1166 + F(100000000, P_GPLL0, 8, 0, 0), 1167 + F(133333333, P_GPLL0, 6, 0, 0), 1168 + F(160000000, P_GPLL0, 5, 0, 0), 1169 + F(177777778, P_GPLL0, 4.5, 0, 0), 1170 + F(200000000, P_GPLL0, 4, 0, 0), 1171 + F(266666667, P_GPLL0, 3, 0, 0), 1172 + F(308571428, P_GPLL6, 3.5, 0, 0), 1173 + F(320000000, P_GPLL0, 2.5, 0, 0), 1174 + F(360000000, P_GPLL6, 3, 0, 0), 1175 + F(400000000, P_GPLL0, 2, 0, 0), 1176 + F(432000000, P_GPLL6, 2.5, 0, 0), 1339 1177 { } 1340 1178 }; 1341 1179 ··· 1465 1269 } 1466 1270 }; 1467 1271 1272 + static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = { 1273 + .halt_reg = 0x02008, 1274 + .halt_check = BRANCH_HALT, 1275 + .clkr = { 1276 + .enable_reg = 0x02008, 1277 + .enable_mask = BIT(0), 1278 + .hw.init = &(struct clk_init_data){ 1279 + .name = "gcc_blsp1_qup1_i2c_apps_clk", 1280 + .parent_hws = (const struct clk_hw*[]){ 1281 + &blsp1_qup1_i2c_apps_clk_src.clkr.hw, 1282 + }, 1283 + .num_parents = 1, 1284 + .ops = &clk_branch2_ops, 1285 + .flags = CLK_SET_RATE_PARENT, 1286 + }, 1287 + }, 1288 + }; 1289 + 1468 1290 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = { 1469 1291 .halt_reg = 0x03010, 1470 1292 .halt_check = BRANCH_HALT, ··· 1591 1377 } 1592 1378 }; 1593 1379 1380 + static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = { 1381 + .halt_reg = 0x18020, 1382 + .halt_check = BRANCH_HALT, 1383 + .clkr = { 1384 + .enable_reg = 0x18020, 1385 + .enable_mask = BIT(0), 1386 + .hw.init = &(struct clk_init_data){ 1387 + .name = "gcc_blsp2_qup4_i2c_apps_clk", 1388 + .parent_hws = (const struct clk_hw*[]){ 1389 + &blsp2_qup4_i2c_apps_clk_src.clkr.hw, 1390 + }, 1391 + .num_parents = 1, 1392 + .ops = &clk_branch2_ops, 1393 + .flags = CLK_SET_RATE_PARENT, 1394 + }, 1395 + }, 1396 + }; 1397 + 1398 + static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = { 1399 + .halt_reg = 0x02004, 1400 + .halt_check = BRANCH_HALT, 1401 + .clkr = { 1402 + .enable_reg = 0x02004, 1403 + .enable_mask = BIT(0), 1404 + .hw.init = &(struct clk_init_data){ 1405 + .name = "gcc_blsp1_qup1_spi_apps_clk", 1406 + .parent_hws = (const struct clk_hw*[]){ 1407 + &blsp1_qup1_spi_apps_clk_src.clkr.hw, 1408 + }, 1409 + .num_parents = 1, 1410 + .ops = &clk_branch2_ops, 1411 + .flags = CLK_SET_RATE_PARENT, 1412 + }, 1413 + }, 1414 + }; 1415 + 1594 1416 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = { 1595 1417 .halt_reg = 0x0300c, 1596 1418 .halt_check = BRANCH_HALT, ··· 1733 1483 .flags = CLK_SET_RATE_PARENT, 1734 1484 } 1735 1485 } 1486 + }; 1487 + 1488 + static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = { 1489 + .halt_reg = 0x1801c, 1490 + .halt_check = BRANCH_HALT, 1491 + .clkr = { 1492 + .enable_reg = 0x1801c, 1493 + .enable_mask = BIT(0), 1494 + .hw.init = &(struct clk_init_data){ 1495 + .name = "gcc_blsp2_qup4_spi_apps_clk", 1496 + .parent_hws = (const struct clk_hw*[]){ 1497 + &blsp2_qup4_spi_apps_clk_src.clkr.hw, 1498 + }, 1499 + .num_parents = 1, 1500 + .ops = &clk_branch2_ops, 1501 + .flags = CLK_SET_RATE_PARENT, 1502 + }, 1503 + }, 1736 1504 }; 1737 1505 1738 1506 static struct clk_branch gcc_blsp1_uart1_apps_clk = { ··· 2789 2521 } 2790 2522 }; 2791 2523 2524 + static struct clk_branch gcc_mdss_byte1_clk = { 2525 + .halt_reg = 0x4d0a0, 2526 + .halt_check = BRANCH_HALT, 2527 + .clkr = { 2528 + .enable_reg = 0x4d0a0, 2529 + .enable_mask = BIT(0), 2530 + .hw.init = &(struct clk_init_data){ 2531 + .name = "gcc_mdss_byte1_clk", 2532 + .parent_hws = (const struct clk_hw*[]){ 2533 + &byte1_clk_src.clkr.hw, 2534 + }, 2535 + .num_parents = 1, 2536 + .ops = &clk_branch2_ops, 2537 + .flags = CLK_SET_RATE_PARENT, 2538 + }, 2539 + }, 2540 + }; 2541 + 2792 2542 static struct clk_branch gcc_mdss_esc0_clk = { 2793 2543 .halt_reg = 0x4d098, 2794 2544 .halt_check = BRANCH_HALT, ··· 2823 2537 .flags = CLK_SET_RATE_PARENT, 2824 2538 } 2825 2539 } 2540 + }; 2541 + 2542 + static struct clk_branch gcc_mdss_esc1_clk = { 2543 + .halt_reg = 0x4d09c, 2544 + .halt_check = BRANCH_HALT, 2545 + .clkr = { 2546 + .enable_reg = 0x4d09c, 2547 + .enable_mask = BIT(0), 2548 + .hw.init = &(struct clk_init_data){ 2549 + .name = "gcc_mdss_esc1_clk", 2550 + .parent_hws = (const struct clk_hw*[]){ 2551 + &esc1_clk_src.clkr.hw, 2552 + }, 2553 + .num_parents = 1, 2554 + .ops = &clk_branch2_ops, 2555 + .flags = CLK_SET_RATE_PARENT, 2556 + }, 2557 + }, 2826 2558 }; 2827 2559 2828 2560 static struct clk_branch gcc_mdss_mdp_clk = { ··· 2877 2573 .flags = CLK_SET_RATE_PARENT, 2878 2574 } 2879 2575 } 2576 + }; 2577 + 2578 + static struct clk_branch gcc_mdss_pclk1_clk = { 2579 + .halt_reg = 0x4d0a4, 2580 + .halt_check = BRANCH_HALT, 2581 + .clkr = { 2582 + .enable_reg = 0x4d0a4, 2583 + .enable_mask = BIT(0), 2584 + .hw.init = &(struct clk_init_data){ 2585 + .name = "gcc_mdss_pclk1_clk", 2586 + .parent_hws = (const struct clk_hw*[]){ 2587 + &pclk1_clk_src.clkr.hw, 2588 + }, 2589 + .num_parents = 1, 2590 + .ops = &clk_branch2_ops, 2591 + .flags = CLK_SET_RATE_PARENT, 2592 + }, 2593 + }, 2880 2594 }; 2881 2595 2882 2596 static struct clk_branch gcc_mdss_vsync_clk = { ··· 2954 2632 } 2955 2633 }; 2956 2634 2635 + static struct clk_branch gcc_oxili_aon_clk = { 2636 + .halt_reg = 0x5904c, 2637 + .halt_check = BRANCH_HALT, 2638 + .clkr = { 2639 + .enable_reg = 0x5904c, 2640 + .enable_mask = BIT(0), 2641 + .hw.init = &(struct clk_init_data){ 2642 + .name = "gcc_oxili_aon_clk", 2643 + .parent_hws = (const struct clk_hw*[]){ 2644 + &gfx3d_clk_src.clkr.hw, 2645 + }, 2646 + .num_parents = 1, 2647 + .ops = &clk_branch2_ops, 2648 + .flags = CLK_SET_RATE_PARENT, 2649 + }, 2650 + }, 2651 + }; 2652 + 2957 2653 static struct clk_branch gcc_oxili_gfx3d_clk = { 2958 2654 .halt_reg = 0x59020, 2959 2655 .halt_check = BRANCH_HALT, ··· 2988 2648 .flags = CLK_SET_RATE_PARENT, 2989 2649 } 2990 2650 } 2651 + }; 2652 + 2653 + static struct clk_branch gcc_oxili_timer_clk = { 2654 + .halt_reg = 0x59040, 2655 + .halt_check = BRANCH_HALT, 2656 + .clkr = { 2657 + .enable_reg = 0x59040, 2658 + .enable_mask = BIT(0), 2659 + .hw.init = &(struct clk_init_data){ 2660 + .name = "gcc_oxili_timer_clk", 2661 + .ops = &clk_branch2_ops, 2662 + }, 2663 + }, 2991 2664 }; 2992 2665 2993 2666 static struct clk_branch gcc_pdm2_clk = { ··· 3380 3027 .flags = CLAMP_IO, 3381 3028 }; 3382 3029 3030 + static struct gdsc oxili_gx_gdsc_msm8937 = { 3031 + .gdscr = 0x5901c, 3032 + .clamp_io_ctrl = 0x5b00c, 3033 + .cxcs = (unsigned int []){ 0x59000 }, 3034 + .cxc_count = 1, 3035 + .pd = { 3036 + .name = "oxili_gx_gdsc", 3037 + }, 3038 + .pwrsts = PWRSTS_OFF_ON, 3039 + .flags = CLAMP_IO, 3040 + }; 3041 + 3042 + static struct gdsc oxili_cx_gdsc = { 3043 + .gdscr = 0x59044, 3044 + .cxcs = (unsigned int []){ 0x59020 }, 3045 + .cxc_count = 1, 3046 + .pd = { 3047 + .name = "oxili_cx_gdsc", 3048 + }, 3049 + .pwrsts = PWRSTS_OFF_ON, 3050 + }; 3051 + 3383 3052 static struct gdsc cpp_gdsc = { 3384 3053 .gdscr = 0x58078, 3385 3054 .cxcs = (unsigned int []){ 0x5803c, 0x58064 }, ··· 3582 3207 [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr, 3583 3208 }; 3584 3209 3210 + static struct clk_regmap *gcc_msm8937_clocks[] = { 3211 + [GPLL0] = &gpll0.clkr, 3212 + [GPLL0_EARLY] = &gpll0_early.clkr, 3213 + [GPLL0_SLEEP_CLK_SRC] = &gpll0_sleep_clk_src.clkr, 3214 + [GPLL3] = &gpll3.clkr, 3215 + [GPLL3_EARLY] = &gpll3_early.clkr, 3216 + [GPLL4] = &gpll4.clkr, 3217 + [GPLL4_EARLY] = &gpll4_early.clkr, 3218 + [GPLL6] = &gpll6, 3219 + [GPLL6_EARLY] = &gpll6_early.clkr, 3220 + [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr, 3221 + [MSM8937_BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr, 3222 + [MSM8937_BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr, 3223 + [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr, 3224 + [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr, 3225 + [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr, 3226 + [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr, 3227 + [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr, 3228 + [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr, 3229 + [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr, 3230 + [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr, 3231 + [BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr, 3232 + [BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr, 3233 + [BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr, 3234 + [BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr, 3235 + [BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr, 3236 + [BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr, 3237 + [MSM8937_BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr, 3238 + [MSM8937_BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr, 3239 + [BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr, 3240 + [BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr, 3241 + [BYTE0_CLK_SRC] = &byte0_clk_src.clkr, 3242 + [MSM8937_BYTE1_CLK_SRC] = &byte1_clk_src.clkr, 3243 + [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr, 3244 + [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr, 3245 + [CAMSS_TOP_AHB_CLK_SRC] = &camss_top_ahb_clk_src.clkr, 3246 + [CCI_CLK_SRC] = &cci_clk_src.clkr, 3247 + [CPP_CLK_SRC] = &cpp_clk_src.clkr, 3248 + [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr, 3249 + [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr, 3250 + [CSI0_CLK_SRC] = &csi0_clk_src.clkr, 3251 + [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr, 3252 + [CSI1_CLK_SRC] = &csi1_clk_src.clkr, 3253 + [CSI2_CLK_SRC] = &csi2_clk_src.clkr, 3254 + [ESC0_CLK_SRC] = &esc0_clk_src.clkr, 3255 + [MSM8937_ESC1_CLK_SRC] = &esc1_clk_src.clkr, 3256 + [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr, 3257 + [GP1_CLK_SRC] = &gp1_clk_src.clkr, 3258 + [GP2_CLK_SRC] = &gp2_clk_src.clkr, 3259 + [GP3_CLK_SRC] = &gp3_clk_src.clkr, 3260 + [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr, 3261 + [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr, 3262 + [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr, 3263 + [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr, 3264 + [MDP_CLK_SRC] = &mdp_clk_src.clkr, 3265 + [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr, 3266 + [MSM8937_PCLK1_CLK_SRC] = &pclk1_clk_src.clkr, 3267 + [PDM2_CLK_SRC] = &pdm2_clk_src.clkr, 3268 + [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr, 3269 + [SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr, 3270 + [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr, 3271 + [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr, 3272 + [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr, 3273 + [VFE0_CLK_SRC] = &vfe0_clk_src.clkr, 3274 + [VFE1_CLK_SRC] = &vfe1_clk_src.clkr, 3275 + [VSYNC_CLK_SRC] = &vsync_clk_src.clkr, 3276 + [GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr, 3277 + [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr, 3278 + [GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr, 3279 + [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr, 3280 + [MSM8937_GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr, 3281 + [MSM8937_GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr, 3282 + [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr, 3283 + [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr, 3284 + [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr, 3285 + [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr, 3286 + [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr, 3287 + [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr, 3288 + [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr, 3289 + [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr, 3290 + [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr, 3291 + [GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr, 3292 + [GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr, 3293 + [GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr, 3294 + [GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr, 3295 + [GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr, 3296 + [GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr, 3297 + [MSM8937_GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr, 3298 + [MSM8937_GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr, 3299 + [GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr, 3300 + [GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr, 3301 + [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr, 3302 + [GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr, 3303 + [GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr, 3304 + [GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr, 3305 + [GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr, 3306 + [GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr, 3307 + [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr, 3308 + [GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr, 3309 + [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr, 3310 + [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr, 3311 + [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr, 3312 + [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr, 3313 + [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr, 3314 + [GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr, 3315 + [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr, 3316 + [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr, 3317 + [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr, 3318 + [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr, 3319 + [GCC_CAMSS_CSI2PHY_CLK] = &gcc_camss_csi2phy_clk.clkr, 3320 + [GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr, 3321 + [GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr, 3322 + [GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr, 3323 + [GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr, 3324 + [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr, 3325 + [GCC_CAMSS_CSI_VFE1_CLK] = &gcc_camss_csi_vfe1_clk.clkr, 3326 + [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr, 3327 + [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr, 3328 + [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr, 3329 + [GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr, 3330 + [GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr, 3331 + [GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr, 3332 + [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr, 3333 + [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr, 3334 + [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr, 3335 + [GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr, 3336 + [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr, 3337 + [GCC_CAMSS_VFE0_AHB_CLK] = &gcc_camss_vfe0_ahb_clk.clkr, 3338 + [GCC_CAMSS_VFE0_AXI_CLK] = &gcc_camss_vfe0_axi_clk.clkr, 3339 + [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr, 3340 + [GCC_CAMSS_VFE1_AHB_CLK] = &gcc_camss_vfe1_ahb_clk.clkr, 3341 + [GCC_CAMSS_VFE1_AXI_CLK] = &gcc_camss_vfe1_axi_clk.clkr, 3342 + [GCC_CAMSS_VFE1_CLK] = &gcc_camss_vfe1_clk.clkr, 3343 + [GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr, 3344 + [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr, 3345 + [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr, 3346 + [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr, 3347 + [GCC_DCC_CLK] = &gcc_dcc_clk.clkr, 3348 + [GCC_GP1_CLK] = &gcc_gp1_clk.clkr, 3349 + [GCC_GP2_CLK] = &gcc_gp2_clk.clkr, 3350 + [GCC_GP3_CLK] = &gcc_gp3_clk.clkr, 3351 + [GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr, 3352 + [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr, 3353 + [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr, 3354 + [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr, 3355 + [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr, 3356 + [MSM8937_GCC_MDSS_BYTE1_CLK] = &gcc_mdss_byte1_clk.clkr, 3357 + [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr, 3358 + [MSM8937_GCC_MDSS_ESC1_CLK] = &gcc_mdss_esc1_clk.clkr, 3359 + [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr, 3360 + [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr, 3361 + [MSM8937_GCC_MDSS_PCLK1_CLK] = &gcc_mdss_pclk1_clk.clkr, 3362 + [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr, 3363 + [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr, 3364 + [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr, 3365 + [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr, 3366 + [MSM8937_GCC_OXILI_AON_CLK] = &gcc_oxili_aon_clk.clkr, 3367 + [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr, 3368 + [MSM8937_GCC_OXILI_TIMER_CLK] = &gcc_oxili_timer_clk.clkr, 3369 + [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr, 3370 + [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr, 3371 + [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr, 3372 + [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr, 3373 + [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr, 3374 + [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr, 3375 + [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr, 3376 + [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr, 3377 + [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr, 3378 + [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr, 3379 + [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr, 3380 + [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr, 3381 + [GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr, 3382 + [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr, 3383 + [GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr, 3384 + [GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr, 3385 + [GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr, 3386 + [GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr, 3387 + [GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr, 3388 + [GCC_VFE1_TBU_CLK] = &gcc_vfe1_tbu_clk.clkr, 3389 + [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr, 3390 + }; 3391 + 3585 3392 static const struct qcom_reset_map gcc_msm8917_resets[] = { 3586 3393 [GCC_CAMSS_MICRO_BCR] = { 0x56008 }, 3587 3394 [GCC_MSS_BCR] = { 0x71000 }, ··· 3791 3234 [VFE1_GDSC] = &vfe1_gdsc, 3792 3235 }; 3793 3236 3237 + static struct gdsc *gcc_msm8937_gdscs[] = { 3238 + [CPP_GDSC] = &cpp_gdsc, 3239 + [JPEG_GDSC] = &jpeg_gdsc, 3240 + [MDSS_GDSC] = &mdss_gdsc, 3241 + [OXILI_GX_GDSC] = &oxili_gx_gdsc_msm8937, 3242 + [MSM8937_OXILI_CX_GDSC] = &oxili_cx_gdsc, 3243 + [VENUS_CORE0_GDSC] = &venus_core0_gdsc, 3244 + [VENUS_GDSC] = &venus_gdsc, 3245 + [VFE0_GDSC] = &vfe0_gdsc, 3246 + [VFE1_GDSC] = &vfe1_gdsc, 3247 + }; 3248 + 3794 3249 static const struct qcom_cc_desc gcc_msm8917_desc = { 3795 3250 .config = &gcc_msm8917_regmap_config, 3796 3251 .clks = gcc_msm8917_clocks, ··· 3823 3254 .num_gdscs = ARRAY_SIZE(gcc_msm8917_gdscs), 3824 3255 }; 3825 3256 3257 + static const struct qcom_cc_desc gcc_msm8937_desc = { 3258 + .config = &gcc_msm8917_regmap_config, 3259 + .clks = gcc_msm8937_clocks, 3260 + .num_clks = ARRAY_SIZE(gcc_msm8937_clocks), 3261 + .resets = gcc_msm8917_resets, 3262 + .num_resets = ARRAY_SIZE(gcc_msm8917_resets), 3263 + .gdscs = gcc_msm8937_gdscs, 3264 + .num_gdscs = ARRAY_SIZE(gcc_msm8937_gdscs), 3265 + }; 3266 + 3267 + static void msm8937_clock_override(void) 3268 + { 3269 + /* GPLL3 750MHz configuration */ 3270 + gpll3_early_config.l = 47; 3271 + gpll3_early.vco_table = gpll3_p_vco_msm8937; 3272 + gpll3_early.num_vco = ARRAY_SIZE(gpll3_p_vco_msm8937); 3273 + 3274 + /* 3275 + * Set below clocks for use specific msm8937 parent map. 3276 + */ 3277 + vcodec0_clk_src.parent_map = gcc_cpp_map; 3278 + vcodec0_clk_src.clkr.hw.init = &vcodec0_clk_src_init_msm8937; 3279 + 3280 + /* 3281 + * Set below clocks for use specific msm8937 freq table. 3282 + */ 3283 + vfe0_clk_src.freq_tbl = ftbl_vfe_clk_src_msm8937; 3284 + vfe1_clk_src.freq_tbl = ftbl_vfe_clk_src_msm8937; 3285 + cpp_clk_src.freq_tbl = ftbl_cpp_clk_src_msm8937; 3286 + vcodec0_clk_src.freq_tbl = ftbl_vcodec0_clk_src_msm8937; 3287 + csi0phytimer_clk_src.freq_tbl = ftbl_csi_phytimer_clk_src_msm8937; 3288 + csi1phytimer_clk_src.freq_tbl = ftbl_csi_phytimer_clk_src_msm8937; 3289 + usb_hs_system_clk_src.freq_tbl = ftbl_usb_hs_system_clk_src_msm8937; 3290 + } 3291 + 3826 3292 static int gcc_msm8917_probe(struct platform_device *pdev) 3827 3293 { 3828 3294 struct regmap *regmap; ··· 3865 3261 3866 3262 gcc_desc = of_device_get_match_data(&pdev->dev); 3867 3263 3868 - if (gcc_desc == &gcc_qm215_desc) 3264 + if (gcc_desc == &gcc_qm215_desc) { 3869 3265 gfx3d_clk_src.parent_map = gcc_gfx3d_map_qm215; 3266 + } else if (gcc_desc == &gcc_msm8937_desc) { 3267 + msm8937_clock_override(); 3268 + gfx3d_clk_src.freq_tbl = ftbl_gfx3d_clk_src_msm8937; 3269 + } 3870 3270 3871 3271 regmap = qcom_cc_map(pdev, gcc_desc); 3872 3272 if (IS_ERR(regmap)) ··· 3884 3276 static const struct of_device_id gcc_msm8917_match_table[] = { 3885 3277 { .compatible = "qcom,gcc-msm8917", .data = &gcc_msm8917_desc }, 3886 3278 { .compatible = "qcom,gcc-qm215", .data = &gcc_qm215_desc }, 3279 + { .compatible = "qcom,gcc-msm8937", .data = &gcc_msm8937_desc }, 3887 3280 {}, 3888 3281 }; 3889 3282 MODULE_DEVICE_TABLE(of, gcc_msm8917_match_table);