linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] Add EIM support for i.MX6sl
@ 2015-10-20 23:40 Peter S. Housel
  2015-10-20 23:40 ` [PATCH 1/2] ARM: imx6sl: Add EIM clock to clock tree Peter S. Housel
  2015-10-20 23:41 ` [PATCH 2/2] ARM: dts: imx: Add EIM configuration for i.MX6sl Peter S. Housel
  0 siblings, 2 replies; 4+ messages in thread
From: Peter S. Housel @ 2015-10-20 23:40 UTC (permalink / raw)
  To: linux-arm-kernel

These patches add missing support for the EIM block on the
i.MX6sl. With these changes, I am able to access CFI NOR flash
attached to an i.MX6SoloLite.

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

* [PATCH 1/2] ARM: imx6sl: Add EIM clock to clock tree
  2015-10-20 23:40 [PATCH 0/2] Add EIM support for i.MX6sl Peter S. Housel
@ 2015-10-20 23:40 ` Peter S. Housel
  2015-11-23  5:20   ` Shawn Guo
  2015-10-20 23:41 ` [PATCH 2/2] ARM: dts: imx: Add EIM configuration for i.MX6sl Peter S. Housel
  1 sibling, 1 reply; 4+ messages in thread
From: Peter S. Housel @ 2015-10-20 23:40 UTC (permalink / raw)
  To: linux-arm-kernel

Add missing clock tree entries for the clock that drives the External
Interface Module (EIM) as implemented in the i.MX6sl.

Signed-off-by: Peter S. Housel <housel@acm.org>
---
 drivers/clk/imx/clk-imx6sl.c             | 6 +++++-
 include/dt-bindings/clock/imx6sl-clock.h | 5 ++++-
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/clk/imx/clk-imx6sl.c b/drivers/clk/imx/clk-imx6sl.c
index 1be6230..497ade3 100644
--- a/drivers/clk/imx/clk-imx6sl.c
+++ b/drivers/clk/imx/clk-imx6sl.c
@@ -44,6 +44,7 @@ static const char *periph_sels[]	= { "pre_periph_sel", "periph_clk2_podf", };
 static const char *periph2_sels[]	= { "pre_periph2_sel", "periph2_clk2_podf", };
 static const char *csi_sels[]		= { "osc", "pll2_pfd2", "pll3_120m", "pll3_pfd1", };
 static const char *lcdif_axi_sels[]	= { "pll2_bus", "pll2_pfd2", "pll3_usb_otg", "pll3_pfd1", };
+static const char *eim_slow_sels[]      = { "ocram_podf", "pll3_usb_otg", "pll2_pfd2", "pll2_pfd0", };
 static const char *usdhc_sels[]		= { "pll2_pfd2", "pll2_pfd0", };
 static const char *ssi_sels[]		= { "pll3_pfd2", "pll3_pfd3", "pll4_audio_div", "dummy", };
 static const char *perclk_sels[]	= { "ipg", "osc", };
@@ -60,7 +61,7 @@ static const char *lvds_sels[]		= {
 	"pll1_sys", "pll2_bus", "pll2_pfd0", "pll2_pfd1", "pll2_pfd2", "dummy", "pll4_audio", "pll5_video",
 	"dummy", "enet_ref", "dummy", "dummy", "pll3_usb_otg", "pll7_usb_host", "pll3_pfd0", "pll3_pfd1",
 	"pll3_pfd2", "pll3_pfd3", "osc", "dummy", "dummy", "dummy", "dummy", "dummy",
-	 "dummy", "dummy", "dummy", "dummy", "dummy", "dummy", "dummy", "dummy",
+	 "dummy", "dummy", "dummy", "eim_slow_podf", "dummy", "dummy", "dummy", "dummy",
 };
 static const char *pll_bypass_src_sels[] = { "osc", "lvds1_in", };
 static const char *pll1_bypass_sels[]	= { "pll1", "pll1_bypass_src", };
@@ -305,6 +306,7 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node)
 	clks[IMX6SL_CLK_PERIPH_CLK2_SEL]  = imx_clk_mux("periph_clk2_sel",  base + 0x18, 12, 2, periph_clk2_sels,  ARRAY_SIZE(periph_clk2_sels));
 	clks[IMX6SL_CLK_CSI_SEL]          = imx_clk_mux("csi_sel",          base + 0x3c, 9,  2, csi_sels,          ARRAY_SIZE(csi_sels));
 	clks[IMX6SL_CLK_LCDIF_AXI_SEL]    = imx_clk_mux("lcdif_axi_sel",    base + 0x3c, 14, 2, lcdif_axi_sels,    ARRAY_SIZE(lcdif_axi_sels));
+	clks[IMX6SL_CLK_EIM_SLOW_SEL]     = imx_clk_fixup_mux("eim_slow_sel", base + 0x1c, 29, 2, eim_slow_sels,   ARRAY_SIZE(eim_slow_sels), imx_cscmr1_fixup);
 	clks[IMX6SL_CLK_USDHC1_SEL]       = imx_clk_fixup_mux("usdhc1_sel", base + 0x1c, 16, 1, usdhc_sels,        ARRAY_SIZE(usdhc_sels),  imx_cscmr1_fixup);
 	clks[IMX6SL_CLK_USDHC2_SEL]       = imx_clk_fixup_mux("usdhc2_sel", base + 0x1c, 17, 1, usdhc_sels,        ARRAY_SIZE(usdhc_sels),  imx_cscmr1_fixup);
 	clks[IMX6SL_CLK_USDHC3_SEL]       = imx_clk_fixup_mux("usdhc3_sel", base + 0x1c, 18, 1, usdhc_sels,        ARRAY_SIZE(usdhc_sels),  imx_cscmr1_fixup);
@@ -353,6 +355,7 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node)
 	clks[IMX6SL_CLK_GPU2D_PODF]        = imx_clk_divider("gpu2d_podf",        "gpu2d_sel",         base + 0x18, 29, 3);
 	clks[IMX6SL_CLK_LCDIF_PIX_PRED]    = imx_clk_divider("lcdif_pix_pred",    "lcdif_pix_sel",     base + 0x38, 3,  3);
 	clks[IMX6SL_CLK_EPDC_PIX_PRED]     = imx_clk_divider("epdc_pix_pred",     "epdc_pix_sel",      base + 0x38, 12, 3);
+	clks[IMX6SL_CLK_EIM_SLOW_PODF]     = imx_clk_fixup_divider("eim_slow_podf", "eim_slow_sel",    base + 0x1c, 23, 3, imx_cscmr1_fixup);
 	clks[IMX6SL_CLK_LCDIF_PIX_PODF]    = imx_clk_fixup_divider("lcdif_pix_podf", "lcdif_pix_pred", base + 0x1c, 20, 3, imx_cscmr1_fixup);
 	clks[IMX6SL_CLK_EPDC_PIX_PODF]     = imx_clk_divider("epdc_pix_podf",     "epdc_pix_pred",     base + 0x18, 23, 3);
 	clks[IMX6SL_CLK_SPDIF0_PRED]       = imx_clk_divider("spdif0_pred",       "spdif0_sel",        base + 0x30, 25, 3);
@@ -413,6 +416,7 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node)
 	clks[IMX6SL_CLK_USDHC2]       = imx_clk_gate2("usdhc2",       "usdhc2_podf",       base + 0x80, 4);
 	clks[IMX6SL_CLK_USDHC3]       = imx_clk_gate2("usdhc3",       "usdhc3_podf",       base + 0x80, 6);
 	clks[IMX6SL_CLK_USDHC4]       = imx_clk_gate2("usdhc4",       "usdhc4_podf",       base + 0x80, 8);
+	clks[IMX6SL_CLK_EIM_SLOW]     = imx_clk_gate2("eim_slow",     "eim_slow_podf",     base + 0x80, 10);
 
 	imx_check_clocks(clks, ARRAY_SIZE(clks));
 
diff --git a/include/dt-bindings/clock/imx6sl-clock.h b/include/dt-bindings/clock/imx6sl-clock.h
index e14573e..cf51a90 100644
--- a/include/dt-bindings/clock/imx6sl-clock.h
+++ b/include/dt-bindings/clock/imx6sl-clock.h
@@ -175,6 +175,9 @@
 #define IMX6SL_CLK_SSI2_IPG		162
 #define IMX6SL_CLK_SSI3_IPG		163
 #define IMX6SL_CLK_SPDIF_GCLK		164
-#define IMX6SL_CLK_END			165
+#define IMX6SL_CLK_EIM_SLOW_SEL		165
+#define IMX6SL_CLK_EIM_SLOW_PODF	166
+#define IMX6SL_CLK_EIM_SLOW		167
+#define IMX6SL_CLK_END			168
 
 #endif /* __DT_BINDINGS_CLOCK_IMX6SL_H */
-- 
2.6.0

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

* [PATCH 2/2] ARM: dts: imx: Add EIM configuration for i.MX6sl
  2015-10-20 23:40 [PATCH 0/2] Add EIM support for i.MX6sl Peter S. Housel
  2015-10-20 23:40 ` [PATCH 1/2] ARM: imx6sl: Add EIM clock to clock tree Peter S. Housel
