Skip to content

Commit eaf9206

Browse files
petegriffinkrzk
authored andcommitted
clk: samsung: gs101: Enable auto_clock_gate mode for each gs101 CMU
Enable auto clock mode, and define the additional fields which are used when this mode is enabled. /sys/kernel/debug/clk/clk_summary now reports approximately 308 running clocks and 298 disabled clocks. Prior to this commit 586 clocks were running and 17 disabled. Signed-off-by: Peter Griffin <peter.griffin@linaro.org> Link: https://patch.msgid.link/20251222-automatic-clocks-v7-4-fec86fa89874@linaro.org Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
1 parent 298fac4 commit eaf9206

1 file changed

Lines changed: 55 additions & 0 deletions

File tree

drivers/clk/samsung/clk-gs101.c

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@
2626
#define CLKS_NR_PERIC0 (CLK_GOUT_PERIC0_SYSREG_PERIC0_PCLK + 1)
2727
#define CLKS_NR_PERIC1 (CLK_GOUT_PERIC1_SYSREG_PERIC1_PCLK + 1)
2828

29+
#define GS101_GATE_DBG_OFFSET 0x4000
30+
#define GS101_DRCG_EN_OFFSET 0x104
31+
#define GS101_MEMCLK_OFFSET 0x108
32+
2933
/* ---- CMU_TOP ------------------------------------------------------------- */
3034

3135
/* Register Offset definitions for CMU_TOP (0x1e080000) */
@@ -1433,6 +1437,9 @@ static const struct samsung_cmu_info top_cmu_info __initconst = {
14331437
.nr_clk_ids = CLKS_NR_TOP,
14341438
.clk_regs = cmu_top_clk_regs,
14351439
.nr_clk_regs = ARRAY_SIZE(cmu_top_clk_regs),
1440+
.auto_clock_gate = true,
1441+
.gate_dbg_offset = GS101_GATE_DBG_OFFSET,
1442+
.option_offset = CMU_CMU_TOP_CONTROLLER_OPTION,
14361443
};
14371444

14381445
static void __init gs101_cmu_top_init(struct device_node *np)
@@ -1900,6 +1907,11 @@ static const struct samsung_gate_clock apm_gate_clks[] __initconst = {
19001907
CLK_CON_GAT_GOUT_BLK_APM_UID_XIU_DP_APM_IPCLKPORT_ACLK, 21, CLK_IS_CRITICAL, 0),
19011908
};
19021909

