linux-clk.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/3] dt-bindings: clock: imx7ulp: add HSRUN mode related clocks
@ 2018-12-07 10:03 Anson Huang
  2018-12-07 10:03 ` [PATCH 2/3] clk: imx: imx7ulp: add arm hsrun mode clocks support Anson Huang
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Anson Huang @ 2018-12-07 10:03 UTC (permalink / raw)
  To: shawnguo, s.hauer, kernel, Fabio Estevam, robh+dt, mark.rutland,
	mturquette, sboyd, Aisheng Dong, linux-arm-kernel, devicetree,
	linux-kernel, linux-clk
  Cc: dl-linux-imx

There are HSRUN mode clock mux and divider in SCG1 module,
and SMC1 can control i.MX7ULP CPU to run in RUN mode or
HSRUN mode, the mode switch bits are actually a clock mux,
add these clocks for clock driver and dtb to use.

Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
---
 include/dt-bindings/clock/imx7ulp-clock.h | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/include/dt-bindings/clock/imx7ulp-clock.h b/include/dt-bindings/clock/imx7ulp-clock.h
index 008c5ee..21d872e 100644
--- a/include/dt-bindings/clock/imx7ulp-clock.h
+++ b/include/dt-bindings/clock/imx7ulp-clock.h
@@ -54,8 +54,10 @@
 #define IMX7ULP_CLK_SOSC_BUS_CLK	41
 #define IMX7ULP_CLK_FIRC_BUS_CLK	42
 #define IMX7ULP_CLK_SPLL_BUS_CLK	43
+#define IMX7ULP_CLK_HSRUN_SYS_SEL	44
+#define IMX7ULP_CLK_HSRUN_CORE_DIV	45
 
-#define IMX7ULP_CLK_SCG1_END		44
+#define IMX7ULP_CLK_SCG1_END		46
 
 /* PCC2 */
 #define IMX7ULP_CLK_DMA1		0
@@ -106,4 +108,9 @@
 
 #define IMX7ULP_CLK_PCC3_END		16
 
+/* SMC1 */
+#define IMX7ULP_CLK_ARM			0
+
+#define IMX7ULP_CLK_SMC1_END		1
+
 #endif /* __DT_BINDINGS_CLOCK_IMX7ULP_H */
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/3] clk: imx: imx7ulp: add arm hsrun mode clocks support
  2018-12-07 10:03 [PATCH 1/3] dt-bindings: clock: imx7ulp: add HSRUN mode related clocks Anson Huang
@ 2018-12-07 10:03 ` Anson Huang
  2018-12-14 22:04   ` Stephen Boyd
  2018-12-07 10:03 ` [PATCH 3/3] ARM: dts: imx7ulp: add HSRUN mode clocks Anson Huang
  2018-12-14 22:04 ` [PATCH 1/3] dt-bindings: clock: imx7ulp: add HSRUN mode related clocks Stephen Boyd
  2 siblings, 1 reply; 6+ messages in thread
From: Anson Huang @ 2018-12-07 10:03 UTC (permalink / raw)
  To: shawnguo, s.hauer, kernel, Fabio Estevam, robh+dt, mark.rutland,
	mturquette, sboyd, Aisheng Dong, linux-arm-kernel, devicetree,
	linux-kernel, linux-clk
  Cc: dl-linux-imx

i.MX7ULP has a Cortex-A7 CPU which can run in RUN mode
or HSRUN mode, it is controlled in SMC1 module. The RUN
mode and HSRUN mode will use different clock source for
ARM, "divcore" for RUN mode and "hsrun_divcore" for HSRUN
mode, so the control bits in SMC1 module can be abstracted
as a HW clock mux, this patch adds HSRUN mode related
clocks in SCG1 module and adds "arm" clock in SMC1 module
to support RUN mode and HSRUN mode switch.

Latest clock tree in RUN mode as below:

 firc                                 0        0        0    48000000          0     0  50000
    firc_bus_clk                      0        0        0    48000000          0     0  50000
    hsrun_scs_sel                     0        0        0    48000000          0     0  50000
       hsrun_divcore                  0        0        0    48000000          0     0  50000

 sosc                                 3        3        3    24000000          0     0  50000
    spll_pre_sel                      1        1        1    24000000          0     0  50000
       spll_pre_div                   1        1        2    24000000          0     0  50000
          spll                        1        1        2   528000000          0     0  50000
             spll_pfd0                1        1        1   500210526          0     0  50000
                spll_pfd_sel          1        1        0   500210526          0     0  50000
                   spll_sel           1        1        0   500210526          0     0  50000
                      scs_sel         1        1        0   500210526          0     0  50000
                         divcore      1        1        0   500210526          0     0  50000
                            arm       1        1        0   500210526          0     0  50000

Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
---
 drivers/clk/imx/clk-imx7ulp.c | 31 ++++++++++++++++++++++++++++++-
 1 file changed, 30 insertions(+), 1 deletion(-)

diff --git a/drivers/clk/imx/clk-imx7ulp.c b/drivers/clk/imx/clk-imx7ulp.c
index 3b7507f..4e18f62 100644
--- a/drivers/clk/imx/clk-imx7ulp.c
+++ b/drivers/clk/imx/clk-imx7ulp.c
@@ -29,6 +29,7 @@ static const char * const ddr_sels[]		= { "apll_pfd_sel", "upll", };
 static const char * const nic_sels[]		= { "firc", "ddr_clk", };
 static const char * const periph_plat_sels[]	= { "dummy", "nic1_bus_clk", "nic1_clk", "ddr_clk", "apll_pfd2", "apll_pfd1", "apll_pfd0", "upll", };
 static const char * const periph_bus_sels[]	= { "dummy", "sosc_bus_clk", "mpll", "firc_bus_clk", "rosc", "nic1_bus_clk", "nic1_clk", "spll_bus_clk", };
+static const char * const arm_sels[]		= { "divcore", "dummy", "dummy", "hsrun_divcore", };
 
 /* used by sosc/sirc/firc/ddr/spll/apll dividers */
 static const struct clk_div_table ulp_div_table[] = {
@@ -102,10 +103,12 @@ static void __init imx7ulp_clk_scg1_init(struct device_node *np)
 
 	/* scs/ddr/nic select different clock source requires that clock to be enabled first */
 	clks[IMX7ULP_CLK_SYS_SEL]	= imx_clk_hw_mux2("scs_sel", base + 0x14, 24, 4, scs_sels, ARRAY_SIZE(scs_sels));
+	clks[IMX7ULP_CLK_HSRUN_SYS_SEL] = imx_clk_hw_mux2("hsrun_scs_sel", base + 0x1c, 24, 4, scs_sels, ARRAY_SIZE(scs_sels));
 	clks[IMX7ULP_CLK_NIC_SEL]	= imx_clk_hw_mux2("nic_sel", base + 0x40, 28, 1, nic_sels, ARRAY_SIZE(nic_sels));
 	clks[IMX7ULP_CLK_DDR_SEL]	= imx_clk_hw_mux_flags("ddr_sel", base + 0x30, 24, 1, ddr_sels, ARRAY_SIZE(ddr_sels), CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE);
 
-	clks[IMX7ULP_CLK_CORE_DIV]	= imx_clk_hw_divider_flags("divcore",	"scs_sel",  base + 0x14, 16, 4, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL);
+	clks[IMX7ULP_CLK_CORE_DIV]	= imx_clk_hw_divider_flags("divcore",	"scs_sel",  base + 0x14, 16, 4, CLK_SET_RATE_PARENT);
+	clks[IMX7ULP_CLK_HSRUN_CORE_DIV] = imx_clk_hw_divider_flags("hsrun_divcore", "hsrun_scs_sel", base + 0x1c, 16, 4, CLK_SET_RATE_PARENT);
 
 	clks[IMX7ULP_CLK_DDR_DIV]	= imx_clk_divider_gate("ddr_clk", "ddr_sel", CLK_SET_RATE_PARENT | CLK_IS_CRITICAL, base + 0x30, 0, 3,
 							       0, ulp_div_table, &imx_ccm_lock);
@@ -218,3 +221,29 @@ static void __init imx7ulp_clk_pcc3_init(struct device_node *np)
 	of_clk_add_hw_provider(np, of_clk_hw_onecell_get, clk_data);
 }
 CLK_OF_DECLARE(imx7ulp_clk_pcc3, "fsl,imx7ulp-pcc3", imx7ulp_clk_pcc3_init);
+
+static void __init imx7ulp_clk_smc1_init(struct device_node *np)
+{
+	struct clk_hw_onecell_data *clk_data;
+	struct clk_hw **clks;
+	void __iomem *base;
+
+	clk_data = kzalloc(sizeof(*clk_data) + sizeof(*clk_data->hws) *
+			   IMX7ULP_CLK_SMC1_END, GFP_KERNEL);
+	if (!clk_data)
+		return;
+
+	clk_data->num = IMX7ULP_CLK_SMC1_END;
+	clks = clk_data->hws;
+
+	/* SMC1 */
+	base = of_iomap(np, 0);
+	WARN_ON(!base);
+
+	clks[IMX7ULP_CLK_ARM] = imx_clk_hw_mux_flags("arm", base + 0x10, 8, 2, arm_sels, ARRAY_SIZE(arm_sels), CLK_IS_CRITICAL);
+
+	imx_check_clk_hws(clks, clk_data->num);
+
+	of_clk_add_hw_provider(np, of_clk_hw_onecell_get, clk_data);
+}
+CLK_OF_DECLARE(imx7ulp_clk_smc1, "fsl,imx7ulp-smc1", imx7ulp_clk_smc1_init);
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/3] ARM: dts: imx7ulp: add HSRUN mode clocks
  2018-12-07 10:03 [PATCH 1/3] dt-bindings: clock: imx7ulp: add HSRUN mode related clocks Anson Huang
  2018-12-07 10:03 ` [PATCH 2/3] clk: imx: imx7ulp: add arm hsrun mode clocks support Anson Huang