@ 2015-10-20 23:41 ` Peter S. Housel
  1 sibling, 0 replies; 4+ messages in thread
From: Peter S. Housel @ 2015-10-20 23:41 UTC (permalink / raw)
  To: linux-arm-kernel

Add support for the WEIM on the i.MX6sl.

Signed-off-by: Peter S. Housel <housel@acm.org>
---
 arch/arm/boot/dts/imx6sl.dtsi | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/arm/boot/dts/imx6sl.dtsi b/arch/arm/boot/dts/imx6sl.dtsi
index d8ba99f..bc206ae 100644
--- a/arch/arm/boot/dts/imx6sl.dtsi
+++ b/arch/arm/boot/dts/imx6sl.dtsi
@@ -837,8 +837,10 @@
 			};
 
 			weim: weim at 021b8000 {
+				compatible = "fsl,imx6sl-weim", "fsl,imx6q-weim";
 				reg = <0x021b8000 0x4000>;
 				interrupts = <0 14 IRQ_TYPE_LEVEL_HIGH>;
+				clocks = <&clks IMX6SL_CLK_EIM_SLOW>;
 			};
 
 			ocotp: ocotp at 021bc000 {
-- 
2.6.0

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

* [PATCH 1/2] ARM: imx6sl: Add EIM clock to clock tree
  2015-10-20 23:40 ` [PATCH 1/2] ARM: imx6sl: Add EIM clock to clock tree Peter S. Housel