1910+
static const unsigned long dcrg_memclk_sysreg[] __initconst = {
1911+
GS101_DRCG_EN_OFFSET,
1912+
GS101_MEMCLK_OFFSET,
1913+
};
1914+
19031915
static const struct samsung_cmu_info apm_cmu_info __initconst = {
19041916
.mux_clks = apm_mux_clks,
19051917
.nr_mux_clks = ARRAY_SIZE(apm_mux_clks),
@@ -1912,6 +1924,12 @@ static const struct samsung_cmu_info apm_cmu_info __initconst = {
19121924
.nr_clk_ids = CLKS_NR_APM,
19131925
.clk_regs = apm_clk_regs,
19141926
.nr_clk_regs = ARRAY_SIZE(apm_clk_regs),
1927+
.sysreg_clk_regs = dcrg_memclk_sysreg,
1928+
.nr_sysreg_clk_regs = ARRAY_SIZE(dcrg_memclk_sysreg),
1929+
.auto_clock_gate = true,
1930+
.gate_dbg_offset = GS101_GATE_DBG_OFFSET,
1931+
.drcg_offset = GS101_DRCG_EN_OFFSET,
1932+
.memclk_offset = GS101_MEMCLK_OFFSET,
19151933
};
19161934

19171935
/* ---- CMU_HSI0 ------------------------------------------------------------ */
@@ -2375,7 +2393,14 @@ static const struct samsung_cmu_info hsi0_cmu_info __initconst = {
23752393
.nr_clk_ids = CLKS_NR_HSI0,
23762394
.clk_regs = hsi0_clk_regs,
23772395
.nr_clk_regs = ARRAY_SIZE(hsi0_clk_regs),
2396+
.sysreg_clk_regs = dcrg_memclk_sysreg,
2397+
.nr_sysreg_clk_regs = ARRAY_SIZE(dcrg_memclk_sysreg),
23782398
.clk_name = "bus",
2399+
.auto_clock_gate = true,
2400+
.gate_dbg_offset = GS101_GATE_DBG_OFFSET,
2401+
.option_offset = HSI0_CMU_HSI0_CONTROLLER_OPTION,
2402+
.drcg_offset = GS101_DRCG_EN_OFFSET,
2403+
.memclk_offset = GS101_MEMCLK_OFFSET,
23792404
};
23802405

23812406
/* ---- CMU_HSI2 ------------------------------------------------------------ */
@@ -2863,7 +2888,14 @@ static const struct samsung_cmu_info hsi2_cmu_info __initconst = {
28632888
.nr_clk_ids = CLKS_NR_HSI2,
28642889
.clk_regs = cmu_hsi2_clk_regs,
28652890
.nr_clk_regs = ARRAY_SIZE(cmu_hsi2_clk_regs),
2891+
.sysreg_clk_regs = dcrg_memclk_sysreg,
2892+
.nr_sysreg_clk_regs = ARRAY_SIZE(dcrg_memclk_sysreg),
28662893
.clk_name = "bus",
2894+
.auto_clock_gate = true,
2895+
.gate_dbg_offset = GS101_GATE_DBG_OFFSET,
2896+
.option_offset = HSI2_CMU_HSI2_CONTROLLER_OPTION,
2897+
.drcg_offset = GS101_DRCG_EN_OFFSET,
2898+
.memclk_offset = GS101_MEMCLK_OFFSET,
28672899
};
28682900

28692901
/* ---- CMU_MISC ------------------------------------------------------------ */
@@ -3423,7 +3455,14 @@ static const struct samsung_cmu_info misc_cmu_info __initconst = {
34233455
.nr_clk_ids = CLKS_NR_MISC,
34243456
.clk_regs = misc_clk_regs,
34253457
.nr_clk_regs = ARRAY_SIZE(misc_clk_regs),
3458+
.sysreg_clk_regs = dcrg_memclk_sysreg,
3459+
.nr_sysreg_clk_regs = ARRAY_SIZE(dcrg_memclk_sysreg),
34263460
.clk_name = "bus",
3461+
.auto_clock_gate = true,
3462+
.gate_dbg_offset = GS101_GATE_DBG_OFFSET,
3463+
.option_offset = MISC_CMU_MISC_CONTROLLER_OPTION,
3464+
.drcg_offset = GS101_DRCG_EN_OFFSET,
3465+
.memclk_offset = GS101_MEMCLK_OFFSET,
34273466
};
34283467

34293468
static void __init gs101_cmu_misc_init(struct device_node *np)
@@ -4010,6 +4049,10 @@ static const struct samsung_gate_clock peric0_gate_clks[] __initconst = {
40104049
21, 0, 0),
40114050
};
40124051

4052+
static const unsigned long dcrg_sysreg[] __initconst = {
4053+
GS101_DRCG_EN_OFFSET,
4054+
};
4055+
40134056
static const struct samsung_cmu_info peric0_cmu_info __initconst = {
40144057
.mux_clks = peric0_mux_clks,
40154058
.nr_mux_clks = ARRAY_SIZE(peric0_mux_clks),
@@ -4020,7 +4063,13 @@ static const struct samsung_cmu_info peric0_cmu_info __initconst = {
40204063
.nr_clk_ids = CLKS_NR_PERIC0,
40214064
.clk_regs = peric0_clk_regs,
40224065
.nr_clk_regs = ARRAY_SIZE(peric0_clk_regs),
4066+
.sysreg_clk_regs = dcrg_sysreg,
4067+
.nr_sysreg_clk_regs = ARRAY_SIZE(dcrg_sysreg),
40234068
.clk_name = "bus",
4069+
.auto_clock_gate = true,
4070+
.gate_dbg_offset = GS101_GATE_DBG_OFFSET,
4071+
.option_offset = PERIC0_CMU_PERIC0_CONTROLLER_OPTION,
4072+
.drcg_offset = GS101_DRCG_EN_OFFSET,
40244073
};
40254074

40264075
/* ---- CMU_PERIC1 ---------------------------------------------------------- */
@@ -4368,7 +4417,13 @@ static const struct samsung_cmu_info peric1_cmu_info __initconst = {
43684417
.nr_clk_ids = CLKS_NR_PERIC1,
43694418
.clk_regs = peric1_clk_regs,
43704419
.nr_clk_regs = ARRAY_SIZE(peric1_clk_regs),
4420+
.sysreg_clk_regs = dcrg_sysreg,
4421+
.nr_sysreg_clk_regs = ARRAY_SIZE(dcrg_sysreg),
43714422
.clk_name = "bus",
4423+
.auto_clock_gate = true,
4424+
.gate_dbg_offset = GS101_GATE_DBG_OFFSET,
4425+
.option_offset = PERIC1_CMU_PERIC1_CONTROLLER_OPTION,
4426+
.drcg_offset = GS101_DRCG_EN_OFFSET,
43724427
};
43734428

43744429
/* ---- platform_driver ----------------------------------------------------- */

0 commit comments

Comments
 (0)