@ 2018-12-07 10:03 ` Anson Huang
  2019-01-10  6:56   ` Shawn Guo
  2018-12-14 22:04 ` [PATCH 1/3] dt-bindings: clock: imx7ulp: add HSRUN mode related clocks Stephen Boyd
  2 siblings, 1 reply; 6+ messages in thread
From: Anson Huang @ 2018-12-07 10:03 UTC (permalink / raw)
  To: shawnguo, s.hauer, kernel, Fabio Estevam, robh+dt, mark.rutland,
	mturquette, sboyd, Aisheng Dong, linux-arm-kernel, devicetree,
	linux-kernel, linux-clk
  Cc: dl-linux-imx

i.MX7ULP can switch CPU between RUN mode and HSRUN mode
by programming SMC1 register, different clock sources
will be used for CPU in different modes, so SMC1 can be
abstracted as a clock controller for CPU clock switch,
this patch adds support for it.

Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
---
This patch is based on top of path series: [V5,1/6] dt-bindings: fsl: add compatible for imx7ulp evk,
https://patchwork.kernel.org/patch/10677263/
---
 arch/arm/boot/dts/imx7ulp.dtsi | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/arch/arm/boot/dts/imx7ulp.dtsi b/arch/arm/boot/dts/imx7ulp.dtsi
index 931b275..b86daf7 100644
--- a/arch/arm/boot/dts/imx7ulp.dtsi
+++ b/arch/arm/boot/dts/imx7ulp.dtsi
@@ -199,9 +199,13 @@
 			assigned-clock-parents = <&scg1 IMX7ULP_CLK_SOSC_BUS_CLK>;
 		};
 
-		smc1: smc1@40410000 {
+		smc1: clock-controller@40410000 {
 			compatible = "fsl,imx7ulp-smc1";
 			reg = <0x40410000 0x1000>;
+			#clock-cells = <1>;
+			clocks = <&scg1 IMX7ULP_CLK_CORE_DIV>,
+				 <&scg1 IMX7ULP_CLK_HSRUN_CORE_DIV>;
+			clock-names = "divcore", "hsrun_divcore";
 		};
 
 		pcc3: clock-controller@40b30000 {
-- 
2.7.4


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 1/3] dt-bindings: clock: imx7ulp: add HSRUN mode related clocks
  2018-12-07 10:03 [PATCH 1/3] dt-bindings: clock: imx7ulp: add HSRUN mode related clocks Anson Huang
  2018-12-07 10:03 ` [PATCH 2/3] clk: imx: imx7ulp: add arm hsrun mode clocks support Anson Huang
  2018-12-07 10:03 ` [PATCH 3/3] ARM: dts: imx7ulp: add HSRUN mode clocks Anson Huang
@ 2018-12-14 22:04 ` Stephen Boyd
  2 siblings, 0 replies; 6+ messages in thread