@ 2015-11-23  5:20   ` Shawn Guo
  0 siblings, 0 replies; 4+ messages in thread
From: Shawn Guo @ 2015-11-23  5:20 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, Oct 20, 2015 at 04:40:59PM -0700, Peter S. Housel wrote:
> Add missing clock tree entries for the clock that drives the External
> Interface Module (EIM) as implemented in the i.MX6sl.
> 
> Signed-off-by: Peter S. Housel <housel@acm.org>
> ---
>  drivers/clk/imx/clk-imx6sl.c             | 6 +++++-

For clock patches, you need to copy the following maintainers and list.

COMMON CLK FRAMEWORK
M:      Michael Turquette <mturquette@baylibre.com>
M:      Stephen Boyd <sboyd@codeaurora.org>
L:      linux-clk at vger.kernel.org

Please resend.

Shawn

>  include/dt-bindings/clock/imx6sl-clock.h | 5 ++++-
>  2 files changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/clk/imx/clk-imx6sl.c b/drivers/clk/imx/clk-imx6sl.c
> index 1be6230..497ade3 100644
> --- a/drivers/clk/imx/clk-imx6sl.c
> +++ b/drivers/clk/imx/clk-imx6sl.c
> @@ -44,6 +44,7 @@ static const char *periph_sels[]	= { "pre_periph_sel", "periph_clk2_podf", };
>  static const char *periph2_sels[]	= { "pre_periph2_sel", "periph2_clk2_podf", };
>  static const char *csi_sels[]		= { "osc", "pll2_pfd2", "pll3_120m", "pll3_pfd1", };
>  static const char *lcdif_axi_sels[]	= { "pll2_bus", "pll2_pfd2", "pll3_usb_otg", "pll3_pfd1", };
> +static const char *eim_slow_sels[]      = { "ocram_podf", "pll3_usb_otg", "pll2_pfd2", "pll2_pfd0", };
>  static const char *usdhc_sels[]		= { "pll2_pfd2", "pll2_pfd0", };
>  static const char *ssi_sels[]		= { "pll3_pfd2", "pll3_pfd3", "pll4_audio_div", "dummy", };
>  static const char *perclk_sels[]	= { "ipg", "osc", };
> @@ -60,7 +61,7 @@ static const char *lvds_sels[]		= {
>  	"pll1_sys", "pll2_bus", "pll2_pfd0", "pll2_pfd1", "pll2_pfd2", "dummy", "pll4_audio", "pll5_video",
>  	"dummy", "enet_ref", "dummy", "dummy", "pll3_usb_otg", "pll7_usb_host", "pll3_pfd0", "pll3_pfd1",
>  	"pll3_pfd2", "pll3_pfd3", "osc", "dummy", "dummy", "dummy", "dummy", "dummy",
> -	 "dummy", "dummy", "dummy", "dummy", "dummy", "dummy", "dummy", "dummy",
> +	 "dummy", "dummy", "dummy", "eim_slow_podf", "dummy", "dummy", "dummy", "dummy",
>  };
>  static const char *pll_bypass_src_sels[] = { "osc", "lvds1_in", };
>  static const char *pll1_bypass_sels[]	= { "pll1", "pll1_bypass_src", };
> @@ -305,6 +306,7 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node)
>  	clks[IMX6SL_CLK_PERIPH_CLK2_SEL]  = imx_clk_mux("periph_clk2_sel",  base + 0x18, 12, 2, periph_clk2_sels,  ARRAY_SIZE(periph_clk2_sels));
>  	clks[IMX6SL_CLK_CSI_SEL]          = imx_clk_mux("csi_sel",          base + 0x3c, 9,  2, csi_sels,          ARRAY_SIZE(csi_sels));
>  	clks[IMX6SL_CLK_LCDIF_AXI_SEL]    = imx_clk_mux("lcdif_axi_sel",    base + 0x3c, 14, 2, lcdif_axi_sels,    ARRAY_SIZE(lcdif_axi_sels));
> +	clks[IMX6SL_CLK_EIM_SLOW_SEL]     = imx_clk_fixup_mux("eim_slow_sel", base + 0x1c, 29, 2, eim_slow_sels,   ARRAY_SIZE(eim_slow_sels), imx_cscmr1_fixup);
>  	clks[IMX6SL_CLK_USDHC1_SEL]       = imx_clk_fixup_mux("usdhc1_sel", base + 0x1c, 16, 1, usdhc_sels,        ARRAY_SIZE(usdhc_sels),  imx_cscmr1_fixup);
>  	clks[IMX6SL_CLK_USDHC2_SEL]       = imx_clk_fixup_mux("usdhc2_sel", base + 0x1c, 17, 1, usdhc_sels,        ARRAY_SIZE(usdhc_sels),  imx_cscmr1_fixup);
>  	clks[IMX6SL_CLK_USDHC3_SEL]       = imx_clk_fixup_mux("usdhc3_sel", base + 0x1c, 18, 1, usdhc_sels,        ARRAY_SIZE(usdhc_sels),  imx_cscmr1_fixup);
> @@ -353,6 +355,7 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node)
>  	clks[IMX6SL_CLK_GPU2D_PODF]        = imx_clk_divider("gpu2d_podf",        "gpu2d_sel",         base + 0x18, 29, 3);
>  	clks[IMX6SL_CLK_LCDIF_PIX_PRED]    = imx_clk_divider("lcdif_pix_pred",    "lcdif_pix_sel",     base + 0x38, 3,  3);
>  	clks[IMX6SL_CLK_EPDC_PIX_PRED]     = imx_clk_divider("epdc_pix_pred",     "epdc_pix_sel",      base + 0x38, 12, 3);
> +	clks[IMX6SL_CLK_EIM_SLOW_PODF]     = imx_clk_fixup_divider("eim_slow_podf", "eim_slow_sel",    base + 0x1c, 23, 3, imx_cscmr1_fixup);
>  	clks[IMX6SL_CLK_LCDIF_PIX_PODF]    = imx_clk_fixup_divider("lcdif_pix_podf", "lcdif_pix_pred", base + 0x1c, 20, 3, imx_cscmr1_fixup);
>  	clks[IMX6SL_CLK_EPDC_PIX_PODF]     = imx_clk_divider("epdc_pix_podf",     "epdc_pix_pred",     base + 0x18, 23, 3);
>  	clks[IMX6SL_CLK_SPDIF0_PRED]       = imx_clk_divider("spdif0_pred",       "spdif0_sel",        base + 0x30, 25, 3);
> @@ -413,6 +416,7 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node)
>  	clks[IMX6SL_CLK_USDHC2]       = imx_clk_gate2("usdhc2",       "usdhc2_podf",       base + 0x80, 4);
>  	clks[IMX6SL_CLK_USDHC3]       = imx_clk_gate2("usdhc3",       "usdhc3_podf",       base + 0x80, 6);
>  	clks[IMX6SL_CLK_USDHC4]       = imx_clk_gate2("usdhc4",       "usdhc4_podf",       base + 0x80, 8);
> +	clks[IMX6SL_CLK_EIM_SLOW]     = imx_clk_gate2("eim_slow",     "eim_slow_podf",     base + 0x80, 10);
>  
>  	imx_check_clocks(clks, ARRAY_SIZE(clks));
>  
> diff --git a/include/dt-bindings/clock/imx6sl-clock.h b/include/dt-bindings/clock/imx6sl-clock.h
> index e14573e..cf51a90 100644
> --- a/include/dt-bindings/clock/imx6sl-clock.h
> +++ b/include/dt-bindings/clock/imx6sl-clock.h
> @@ -175,6 +175,9 @@
>  #define IMX6SL_CLK_SSI2_IPG		162
>  #define IMX6SL_CLK_SSI3_IPG		163
>  #define IMX6SL_CLK_SPDIF_GCLK		164
> -#define IMX6SL_CLK_END			165
> +#define IMX6SL_CLK_EIM_SLOW_SEL		165
> +#define IMX6SL_CLK_EIM_SLOW_PODF	166
> +#define IMX6SL_CLK_EIM_SLOW		167
> +#define IMX6SL_CLK_END			168
>  
>  #endif /* __DT_BINDINGS_CLOCK_IMX6SL_H */
> -- 
> 2.6.0
> 
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

end of thread, other threads:[~2015-11-23  5:20 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-20 23:40 [PATCH 0/2] Add EIM support for i.MX6sl Peter S. Housel
2015-10-20 23:40 ` [PATCH 1/2] ARM: imx6sl: Add EIM clock to clock tree Peter S. Housel
2015-11-23  5:20   ` Shawn Guo
2015-10-20 23:41 ` [PATCH 2/2] ARM: dts: imx: Add EIM configuration for i.MX6sl Peter S. Housel

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).