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

clk: qcom: dispcc: Add support for display port clocks

SDM845 dispcc supports RCG and CBCRs for display port, so add support for
the same.

Signed-off-by: Taniya Das <tdas@codeaurora.org>
Link: https://lkml.kernel.org/r/20190731182713.8123-3-tdas@codeaurora.org
Signed-off-by: Stephen Boyd <sboyd@kernel.org>

authored by

Taniya Das and committed by
Stephen Boyd
c1079b4e cddf1f82

+225 -2
+213 -1
drivers/clk/qcom/dispcc-sdm845.c
··· 1 1 // SPDX-License-Identifier: GPL-2.0 2 2 /* 3 - * Copyright (c) 2018, The Linux Foundation. All rights reserved. 3 + * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. 4 4 */ 5 5 6 6 #include <linux/clk-provider.h> ··· 29 29 P_DSI1_PHY_PLL_OUT_DSICLK, 30 30 P_GPLL0_OUT_MAIN, 31 31 P_GPLL0_OUT_MAIN_DIV, 32 + P_DP_PHY_PLL_LINK_CLK, 33 + P_DP_PHY_PLL_VCO_DIV_CLK, 32 34 }; 33 35 34 36 static const struct parent_map disp_cc_parent_map_0[] = { ··· 44 42 "bi_tcxo", 45 43 "dsi0_phy_pll_out_byteclk", 46 44 "dsi1_phy_pll_out_byteclk", 45 + "core_bi_pll_test_se", 46 + }; 47 + 48 + static const struct parent_map disp_cc_parent_map_1[] = { 49 + { P_BI_TCXO, 0 }, 50 + { P_DP_PHY_PLL_LINK_CLK, 1 }, 51 + { P_DP_PHY_PLL_VCO_DIV_CLK, 2 }, 52 + { P_CORE_BI_PLL_TEST_SE, 7 }, 53 + }; 54 + 55 + static const char * const disp_cc_parent_names_1[] = { 56 + "bi_tcxo", 57 + "dp_link_clk_divsel_ten", 58 + "dp_vco_divided_clk_src_mux", 47 59 "core_bi_pll_test_se", 48 60 }; 49 61 ··· 141 125 .num_parents = 4, 142 126 .flags = CLK_SET_RATE_PARENT, 143 127 .ops = &clk_byte2_ops, 128 + }, 129 + }; 130 + 131 + static const struct freq_tbl ftbl_disp_cc_mdss_dp_aux_clk_src[] = { 132 + F(19200000, P_BI_TCXO, 1, 0, 0), 133 + { } 134 + }; 135 + 136 + static struct clk_rcg2 disp_cc_mdss_dp_aux_clk_src = { 137 + .cmd_rcgr = 0x219c, 138 + .mnd_width = 0, 139 + .hid_width = 5, 140 + .parent_map = disp_cc_parent_map_2, 141 + .freq_tbl = ftbl_disp_cc_mdss_dp_aux_clk_src, 142 + .clkr.hw.init = &(struct clk_init_data){ 143 + .name = "disp_cc_mdss_dp_aux_clk_src", 144 + .parent_names = disp_cc_parent_names_2, 145 + .num_parents = 2, 146 + .flags = CLK_SET_RATE_PARENT, 147 + .ops = &clk_rcg2_ops, 148 + }, 149 + }; 150 + 151 + static struct clk_rcg2 disp_cc_mdss_dp_crypto_clk_src = { 152 + .cmd_rcgr = 0x2154, 153 + .mnd_width = 0, 154 + .hid_width = 5, 155 + .parent_map = disp_cc_parent_map_1, 156 + .clkr.hw.init = &(struct clk_init_data){ 157 + .name = "disp_cc_mdss_dp_crypto_clk_src", 158 + .parent_names = disp_cc_parent_names_1, 159 + .num_parents = 4, 160 + .ops = &clk_byte2_ops, 161 + }, 162 + }; 163 + 164 + static struct clk_rcg2 disp_cc_mdss_dp_link_clk_src = { 165 + .cmd_rcgr = 0x2138, 166 + .mnd_width = 0, 167 + .hid_width = 5, 168 + .parent_map = disp_cc_parent_map_1, 169 + .clkr.hw.init = &(struct clk_init_data){ 170 + .name = "disp_cc_mdss_dp_link_clk_src", 171 + .parent_names = disp_cc_parent_names_1, 172 + .num_parents = 4, 173 + .flags = CLK_SET_RATE_PARENT, 174 + .ops = &clk_byte2_ops, 175 + }, 176 + }; 177 + 178 + static struct clk_rcg2 disp_cc_mdss_dp_pixel1_clk_src = { 179 + .cmd_rcgr = 0x2184, 180 + .mnd_width = 16, 181 + .hid_width = 5, 182 + .parent_map = disp_cc_parent_map_1, 183 + .clkr.hw.init = &(struct clk_init_data){ 184 + .name = "disp_cc_mdss_dp_pixel1_clk_src", 185 + .parent_names = disp_cc_parent_names_1, 186 + .num_parents = 4, 187 + .flags = CLK_SET_RATE_PARENT, 188 + .ops = &clk_dp_ops, 189 + }, 190 + }; 191 + 192 + static struct clk_rcg2 disp_cc_mdss_dp_pixel_clk_src = { 193 + .cmd_rcgr = 0x216c, 194 + .mnd_width = 16, 195 + .hid_width = 5, 196 + .parent_map = disp_cc_parent_map_1, 197 + .clkr.hw.init = &(struct clk_init_data){ 198 + .name = "disp_cc_mdss_dp_pixel_clk_src", 199 + .parent_names = disp_cc_parent_names_1, 200 + .num_parents = 4, 201 + .flags = CLK_SET_RATE_PARENT, 202 + .ops = &clk_dp_ops, 144 203 }, 145 204 }; 146 205 ··· 482 391 }, 483 392 }; 484 393 394 + static struct clk_branch disp_cc_mdss_dp_aux_clk = { 395 + .halt_reg = 0x2054, 396 + .halt_check = BRANCH_HALT, 397 + .clkr = { 398 + .enable_reg = 0x2054, 399 + .enable_mask = BIT(0), 400 + .hw.init = &(struct clk_init_data){ 401 + .name = "disp_cc_mdss_dp_aux_clk", 402 + .parent_names = (const char *[]){ 403 + "disp_cc_mdss_dp_aux_clk_src", 404 + }, 405 + .num_parents = 1, 406 + .flags = CLK_SET_RATE_PARENT, 407 + .ops = &clk_branch2_ops, 408 + }, 409 + }, 410 + }; 411 + 412 + static struct clk_branch disp_cc_mdss_dp_crypto_clk = { 413 + .halt_reg = 0x2048, 414 + .halt_check = BRANCH_HALT, 415 + .clkr = { 416 + .enable_reg = 0x2048, 417 + .enable_mask = BIT(0), 418 + .hw.init = &(struct clk_init_data){ 419 + .name = "disp_cc_mdss_dp_crypto_clk", 420 + .parent_names = (const char *[]){ 421 + "disp_cc_mdss_dp_crypto_clk_src", 422 + }, 423 + .num_parents = 1, 424 + .flags = CLK_SET_RATE_PARENT, 425 + .ops = &clk_branch2_ops, 426 + }, 427 + }, 428 + }; 429 + 430 + static struct clk_branch disp_cc_mdss_dp_link_clk = { 431 + .halt_reg = 0x2040, 432 + .halt_check = BRANCH_HALT, 433 + .clkr = { 434 + .enable_reg = 0x2040, 435 + .enable_mask = BIT(0), 436 + .hw.init = &(struct clk_init_data){ 437 + .name = "disp_cc_mdss_dp_link_clk", 438 + .parent_names = (const char *[]){ 439 + "disp_cc_mdss_dp_link_clk_src", 440 + }, 441 + .num_parents = 1, 442 + .flags = CLK_SET_RATE_PARENT, 443 + .ops = &clk_branch2_ops, 444 + }, 445 + }, 446 + }; 447 + 448 + /* reset state of disp_cc_mdss_dp_link_div_clk_src divider is 0x3 (div 4) */ 449 + static struct clk_branch disp_cc_mdss_dp_link_intf_clk = { 450 + .halt_reg = 0x2044, 451 + .halt_check = BRANCH_HALT, 452 + .clkr = { 453 + .enable_reg = 0x2044, 454 + .enable_mask = BIT(0), 455 + .hw.init = &(struct clk_init_data){ 456 + .name = "disp_cc_mdss_dp_link_intf_clk", 457 + .parent_names = (const char *[]){ 458 + "disp_cc_mdss_dp_link_clk_src", 459 + }, 460 + .num_parents = 1, 461 + .ops = &clk_branch2_ops, 462 + }, 463 + }, 464 + }; 465 + 466 + static struct clk_branch disp_cc_mdss_dp_pixel1_clk = { 467 + .halt_reg = 0x2050, 468 + .halt_check = BRANCH_HALT, 469 + .clkr = { 470 + .enable_reg = 0x2050, 471 + .enable_mask = BIT(0), 472 + .hw.init = &(struct clk_init_data){ 473 + .name = "disp_cc_mdss_dp_pixel1_clk", 474 + .parent_names = (const char *[]){ 475 + "disp_cc_mdss_dp_pixel1_clk_src", 476 + }, 477 + .num_parents = 1, 478 + .flags = CLK_SET_RATE_PARENT, 479 + .ops = &clk_branch2_ops, 480 + }, 481 + }, 482 + }; 483 + 484 + static struct clk_branch disp_cc_mdss_dp_pixel_clk = { 485 + .halt_reg = 0x204c, 486 + .halt_check = BRANCH_HALT, 487 + .clkr = { 488 + .enable_reg = 0x204c, 489 + .enable_mask = BIT(0), 490 + .hw.init = &(struct clk_init_data){ 491 + .name = "disp_cc_mdss_dp_pixel_clk", 492 + .parent_names = (const char *[]){ 493 + "disp_cc_mdss_dp_pixel_clk_src", 494 + }, 495 + .num_parents = 1, 496 + .flags = CLK_SET_RATE_PARENT, 497 + .ops = &clk_branch2_ops, 498 + }, 499 + }, 500 + }; 501 + 485 502 static struct clk_branch disp_cc_mdss_esc0_clk = { 486 503 .halt_reg = 0x2038, 487 504 .halt_check = BRANCH_HALT, ··· 788 589 [DISP_CC_MDSS_BYTE1_INTF_CLK] = &disp_cc_mdss_byte1_intf_clk.clkr, 789 590 [DISP_CC_MDSS_BYTE1_DIV_CLK_SRC] = 790 591 &disp_cc_mdss_byte1_div_clk_src.clkr, 592 + [DISP_CC_MDSS_DP_AUX_CLK] = &disp_cc_mdss_dp_aux_clk.clkr, 593 + [DISP_CC_MDSS_DP_AUX_CLK_SRC] = &disp_cc_mdss_dp_aux_clk_src.clkr, 594 + [DISP_CC_MDSS_DP_CRYPTO_CLK] = &disp_cc_mdss_dp_crypto_clk.clkr, 595 + [DISP_CC_MDSS_DP_CRYPTO_CLK_SRC] = 596 + &disp_cc_mdss_dp_crypto_clk_src.clkr, 597 + [DISP_CC_MDSS_DP_LINK_CLK] = &disp_cc_mdss_dp_link_clk.clkr, 598 + [DISP_CC_MDSS_DP_LINK_CLK_SRC] = &disp_cc_mdss_dp_link_clk_src.clkr, 599 + [DISP_CC_MDSS_DP_LINK_INTF_CLK] = &disp_cc_mdss_dp_link_intf_clk.clkr, 600 + [DISP_CC_MDSS_DP_PIXEL1_CLK] = &disp_cc_mdss_dp_pixel1_clk.clkr, 601 + [DISP_CC_MDSS_DP_PIXEL1_CLK_SRC] = 602 + &disp_cc_mdss_dp_pixel1_clk_src.clkr, 603 + [DISP_CC_MDSS_DP_PIXEL_CLK] = &disp_cc_mdss_dp_pixel_clk.clkr, 604 + [DISP_CC_MDSS_DP_PIXEL_CLK_SRC] = &disp_cc_mdss_dp_pixel_clk_src.clkr, 791 605 [DISP_CC_MDSS_ESC0_CLK] = &disp_cc_mdss_esc0_clk.clkr, 792 606 [DISP_CC_MDSS_ESC0_CLK_SRC] = &disp_cc_mdss_esc0_clk_src.clkr, 793 607 [DISP_CC_MDSS_ESC1_CLK] = &disp_cc_mdss_esc1_clk.clkr,
+12 -1
include/dt-bindings/clock/qcom,dispcc-sdm845.h
··· 1 1 /* SPDX-License-Identifier: GPL-2.0 */ 2 2 /* 3 - * Copyright (c) 2018, The Linux Foundation. All rights reserved. 3 + * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved. 4 4 */ 5 5 6 6 #ifndef _DT_BINDINGS_CLK_SDM_DISP_CC_SDM845_H ··· 35 35 #define DISP_CC_PLL0 25 36 36 #define DISP_CC_MDSS_BYTE0_DIV_CLK_SRC 26 37 37 #define DISP_CC_MDSS_BYTE1_DIV_CLK_SRC 27 38 + #define DISP_CC_MDSS_DP_AUX_CLK 28 39 + #define DISP_CC_MDSS_DP_AUX_CLK_SRC 29 40 + #define DISP_CC_MDSS_DP_CRYPTO_CLK 30 41 + #define DISP_CC_MDSS_DP_CRYPTO_CLK_SRC 31 42 + #define DISP_CC_MDSS_DP_LINK_CLK 32 43 + #define DISP_CC_MDSS_DP_LINK_CLK_SRC 33 44 + #define DISP_CC_MDSS_DP_LINK_INTF_CLK 34 45 + #define DISP_CC_MDSS_DP_PIXEL1_CLK 35 46 + #define DISP_CC_MDSS_DP_PIXEL1_CLK_SRC 36 47 + #define DISP_CC_MDSS_DP_PIXEL_CLK 37 48 + #define DISP_CC_MDSS_DP_PIXEL_CLK_SRC 38 38 49 39 50 /* DISP_CC Reset */ 40 51 #define DISP_CC_MDSS_RSCC_BCR 0