Message ID | 1490695614-3220-3-git-send-email-zhangqing@rock-chips.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Elaine, Am Dienstag, 28. März 2017, 18:06:52 CEST schrieb Elaine Zhang: > Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com> I really do expect a commit message explaining why the specific clocks are needed to be critical. The noc and arbiter clocks I somewhat understand, but I'll need explanation on clocks like hclk_otg_pmu, hclk_otg_pmu _etc_ [all these non-noc / non-arbi clocks] on why there is no driver to handle them. Also please group noc / arbi clocks together. This applies to all patches in this series. Thanks Heiko > --- > drivers/clk/rockchip/clk-rk3228.c | 30 +++++++++++++++++++++++++++++- > 1 file changed, 29 insertions(+), 1 deletion(-) > > diff --git a/drivers/clk/rockchip/clk-rk3228.c b/drivers/clk/rockchip/clk-rk3228.c > index db6e5a9e6de6..4d3203f887e2 100644 > --- a/drivers/clk/rockchip/clk-rk3228.c > +++ b/drivers/clk/rockchip/clk-rk3228.c > @@ -445,7 +445,7 @@ enum rk3228_plls { > RK2928_CLKGATE_CON(2), 12, GFLAGS, > &rk3228_spdif_fracmux), > > - GATE(0, "jtag", "ext_jtag", 0, > + GATE(0, "jtag", "ext_jtag", CLK_IGNORE_UNUSED, > RK2928_CLKGATE_CON(1), 3, GFLAGS), > > GATE(0, "sclk_otgphy0", "xin24m", 0, > @@ -644,9 +644,37 @@ enum rk3228_plls { > > static const char *const rk3228_critical_clocks[] __initconst = { > "aclk_cpu", > + "pclk_cpu", > + "hclk_cpu", > "aclk_peri", > "hclk_peri", > "pclk_peri", > + "aclk_rga_noc", > + "aclk_iep_noc", > + "aclk_vop_noc", > + "aclk_hdcp_noc", > + "hclk_vio_ahb_arbi", > + "hclk_vio_noc", > + "hclk_vop_noc", > + "hclk_host0_arb", > + "hclk_host1_arb", > + "hclk_host2_arb", > + "hclk_otg_pmu", > + "aclk_gpu_noc", > + "sclk_initmem_mbist", > + "aclk_initmem", > + "hclk_rom", > + "pclk_ddrupctl", > + "pclk_ddrmon", > + "pclk_msch_noc", > + "pclk_stimer", > + "pclk_ddrphy", > + "pclk_acodecphy", > + "pclk_phy_noc", > + "aclk_vpu_noc", > + "aclk_rkvdec_noc", > + "hclk_vpu_noc", > + "hclk_rkvdec_noc", > }; > > static void __init rk3228_clk_init(struct device_node *np) >
On Tue, Mar 28, 2017 at 06:06:52PM +0800, Elaine Zhang wrote: > Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com> > --- > drivers/clk/rockchip/clk-rk3228.c | 30 +++++++++++++++++++++++++++++- > 1 file changed, 29 insertions(+), 1 deletion(-) > > diff --git a/drivers/clk/rockchip/clk-rk3228.c b/drivers/clk/rockchip/clk-rk3228.c > index db6e5a9e6de6..4d3203f887e2 100644 > --- a/drivers/clk/rockchip/clk-rk3228.c > +++ b/drivers/clk/rockchip/clk-rk3228.c > @@ -445,7 +445,7 @@ enum rk3228_plls { > RK2928_CLKGATE_CON(2), 12, GFLAGS, > &rk3228_spdif_fracmux), > > - GATE(0, "jtag", "ext_jtag", 0, > + GATE(0, "jtag", "ext_jtag", CLK_IGNORE_UNUSED, CLK_IGNORE_UNUSED only prevents a given clock from being gated at late_initcall time, but will not prevent it from being gated later in the life of the system, for example if a reparenting occurs, or if all the clocks sharing the same clock tree become disabled. If your clock really should never ever be gated in order for Linux to operate properly, you should use CLK_IS_CRITICAL. Maxime
Am Donnerstag, 30. März 2017, 14:44:17 CEST schrieb Maxime Ripard: > On Tue, Mar 28, 2017 at 06:06:52PM +0800, Elaine Zhang wrote: > > Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com> > > --- > > drivers/clk/rockchip/clk-rk3228.c | 30 +++++++++++++++++++++++++++++- > > 1 file changed, 29 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/clk/rockchip/clk-rk3228.c b/drivers/clk/rockchip/clk-rk3228.c > > index db6e5a9e6de6..4d3203f887e2 100644 > > --- a/drivers/clk/rockchip/clk-rk3228.c > > +++ b/drivers/clk/rockchip/clk-rk3228.c > > @@ -445,7 +445,7 @@ enum rk3228_plls { > > RK2928_CLKGATE_CON(2), 12, GFLAGS, > > &rk3228_spdif_fracmux), > > > > - GATE(0, "jtag", "ext_jtag", 0, > > + GATE(0, "jtag", "ext_jtag", CLK_IGNORE_UNUSED, > > CLK_IGNORE_UNUSED only prevents a given clock from being gated at > late_initcall time, but will not prevent it from being gated later in > the life of the system, for example if a reparenting occurs, or if all > the clocks sharing the same clock tree become disabled. > > If your clock really should never ever be gated in order for Linux to > operate properly, you should use CLK_IS_CRITICAL. in the scope of the jtag clock, that is actually ok. As it only gates some clock supplied from an external source (ext_jtag).
On Thu, Mar 30, 2017 at 03:10:24PM +0200, Heiko Stuebner wrote: > Am Donnerstag, 30. März 2017, 14:44:17 CEST schrieb Maxime Ripard: > > On Tue, Mar 28, 2017 at 06:06:52PM +0800, Elaine Zhang wrote: > > > Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com> > > > --- > > > drivers/clk/rockchip/clk-rk3228.c | 30 +++++++++++++++++++++++++++++- > > > 1 file changed, 29 insertions(+), 1 deletion(-) > > > > > > diff --git a/drivers/clk/rockchip/clk-rk3228.c b/drivers/clk/rockchip/clk-rk3228.c > > > index db6e5a9e6de6..4d3203f887e2 100644 > > > --- a/drivers/clk/rockchip/clk-rk3228.c > > > +++ b/drivers/clk/rockchip/clk-rk3228.c > > > @@ -445,7 +445,7 @@ enum rk3228_plls { > > > RK2928_CLKGATE_CON(2), 12, GFLAGS, > > > &rk3228_spdif_fracmux), > > > > > > - GATE(0, "jtag", "ext_jtag", 0, > > > + GATE(0, "jtag", "ext_jtag", CLK_IGNORE_UNUSED, > > > > CLK_IGNORE_UNUSED only prevents a given clock from being gated at > > late_initcall time, but will not prevent it from being gated later in > > the life of the system, for example if a reparenting occurs, or if all > > the clocks sharing the same clock tree become disabled. > > > > If your clock really should never ever be gated in order for Linux to > > operate properly, you should use CLK_IS_CRITICAL. > > in the scope of the jtag clock, that is actually ok. As it only gates > some clock supplied from an external source (ext_jtag). It might, I don't know how your clocks work in general, this was just a warning that this probably isn't sufficient if the clock is actually critical. Maxime
diff --git a/drivers/clk/rockchip/clk-rk3228.c b/drivers/clk/rockchip/clk-rk3228.c index db6e5a9e6de6..4d3203f887e2 100644 --- a/drivers/clk/rockchip/clk-rk3228.c +++ b/drivers/clk/rockchip/clk-rk3228.c @@ -445,7 +445,7 @@ enum rk3228_plls { RK2928_CLKGATE_CON(2), 12, GFLAGS, &rk3228_spdif_fracmux), - GATE(0, "jtag", "ext_jtag", 0, + GATE(0, "jtag", "ext_jtag", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(1), 3, GFLAGS), GATE(0, "sclk_otgphy0", "xin24m", 0, @@ -644,9 +644,37 @@ enum rk3228_plls { static const char *const rk3228_critical_clocks[] __initconst = { "aclk_cpu", + "pclk_cpu", + "hclk_cpu", "aclk_peri", "hclk_peri", "pclk_peri", + "aclk_rga_noc", + "aclk_iep_noc", + "aclk_vop_noc", + "aclk_hdcp_noc", + "hclk_vio_ahb_arbi", + "hclk_vio_noc", + "hclk_vop_noc", + "hclk_host0_arb", + "hclk_host1_arb", + "hclk_host2_arb", + "hclk_otg_pmu", + "aclk_gpu_noc", + "sclk_initmem_mbist", + "aclk_initmem", + "hclk_rom", + "pclk_ddrupctl", + "pclk_ddrmon", + "pclk_msch_noc", + "pclk_stimer", + "pclk_ddrphy", + "pclk_acodecphy", + "pclk_phy_noc", + "aclk_vpu_noc", + "aclk_rkvdec_noc", + "hclk_vpu_noc", + "hclk_rkvdec_noc", }; static void __init rk3228_clk_init(struct device_node *np)
Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com> --- drivers/clk/rockchip/clk-rk3228.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-)