From: Stephen Boyd @ 2018-12-14 22:04 UTC (permalink / raw)
  To: devicetree, kernel, linux-arm-kernel, linux-clk, linux-kernel,
	mark.rutland, mturquette, robh+dt, s.hauer, shawnguo,
	Aisheng Dong, Anson Huang, Fabio Estevam
  Cc: dl-linux-imx

Quoting Anson Huang (2018-12-07 02:03:29)
> There are HSRUN mode clock mux and divider in SCG1 module,
> and SMC1 can control i.MX7ULP CPU to run in RUN mode or
> HSRUN mode, the mode switch bits are actually a clock mux,
> add these clocks for clock driver and dtb to use.
> 
> Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
> ---

Applied to clk-next


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 2/3] clk: imx: imx7ulp: add arm hsrun mode clocks support
  2018-12-07 10:03 ` [PATCH 2/3] clk: imx: imx7ulp: add arm hsrun mode clocks support Anson Huang
@ 2018-12-14 22:04   ` Stephen Boyd
  0 siblings, 0 replies; 6+ messages in thread
From: Stephen Boyd @ 2018-12-14 22:04 UTC (permalink / raw)
  To: devicetree, kernel, linux-arm-kernel, linux-clk, linux-kernel,
	mark.rutland, mturquette, robh+dt, s.hauer, shawnguo,
	Aisheng Dong, Anson Huang, Fabio Estevam
  Cc: dl-linux-imx

