227-v6.3-clk-mediatek-clk-mt7986-topckgen-Properly-keep-some-.patch 4.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. From 3511004225ce917a4aa6e6ac61481ac60f08f401 Mon Sep 17 00:00:00 2001
  2. From: AngeloGioacchino Del Regno <[email protected]>
  3. Date: Fri, 20 Jan 2023 10:20:52 +0100
  4. Subject: [PATCH 06/15] clk: mediatek: clk-mt7986-topckgen: Properly keep some
  5. clocks enabled
  6. Instead of calling clk_prepare_enable() on a bunch of clocks at probe
  7. time, set the CLK_IS_CRITICAL flag to the same as these are required
  8. to be always on, and this is the right way of achieving that.
  9. Signed-off-by: AngeloGioacchino Del Regno <[email protected]>
  10. Reviewed-by: Chen-Yu Tsai <[email protected]>
  11. Reviewed-by: Miles Chen <[email protected]>
  12. Link: https://lore.kernel.org/r/[email protected]
  13. Tested-by: Mingming Su <[email protected]>
  14. Signed-off-by: Stephen Boyd <[email protected]>
  15. ---
  16. drivers/clk/mediatek/clk-mt7986-topckgen.c | 46 +++++++++++-----------
  17. 1 file changed, 24 insertions(+), 22 deletions(-)
  18. --- a/drivers/clk/mediatek/clk-mt7986-topckgen.c
  19. +++ b/drivers/clk/mediatek/clk-mt7986-topckgen.c
  20. @@ -202,16 +202,23 @@ static const struct mtk_mux top_muxes[]
  21. MUX_GATE_CLR_SET_UPD(CLK_TOP_F_26M_ADC_SEL, "f_26m_adc_sel",
  22. f_26m_adc_parents, 0x020, 0x024, 0x028, 16, 1, 23,
  23. 0x1C0, 10),
  24. - MUX_GATE_CLR_SET_UPD(CLK_TOP_DRAMC_SEL, "dramc_sel", f_26m_adc_parents,
  25. - 0x020, 0x024, 0x028, 24, 1, 31, 0x1C0, 11),
  26. + MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_DRAMC_SEL, "dramc_sel",
  27. + f_26m_adc_parents, 0x020, 0x024, 0x028,
  28. + 24, 1, 31, 0x1C0, 11,
  29. + CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
  30. /* CLK_CFG_3 */
  31. - MUX_GATE_CLR_SET_UPD(CLK_TOP_DRAMC_MD32_SEL, "dramc_md32_sel",
  32. - dramc_md32_parents, 0x030, 0x034, 0x038, 0, 1, 7,
  33. - 0x1C0, 12),
  34. - MUX_GATE_CLR_SET_UPD(CLK_TOP_SYSAXI_SEL, "sysaxi_sel", sysaxi_parents,
  35. - 0x030, 0x034, 0x038, 8, 2, 15, 0x1C0, 13),
  36. - MUX_GATE_CLR_SET_UPD(CLK_TOP_SYSAPB_SEL, "sysapb_sel", sysapb_parents,
  37. - 0x030, 0x034, 0x038, 16, 2, 23, 0x1C0, 14),
  38. + MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_DRAMC_MD32_SEL, "dramc_md32_sel",
  39. + dramc_md32_parents, 0x030, 0x034, 0x038,
  40. + 0, 1, 7, 0x1C0, 12,
  41. + CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
  42. + MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SYSAXI_SEL, "sysaxi_sel",
  43. + sysaxi_parents, 0x030, 0x034, 0x038,
  44. + 8, 2, 15, 0x1C0, 13,
  45. + CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
  46. + MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SYSAPB_SEL, "sysapb_sel",
  47. + sysapb_parents, 0x030, 0x034, 0x038,
  48. + 16, 2, 23, 0x1C0, 14,
  49. + CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
  50. MUX_GATE_CLR_SET_UPD(CLK_TOP_ARM_DB_MAIN_SEL, "arm_db_main_sel",
  51. arm_db_main_parents, 0x030, 0x034, 0x038, 24, 1,
  52. 31, 0x1C0, 15),
  53. @@ -234,9 +241,10 @@ static const struct mtk_mux top_muxes[]
  54. MUX_GATE_CLR_SET_UPD(CLK_TOP_SGM_325M_SEL, "sgm_325m_sel",
  55. sgm_325m_parents, 0x050, 0x054, 0x058, 8, 1, 15,
  56. 0x1C0, 21),
  57. - MUX_GATE_CLR_SET_UPD(CLK_TOP_SGM_REG_SEL, "sgm_reg_sel",
  58. - sgm_reg_parents, 0x050, 0x054, 0x058, 16, 1, 23,
  59. - 0x1C0, 22),
  60. + MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_SGM_REG_SEL, "sgm_reg_sel",
  61. + sgm_reg_parents, 0x050, 0x054, 0x058,
  62. + 16, 1, 23, 0x1C0, 22,
  63. + CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
  64. MUX_GATE_CLR_SET_UPD(CLK_TOP_A1SYS_SEL, "a1sys_sel", a1sys_parents,
  65. 0x050, 0x054, 0x058, 24, 1, 31, 0x1C0, 23),
  66. /* CLK_CFG_6 */
  67. @@ -252,9 +260,10 @@ static const struct mtk_mux top_muxes[]
  68. f_26m_adc_parents, 0x060, 0x064, 0x068, 24, 1, 31,
  69. 0x1C0, 27),
  70. /* CLK_CFG_7 */
  71. - MUX_GATE_CLR_SET_UPD(CLK_TOP_F26M_SEL, "csw_f26m_sel",
  72. - f_26m_adc_parents, 0x070, 0x074, 0x078, 0, 1, 7,
  73. - 0x1C0, 28),
  74. + MUX_GATE_CLR_SET_UPD_FLAGS(CLK_TOP_F26M_SEL, "csw_f26m_sel",
  75. + f_26m_adc_parents, 0x070, 0x074, 0x078,
  76. + 0, 1, 7, 0x1C0, 28,
  77. + CLK_IS_CRITICAL | CLK_SET_RATE_PARENT),
  78. MUX_GATE_CLR_SET_UPD(CLK_TOP_AUD_L_SEL, "aud_l_sel", aud_l_parents,
  79. 0x070, 0x074, 0x078, 8, 2, 15, 0x1C0, 29),
  80. MUX_GATE_CLR_SET_UPD(CLK_TOP_A_TUNER_SEL, "a_tuner_sel",
  81. @@ -307,13 +316,6 @@ static int clk_mt7986_topckgen_probe(str
  82. ARRAY_SIZE(top_muxes), node,
  83. &mt7986_clk_lock, clk_data);
  84. - clk_prepare_enable(clk_data->hws[CLK_TOP_SYSAXI_SEL]->clk);
  85. - clk_prepare_enable(clk_data->hws[CLK_TOP_SYSAPB_SEL]->clk);
  86. - clk_prepare_enable(clk_data->hws[CLK_TOP_DRAMC_SEL]->clk);
  87. - clk_prepare_enable(clk_data->hws[CLK_TOP_DRAMC_MD32_SEL]->clk);
  88. - clk_prepare_enable(clk_data->hws[CLK_TOP_F26M_SEL]->clk);
  89. - clk_prepare_enable(clk_data->hws[CLK_TOP_SGM_REG_SEL]->clk);
  90. -
  91. r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
  92. if (r) {