clk: rockchip: add a type from SGRF-controlled gate clocks
Subsystems (2)
Heiko Stuebner
maintainerPATCH 1/2 clk: rockchip: add a type from SGRF-controlled gate clocks
Some clk gates on Rockchip SoCs are part of the SGRF (secure general register files) and thus only controllable from secure mode, with the most prominent example being the watchdog.
In most cases we still want to define this as a real clock though, to have complete clock tree and not reference the generic base-clock from the devicetree.
So far we've just defined this as factor-1-1 clocks in the clock init, so define a special clock-type for it so that this definition can be part of the general tree-definition and save some boilerplate code.
--- drivers/clk/rockchip/clk.h | 4 ++++ 1 file changed, 4 insertions(+)
drivers/clk/rockchip/clk.h +4 -0
@@ -820,6 +820,10 @@ struct rockchip_clk_branch { .gate_offset = -1, \ } +/* SGRF clocks are only accessible from secure mode, so not controllable */ +#define SGRF_GATE (_id, cname, pname) \ + FACTOR(_id, cname, pname, 0, 1, 1) +struct rockchip_clk_provider *rockchip_clk_init (struct device_node *np,void __iomem *base,unsigned long nr_clks); void rockchip_clk_of_add_provider(struct device_node *np,
Signature · 1 line
2.20.1
Heiko Stuebner
maintainerPATCH 2/2 clk: rockchip: convert pclk_wdt boilerplat to new SGRF_GATE macro
Convert the boilerplate code for manual addition of the watchdog clock to the new SGRF_GATE macro for all affected socs.
--- drivers/clk/rockchip/clk-px30.c | 11 +++-------- drivers/clk/rockchip/clk-rk3288.c | 11 +++-------- drivers/clk/rockchip/clk-rk3368.c | 11 +++-------- drivers/clk/rockchip/clk-rk3399.c | 11 +++-------- 4 files changed, 12 insertions(+), 32 deletions(-)
drivers/clk/rockchip/clk-px30.c +3 -8
@@ -803,6 +803,9 @@ static struct rockchip_clk_branch px30_clk_branches[] __initdata = {GATE (ACLK_GIC ,"aclk_gic" ,"aclk_bus_pre" ,CLK_IGNORE_UNUSED ,PX30_CLKGATE_CON (13 ),12 ,GFLAGS ),GATE (ACLK_DCF ,"aclk_dcf" ,"aclk_bus_pre" ,0 ,PX30_CLKGATE_CON (13 ),15 ,GFLAGS ), +/* aclk_dmac is controlled by sgrf_soc_con1[11]. */ +SGRF_GATE (ACLK_DMAC ,"aclk_dmac" ,"aclk_bus_pre" ), +GATE (0 ,"hclk_bus_niu" ,"hclk_bus_pre" ,CLK_IGNORE_UNUSED ,PX30_CLKGATE_CON (13 ),9 ,GFLAGS ),GATE (0 ,"hclk_rom" ,"hclk_bus_pre" ,CLK_IGNORE_UNUSED ,PX30_CLKGATE_CON (13 ),14 ,GFLAGS ), GATE(HCLK_PDM, "hclk_pdm", "hclk_bus_pre", 0, PX30_CLKGATE_CON(14), 1, GFLAGS),
@@ -981,14 +984,6 @@ static void __init px30_clk_init(struct device_node *np)return ; } -/* aclk_dmac is controlled by sgrf_soc_con1[11]. */ - clk =clk_register_fixed_factor (NULL ,"aclk_dmac" ,"aclk_bus_pre" ,0 ,1 ,1 ); -if (IS_ERR (clk)) -pr_warn ("%s: could not register clock aclk_dmac: %ld\n" , - __func__,PTR_ERR (clk)); -else -rockchip_clk_add_lookup (ctx, clk,ACLK_DMAC ); -rockchip_clk_register_plls (ctx, px30_pll_clks,ARRAY_SIZE (px30_pll_clks),PX30_GRF_SOC_STATUS0 );
drivers/clk/rockchip/clk-rk3288.c +3 -8
@@ -776,6 +776,9 @@ static struct rockchip_clk_branch rk3288_clk_branches[] __initdata = {GATE (PCLK_GRF ,"pclk_grf" ,"pclk_pd_alive" ,CLK_IGNORE_UNUSED ,RK3288_CLKGATE_CON (14 ),11 ,GFLAGS ),GATE (0 ,"pclk_alive_niu" ,"pclk_pd_alive" ,0 ,RK3288_CLKGATE_CON (14 ),12 ,GFLAGS ), +/* Watchdog pclk is controlled by RK3288_SGRF_SOC_CON0[1]. */ +SGRF_GATE (PCLK_WDT ,"pclk_wdt" ,"pclk_pd_alive" ), +/* pclk_pd_pmu gates */ GATE (PCLK_PMU ,"pclk_pmu" ,"pclk_pd_pmu" ,CLK_IGNORE_UNUSED ,RK3288_CLKGATE_CON (17 ),0 ,GFLAGS ), GATE(0, "pclk_intmem1", "pclk_pd_pmu", CLK_IGNORE_UNUSED, RK3288_CLKGATE_CON(17), 1, GFLAGS),
@@ -939,14 +942,6 @@ static void __init rk3288_clk_init(struct device_node *np)return ; } -/* Watchdog pclk is controlled by RK3288_SGRF_SOC_CON0[1]. */ - clk =clk_register_fixed_factor (NULL ,"pclk_wdt" ,"pclk_pd_alive" ,0 ,1 ,1 ); -if (IS_ERR (clk)) -pr_warn ("%s: could not register clock pclk_wdt: %ld\n" , - __func__,PTR_ERR (clk)); -else -rockchip_clk_add_lookup (ctx, clk,PCLK_WDT ); -rockchip_clk_register_plls (ctx, rk3288_pll_clks,ARRAY_SIZE (rk3288_pll_clks),RK3288_GRF_SOC_STATUS1 );
drivers/clk/rockchip/clk-rk3368.c +3 -8
@@ -820,6 +820,9 @@ static struct rockchip_clk_branch rk3368_clk_branches[] __initdata = {GATE (PCLK_GPIO2 ,"pclk_gpio2" ,"pclk_pd_alive" ,0 ,RK3368_CLKGATE_CON (22 ),2 ,GFLAGS ),GATE (PCLK_GPIO1 ,"pclk_gpio1" ,"pclk_pd_alive" ,0 ,RK3368_CLKGATE_CON (22 ),1 ,GFLAGS ), +/* Watchdog pclk is controlled by sgrf_soc_con3[7]. */ + SGRF_GATE(PCLK_WDT, "pclk_wdt", "pclk_pd_alive"), +/* * pclk_vio gates * pclk_vio comes from the exactly same source as hclk_vio
@@ -886,14 +889,6 @@ static void __init rk3368_clk_init(struct device_node *np)return ; } -/* Watchdog pclk is controlled by sgrf_soc_con3[7]. */ - clk =clk_register_fixed_factor (NULL ,"pclk_wdt" ,"pclk_pd_alive" ,0 ,1 ,1 ); -if (IS_ERR (clk)) -pr_warn ("%s: could not register clock pclk_wdt: %ld\n" , - __func__,PTR_ERR (clk)); -else -rockchip_clk_add_lookup (ctx, clk,PCLK_WDT ); -rockchip_clk_register_plls (ctx, rk3368_pll_clks,ARRAY_SIZE (rk3368_pll_clks),RK3368_GRF_SOC_STATUS0 );
drivers/clk/rockchip/clk-rk3399.c +3 -8
@@ -1304,6 +1304,9 @@ static struct rockchip_clk_branch rk3399_clk_branches[] __initdata = {GATE (PCLK_PMU_INTR_ARB ,"pclk_pmu_intr_arb" ,"pclk_alive" ,CLK_IGNORE_UNUSED ,RK3399_CLKGATE_CON (31 ),9 ,GFLAGS ),GATE (PCLK_SGRF ,"pclk_sgrf" ,"pclk_alive" ,CLK_IGNORE_UNUSED ,RK3399_CLKGATE_CON (31 ),10 ,GFLAGS ), +/* Watchdog pclk is controlled by RK3399 SECURE_GRF_SOC_CON3[8]. */ +SGRF_GATE (PCLK_WDT ,"pclk_wdt" ,"pclk_alive" ), +GATE (SCLK_MIPIDPHY_REF ,"clk_mipidphy_ref" ,"xin24m" ,0 ,RK3399_CLKGATE_CON (11 ),14 ,GFLAGS ), GATE(SCLK_DPHY_PLL, "clk_dphy_pll", "clk_mipidphy_ref", CLK_IGNORE_UNUSED, RK3399_CLKGATE_CON(21), 0, GFLAGS),
@@ -1546,14 +1549,6 @@ static void __init rk3399_clk_init(struct device_node *np)return ; } -/* Watchdog pclk is controlled by RK3399 SECURE_GRF_SOC_CON3[8]. */ - clk =clk_register_fixed_factor (NULL ,"pclk_wdt" ,"pclk_alive" ,0 ,1 ,1 ); -if (IS_ERR (clk)) -pr_warn ("%s: could not register clock pclk_wdt: %ld\n" , - __func__,PTR_ERR (clk)); -else -rockchip_clk_add_lookup (ctx, clk,PCLK_WDT ); -rockchip_clk_register_plls (ctx, rk3399_pll_clks,ARRAY_SIZE (rk3399_pll_clks),-1 );
Signature · 1 line
2.20.1
Heiko Stuebner
maintainerAm Donnerstag, 6. Juni 2019, 11:09:33 CEST schrieb Heiko Stuebner:
Quoted 8 lines
Some clk gates on Rockchip SoCs are part of the SGRF (secure general register files) and thus only controllable from secure mode, with the most prominent example being the watchdog.
In most cases we still want to define this as a real clock though, to have complete clock tree and not reference the generic base-clock from the devicetree.
Quoted 5 lines
So far we've just defined this as factor-1-1 clocks in the clock init, so define a special clock-type for it so that this definition can be part of the general tree-definition and save some boilerplate code.
Signed-off-by Heiko Stuebner <[email protected]>
applied both for 5.3