Quoting Anson Huang (2018-12-07 02:03:34)
> i.MX7ULP has a Cortex-A7 CPU which can run in RUN mode
> or HSRUN mode, it is controlled in SMC1 module. The RUN
> mode and HSRUN mode will use different clock source for
> ARM, "divcore" for RUN mode and "hsrun_divcore" for HSRUN
> mode, so the control bits in SMC1 module can be abstracted
> as a HW clock mux, this patch adds HSRUN mode related
> clocks in SCG1 module and adds "arm" clock in SMC1 module
> to support RUN mode and HSRUN mode switch.
> 
> Latest clock tree in RUN mode as below:
> 
>  firc                                 0        0        0    48000000          0     0  50000
>     firc_bus_clk                      0        0        0    48000000          0     0  50000
>     hsrun_scs_sel                     0        0        0    48000000          0     0  50000
>        hsrun_divcore                  0        0        0    48000000          0     0  50000
> 
>  sosc                                 3        3        3    24000000          0     0  50000
>     spll_pre_sel                      1        1        1    24000000          0     0  50000
>        spll_pre_div                   1        1        2    24000000          0     0  50000
>           spll                        1        1        2   528000000          0     0  50000
>              spll_pfd0                1        1        1   500210526          0     0  50000
>                 spll_pfd_sel          1        1        0   500210526          0     0  50000
>                    spll_sel           1        1        0   500210526          0     0  50000
>                       scs_sel         1        1        0   500210526          0     0  50000
>                          divcore      1        1        0   500210526          0     0  50000
>                             arm       1        1        0   500210526          0     0  50000
> 
> Signed-off-by: Anson Huang <Anson.Huang@nxp.com>
> ---

Applied to clk-next


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 3/3] ARM: dts: imx7ulp: add HSRUN mode clocks
  2018-12-07 10:03 ` [PATCH 3/3] ARM: dts: imx7ulp: add HSRUN mode clocks Anson Huang
@ 2019-01-10  6:56   ` Shawn Guo
  0 siblings, 0 replies; 6+ messages in thread
From: Shawn Guo @ 2019-01-10  6:56 UTC (permalink / raw)
  To: Anson Huang
  Cc: s.hauer, kernel, Fabio Estevam, robh+dt, mark.rutland,
	mturquette, sboyd, Aisheng Dong, linux-arm-kernel, devicetree,
	linux-kernel, linux-clk, dl-linux-imx

On Fri, Dec 07, 2018 at 10:03:39AM +0000, Anson Huang wrote:
> i.MX7ULP can switch CPU between RUN mode and HSRUN mode
> by programming SMC1 register, different clock sources
> will be used for CPU in different modes, so SMC1 can be
> abstracted as a clock controller for CPU clock switch,
> this patch adds support for it.
> 
> Signed-off-by: Anson Huang <Anson.Huang@nxp.com>

Applied, thanks.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2019-01-10  6:56 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-12-07 10:03 [PATCH 1/3] dt-bindings: clock: imx7ulp: add HSRUN mode related clocks Anson Huang
2018-12-07 10:03 ` [PATCH 2/3] clk: imx: imx7ulp: add arm hsrun mode clocks support Anson Huang
2018-12-14 22:04   ` Stephen Boyd
2018-12-07 10:03 ` [PATCH 3/3] ARM: dts: imx7ulp: add HSRUN mode clocks Anson Huang
2019-01-10  6:56   ` Shawn Guo
2018-12-14 22:04 ` [PATCH 1/3] dt-bindings: clock: imx7ulp: add HSRUN mode related clocks Stephen Boyd

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).