linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/4] ARM: imx: shared gate support for i.MX clk_gate2 clock
@ 2014-04-19  5:01 Shawn Guo
  2014-04-19  5:01 ` [PATCH 1/4] ARM: imx: define struct clk_gate2 on our own Shawn Guo
                   ` (4 more replies)
  0 siblings, 5 replies; 8+ messages in thread
From: Shawn Guo @ 2014-04-19  5:01 UTC (permalink / raw)
  To: linux-arm-kernel

We're constantly running into the situation on i.MX that multiple clocks
share the single gate.  Since we already have i.MX specific gate clock
implementation due to 2-bits gate, the series takes Gerhard's approach
to add shared gate support for i.MX clk_gate2 clock.

Shawn Guo (4):
  ARM: imx: define struct clk_gate2 on our own
  ARM: imx: lock is always valid for clk_gate2
  ARM: imx: add shared gate clock support
  ARM: imx6q: add the missing esai_ahb clock

 .../devicetree/bindings/clock/imx6q-clock.txt      |  1 +
 arch/arm/mach-imx/clk-gate2.c                      | 47 ++++++++++++++--------
 arch/arm/mach-imx/clk-imx6q.c                      |  7 +++-
 arch/arm/mach-imx/clk.h                            | 13 +++++-
 4 files changed, 48 insertions(+), 20 deletions(-)

-- 
1.8.3.2

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

* [PATCH 1/4] ARM: imx: define struct clk_gate2 on our own
  2014-04-19  5:01 [PATCH 0/4] ARM: imx: shared gate support for i.MX clk_gate2 clock Shawn Guo
@ 2014-04-19  5:01 ` Shawn Guo
  2014-04-19  5:01 ` [PATCH 2/4] ARM: imx: lock is always valid for clk_gate2 Shawn Guo
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Shawn Guo @ 2014-04-19  5:01 UTC (permalink / raw)
  To: linux-arm-kernel

The imx clk-gate2 driver implements an i.MX specific gate clock, which
has two bits controlling the gate states.  While this is a completely
separate gate driver from the common clk-gate one, it reuses the common
clk_gate structure.  Such reusing makes the extending of clk_gate2
clumsy.  Let's define struct clk_gate2 on our own to make the driver
independent of the common clk-gate one, and ease the clk_gate2 extending
at a later time.

Signed-off-by: Shawn Guo <shawn.guo@freescale.com>
---
 arch/arm/mach-imx/clk-gate2.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/arch/arm/mach-imx/clk-gate2.c b/arch/arm/mach-imx/clk-gate2.c
index a2ecc00..7e98ccb 100644
--- a/arch/arm/mach-imx/clk-gate2.c
+++ b/arch/arm/mach-imx/clk-gate2.c
@@ -27,11 +27,19 @@
  * parent - fixed parent.  No clk_set_parent support
  */
 
-#define to_clk_gate(_hw) container_of(_hw, struct clk_gate, hw)
+struct clk_gate2 {
+	struct clk_hw hw;
+	void __iomem	*reg;
+	u8		bit_idx;
+	u8		flags;
+	spinlock_t	*lock;
+};
+
+#define to_clk_gate2(_hw) container_of(_hw, struct clk_gate2, hw)
 
 static int clk_gate2_enable(struct clk_hw *hw)
 {
-	struct clk_gate *gate = to_clk_gate(hw);
+	struct clk_gate2 *gate = to_clk_gate2(hw);
 	u32 reg;
 	unsigned long flags = 0;
 
@@ -50,7 +58,7 @@ static int clk_gate2_enable(struct clk_hw *hw)
 
 static void clk_gate2_disable(struct clk_hw *hw)
 {
-	struct clk_gate *gate = to_clk_gate(hw);
+	struct clk_gate2 *gate = to_clk_gate2(hw);
 	u32 reg;
 	unsigned long flags = 0;
 
@@ -68,7 +76,7 @@ static void clk_gate2_disable(struct clk_hw *hw)
 static int clk_gate2_is_enabled(struct clk_hw *hw)
 {
 	u32 reg;
-	struct clk_gate *gate = to_clk_gate(hw);
+	struct clk_gate2 *gate = to_clk_gate2(hw);
 
 	reg = readl(gate->reg);
 
@@ -89,15 +97,15 @@ struct clk *clk_register_gate2(struct device *dev, const char *name,
 		void __iomem *reg, u8 bit_idx,
 		u8 clk_gate2_flags, spinlock_t *lock)
 {
-	struct clk_gate *gate;
+	struct clk_gate2 *gate;
 	struct clk *clk;
 	struct clk_init_data init;
 
-	gate = kzalloc(sizeof(struct clk_gate), GFP_KERNEL);
+	gate = kzalloc(sizeof(struct clk_gate2), GFP_KERNEL);
 	if (!gate)
 		return ERR_PTR(-ENOMEM);
 
-	/* struct clk_gate assignments */
+	/* struct clk_gate2 assignments */
 	gate->reg = reg;
 	gate->bit_idx = bit_idx;
 	gate->flags = clk_gate2_flags;
-- 
1.8.3.2

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

* [PATCH 2/4] ARM: imx: lock is always valid for clk_gate2
  2014-04-19  5:01 [PATCH 0/4] ARM: imx: shared gate support for i.MX clk_gate2 clock Shawn Guo
  2014-04-19  5:01 ` [PATCH 1/4] ARM: imx: define struct clk_gate2 on our own Shawn Guo
@ 2014-04-19  5:01 ` Shawn Guo
  2014-04-19  5:01 ` [PATCH 3/4] ARM: imx: add shared gate clock support Shawn Guo
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Shawn Guo @ 2014-04-19  5:01 UTC (permalink / raw)
  To: linux-arm-kernel

The imx specific clk_gate2 always has a valid lock with the clock.  So
the validation on gate->lock is not really needed.  Remove it.

Signed-off-by: Shawn Guo <shawn.guo@freescale.com>
---
 arch/arm/mach-imx/clk-gate2.c | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/arch/arm/mach-imx/clk-gate2.c b/arch/arm/mach-imx/clk-gate2.c
index 7e98ccb..0803df9 100644
--- a/arch/arm/mach-imx/clk-gate2.c
+++ b/arch/arm/mach-imx/clk-gate2.c
@@ -43,15 +43,13 @@ static int clk_gate2_enable(struct clk_hw *hw)
 	u32 reg;
 	unsigned long flags = 0;
 
-	if (gate->lock)
-		spin_lock_irqsave(gate->lock, flags);
+	spin_lock_irqsave(gate->lock, flags);
 
 	reg = readl(gate->reg);
 	reg |= 3 << gate->bit_idx;
 	writel(reg, gate->reg);
 
-	if (gate->lock)
-		spin_unlock_irqrestore(gate->lock, flags);
+	spin_unlock_irqrestore(gate->lock, flags);
 
 	return 0;
 }
@@ -62,15 +60,13 @@ static void clk_gate2_disable(struct clk_hw *hw)
 	u32 reg;
 	unsigned long flags = 0;
 
-	if (gate->lock)
-		spin_lock_irqsave(gate->lock, flags);
+	spin_lock_irqsave(gate->lock, flags);
 
 	reg = readl(gate->reg);
 	reg &= ~(3 << gate->bit_idx);
 	writel(reg, gate->reg);
 
-	if (gate->lock)
-		spin_unlock_irqrestore(gate->lock, flags);
+	spin_unlock_irqrestore(gate->lock, flags);
 }
 
 static int clk_gate2_is_enabled(struct clk_hw *hw)
-- 
1.8.3.2

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

* [PATCH 3/4] ARM: imx: add shared gate clock support
  2014-04-19  5:01 [PATCH 0/4] ARM: imx: shared gate support for i.MX clk_gate2 clock Shawn Guo
  2014-04-19  5:01 ` [PATCH 1/4] ARM: imx: define struct clk_gate2 on our own Shawn Guo
  2014-04-19  5:01 ` [PATCH 2/4] ARM: imx: lock is always valid for clk_gate2 Shawn Guo
@ 2014-04-19  5:01 ` Shawn Guo
  2014-04-19 11:09   ` Nicolin Chen
  2014-04-19  5:01 ` [PATCH 4/4] ARM: imx6q: add the missing esai_ahb clock Shawn Guo
  2014-04-22  2:54 ` [PATCH 0/4] ARM: imx: shared gate support for i.MX clk_gate2 clock Nicolin Chen
  4 siblings, 1 reply; 8+ messages in thread
From: Shawn Guo @ 2014-04-19  5:01 UTC (permalink / raw)
  To: linux-arm-kernel

It's quite common on i.MX that one gate bit controls the gating of
multiple clocks, i.e. this is a shared gate.  The patch adds the
function imx_clk_gate2_shared() for such case.  The clocks controlled
by the same gate bits should call this function with a pointer to a
single share count variable, so that the gate bits will only be
operated on the first enabling and the last disabling of these shared
gate clocks.

Thanks to Gerhard Sittig <gsi@denx.de> for this idea.

Signed-off-by: Shawn Guo <shawn.guo@freescale.com>
---
 arch/arm/mach-imx/clk-gate2.c | 13 ++++++++++++-
 arch/arm/mach-imx/clk.h       | 13 +++++++++++--
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/arch/arm/mach-imx/clk-gate2.c b/arch/arm/mach-imx/clk-gate2.c
index 0803df9..4ba587d 100644
--- a/arch/arm/mach-imx/clk-gate2.c
+++ b/arch/arm/mach-imx/clk-gate2.c
@@ -33,6 +33,7 @@ struct clk_gate2 {
 	u8		bit_idx;
 	u8		flags;
 	spinlock_t	*lock;
+	unsigned int	*share_count;
 };
 
 #define to_clk_gate2(_hw) container_of(_hw, struct clk_gate2, hw)
@@ -45,10 +46,14 @@ static int clk_gate2_enable(struct clk_hw *hw)
 
 	spin_lock_irqsave(gate->lock, flags);
 
+	if (gate->share_count && (*gate->share_count)++ > 0)
+		goto out;
+
 	reg = readl(gate->reg);
 	reg |= 3 << gate->bit_idx;
 	writel(reg, gate->reg);
 
+out:
 	spin_unlock_irqrestore(gate->lock, flags);
 
 	return 0;
@@ -62,10 +67,14 @@ static void clk_gate2_disable(struct clk_hw *hw)
 
 	spin_lock_irqsave(gate->lock, flags);
 
+	if (gate->share_count && --(*gate->share_count) > 0)
+		goto out;
+
 	reg = readl(gate->reg);
 	reg &= ~(3 << gate->bit_idx);
 	writel(reg, gate->reg);
 
+out:
 	spin_unlock_irqrestore(gate->lock, flags);
 }
 
@@ -91,7 +100,8 @@ static struct clk_ops clk_gate2_ops = {
 struct clk *clk_register_gate2(struct device *dev, const char *name,
 		const char *parent_name, unsigned long flags,
 		void __iomem *reg, u8 bit_idx,
-		u8 clk_gate2_flags, spinlock_t *lock)
+		u8 clk_gate2_flags, spinlock_t *lock,
+		unsigned int *share_count)
 {
 	struct clk_gate2 *gate;
 	struct clk *clk;
@@ -106,6 +116,7 @@ struct clk *clk_register_gate2(struct device *dev, const char *name,
 	gate->bit_idx = bit_idx;
 	gate->flags = clk_gate2_flags;
 	gate->lock = lock;
+	gate->share_count = share_count;
 
 	init.name = name;
 	init.ops = &clk_gate2_ops;
diff --git a/arch/arm/mach-imx/clk.h b/arch/arm/mach-imx/clk.h
index 048c5ad8..e29f6eb 100644
--- a/arch/arm/mach-imx/clk.h
+++ b/arch/arm/mach-imx/clk.h
@@ -28,7 +28,8 @@ struct clk *imx_clk_pllv3(enum imx_pllv3_type type, const char *name,
 struct clk *clk_register_gate2(struct device *dev, const char *name,
 		const char *parent_name, unsigned long flags,
 		void __iomem *reg, u8 bit_idx,
-		u8 clk_gate_flags, spinlock_t *lock);
+		u8 clk_gate_flags, spinlock_t *lock,
+		unsigned int *share_count);
 
 struct clk * imx_obtain_fixed_clock(
 			const char *name, unsigned long rate);
@@ -37,7 +38,15 @@ static inline struct clk *imx_clk_gate2(const char *name, const char *parent,
 		void __iomem *reg, u8 shift)
 {
 	return clk_register_gate2(NULL, name, parent, CLK_SET_RATE_PARENT, reg,
-			shift, 0, &imx_ccm_lock);
+			shift, 0, &imx_ccm_lock, NULL);
+}
+
+static inline struct clk *imx_clk_gate2_shared(const char *name,
+		const char *parent, void __iomem *reg, u8 shift,
+		unsigned int *share_count)
+{
+	return clk_register_gate2(NULL, name, parent, CLK_SET_RATE_PARENT, reg,
+			shift, 0, &imx_ccm_lock, share_count);
 }
 
 struct clk *imx_clk_pfd(const char *name, const char *parent_name,
-- 
1.8.3.2

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

* [PATCH 4/4] ARM: imx6q: add the missing esai_ahb clock
  2014-04-19  5:01 [PATCH 0/4] ARM: imx: shared gate support for i.MX clk_gate2 clock Shawn Guo
                   ` (2 preceding siblings ...)
  2014-04-19  5:01 ` [PATCH 3/4] ARM: imx: add shared gate clock support Shawn Guo
@ 2014-04-19  5:01 ` Shawn Guo
  2014-04-22  2:54 ` [PATCH 0/4] ARM: imx: shared gate support for i.MX clk_gate2 clock Nicolin Chen
  4 siblings, 0 replies; 8+ messages in thread
From: Shawn Guo @ 2014-04-19  5:01 UTC (permalink / raw)
  To: linux-arm-kernel

The esai_ahb clock is derived from ahb and used to provide ESAI the
capability of register accessing and FSYS clock source for I2S clocks
dividing.  The gate bits of this esai_ahb clock are shared with the
esai clock -- the baud clock, so we need to call imx_clk_gate2_shared()
for these two clocks.

Signed-off-by: Nicolin Chen <Guangyu.Chen@freescale.com>
Signed-off-by: Shawn Guo <shawn.guo@freescale.com>
---
 Documentation/devicetree/bindings/clock/imx6q-clock.txt | 1 +
 arch/arm/mach-imx/clk-imx6q.c                           | 7 +++++--
 2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/clock/imx6q-clock.txt b/Documentation/devicetree/bindings/clock/imx6q-clock.txt
index 6aab72b..90ec91f 100644
--- a/Documentation/devicetree/bindings/clock/imx6q-clock.txt
+++ b/Documentation/devicetree/bindings/clock/imx6q-clock.txt
@@ -220,6 +220,7 @@ clocks and IDs.
 	lvds2_sel		205
 	lvds1_gate		206
 	lvds2_gate		207
+	esai_ahb		208
 
 Examples:
 
diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c
index 8440878..8e795de 100644
--- a/arch/arm/mach-imx/clk-imx6q.c
+++ b/arch/arm/mach-imx/clk-imx6q.c
@@ -107,7 +107,7 @@ enum mx6q_clks {
 	sata_ref, sata_ref_100m, pcie_ref, pcie_ref_125m, enet_ref, usbphy1_gate,
 	usbphy2_gate, pll4_post_div, pll5_post_div, pll5_video_div, eim_slow,
 	spdif, cko2_sel, cko2_podf, cko2, cko, vdoa, pll4_audio_div,
-	lvds1_sel, lvds2_sel, lvds1_gate, lvds2_gate, clk_max
+	lvds1_sel, lvds2_sel, lvds1_gate, lvds2_gate, esai_ahb, clk_max
 };
 
 static struct clk *clk[clk_max];
@@ -140,6 +140,8 @@ static struct clk_div_table video_div_table[] = {
 	{ /* sentinel */ }
 };
 
+static unsigned int share_count_esai;
+
 static void __init imx6q_clocks_init(struct device_node *ccm_node)
 {
 	struct device_node *np;
@@ -358,7 +360,8 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)
 	else
 		clk[ecspi5] = imx_clk_gate2("ecspi5",      "ecspi_root",        base + 0x6c, 8);
 	clk[enet]         = imx_clk_gate2("enet",          "ipg",               base + 0x6c, 10);
-	clk[esai]         = imx_clk_gate2("esai",          "esai_podf",         base + 0x6c, 16);
+	clk[esai]         = imx_clk_gate2_shared("esai",   "esai_podf",         base + 0x6c, 16, &share_count_esai);
+	clk[esai_ahb]     = imx_clk_gate2_shared("esai_ahb", "ahb",             base + 0x6c, 16, &share_count_esai);
 	clk[gpt_ipg]      = imx_clk_gate2("gpt_ipg",       "ipg",               base + 0x6c, 20);
 	clk[gpt_ipg_per]  = imx_clk_gate2("gpt_ipg_per",   "ipg_per",           base + 0x6c, 22);
 	if (cpu_is_imx6dl())
-- 
1.8.3.2

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

* [PATCH 3/4] ARM: imx: add shared gate clock support
  2014-04-19  5:01 ` [PATCH 3/4] ARM: imx: add shared gate clock support Shawn Guo
@ 2014-04-19 11:09   ` Nicolin Chen
  0 siblings, 0 replies; 8+ messages in thread
From: Nicolin Chen @ 2014-04-19 11:09 UTC (permalink / raw)
  To: linux-arm-kernel

On Sat, Apr 19, 2014 at 01:01:32PM +0800, Shawn Guo wrote:
> It's quite common on i.MX that one gate bit controls the gating of
> multiple clocks, i.e. this is a shared gate.  The patch adds the
> function imx_clk_gate2_shared() for such case.  The clocks controlled
> by the same gate bits should call this function with a pointer to a
> single share count variable, so that the gate bits will only be
> operated on the first enabling and the last disabling of these shared
> gate clocks.
> 
> Thanks to Gerhard Sittig <gsi@denx.de> for this idea.
> 
> Signed-off-by: Shawn Guo <shawn.guo@freescale.com>

Marvelous! It's seemly also applicable to our 3.10.y branch.
It'll be superbly helpful to both upstream and internal release.

Thank you Shawn!
Nicolin

> ---
>  arch/arm/mach-imx/clk-gate2.c | 13 ++++++++++++-
>  arch/arm/mach-imx/clk.h       | 13 +++++++++++--
>  2 files changed, 23 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/arm/mach-imx/clk-gate2.c b/arch/arm/mach-imx/clk-gate2.c
> index 0803df9..4ba587d 100644
> --- a/arch/arm/mach-imx/clk-gate2.c
> +++ b/arch/arm/mach-imx/clk-gate2.c
> @@ -33,6 +33,7 @@ struct clk_gate2 {
>  	u8		bit_idx;
>  	u8		flags;
>  	spinlock_t	*lock;
> +	unsigned int	*share_count;
>  };
>  
>  #define to_clk_gate2(_hw) container_of(_hw, struct clk_gate2, hw)
> @@ -45,10 +46,14 @@ static int clk_gate2_enable(struct clk_hw *hw)
>  
>  	spin_lock_irqsave(gate->lock, flags);
>  
> +	if (gate->share_count && (*gate->share_count)++ > 0)
> +		goto out;
> +
>  	reg = readl(gate->reg);
>  	reg |= 3 << gate->bit_idx;
>  	writel(reg, gate->reg);
>  
> +out:
>  	spin_unlock_irqrestore(gate->lock, flags);
>  
>  	return 0;
> @@ -62,10 +67,14 @@ static void clk_gate2_disable(struct clk_hw *hw)
>  
>  	spin_lock_irqsave(gate->lock, flags);
>  
> +	if (gate->share_count && --(*gate->share_count) > 0)
> +		goto out;
> +
>  	reg = readl(gate->reg);
>  	reg &= ~(3 << gate->bit_idx);
>  	writel(reg, gate->reg);
>  
> +out:
>  	spin_unlock_irqrestore(gate->lock, flags);
>  }
>  
> @@ -91,7 +100,8 @@ static struct clk_ops clk_gate2_ops = {
>  struct clk *clk_register_gate2(struct device *dev, const char *name,
>  		const char *parent_name, unsigned long flags,
>  		void __iomem *reg, u8 bit_idx,
> -		u8 clk_gate2_flags, spinlock_t *lock)
> +		u8 clk_gate2_flags, spinlock_t *lock,
> +		unsigned int *share_count)
>  {
>  	struct clk_gate2 *gate;
>  	struct clk *clk;
> @@ -106,6 +116,7 @@ struct clk *clk_register_gate2(struct device *dev, const char *name,
>  	gate->bit_idx = bit_idx;
>  	gate->flags = clk_gate2_flags;
>  	gate->lock = lock;
> +	gate->share_count = share_count;
>  
>  	init.name = name;
>  	init.ops = &clk_gate2_ops;
> diff --git a/arch/arm/mach-imx/clk.h b/arch/arm/mach-imx/clk.h
> index 048c5ad8..e29f6eb 100644
> --- a/arch/arm/mach-imx/clk.h
> +++ b/arch/arm/mach-imx/clk.h
> @@ -28,7 +28,8 @@ struct clk *imx_clk_pllv3(enum imx_pllv3_type type, const char *name,
>  struct clk *clk_register_gate2(struct device *dev, const char *name,
>  		const char *parent_name, unsigned long flags,
>  		void __iomem *reg, u8 bit_idx,
> -		u8 clk_gate_flags, spinlock_t *lock);
> +		u8 clk_gate_flags, spinlock_t *lock,
> +		unsigned int *share_count);
>  
>  struct clk * imx_obtain_fixed_clock(
>  			const char *name, unsigned long rate);
> @@ -37,7 +38,15 @@ static inline struct clk *imx_clk_gate2(const char *name, const char *parent,
>  		void __iomem *reg, u8 shift)
>  {
>  	return clk_register_gate2(NULL, name, parent, CLK_SET_RATE_PARENT, reg,
> -			shift, 0, &imx_ccm_lock);
> +			shift, 0, &imx_ccm_lock, NULL);
> +}
> +
> +static inline struct clk *imx_clk_gate2_shared(const char *name,
> +		const char *parent, void __iomem *reg, u8 shift,
> +		unsigned int *share_count)
> +{
> +	return clk_register_gate2(NULL, name, parent, CLK_SET_RATE_PARENT, reg,
> +			shift, 0, &imx_ccm_lock, share_count);
>  }
>  
>  struct clk *imx_clk_pfd(const char *name, const char *parent_name,
> -- 
> 1.8.3.2
> 
> 

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

* [PATCH 0/4] ARM: imx: shared gate support for i.MX clk_gate2 clock
  2014-04-19  5:01 [PATCH 0/4] ARM: imx: shared gate support for i.MX clk_gate2 clock Shawn Guo
                   ` (3 preceding siblings ...)
  2014-04-19  5:01 ` [PATCH 4/4] ARM: imx6q: add the missing esai_ahb clock Shawn Guo
@ 2014-04-22  2:54 ` Nicolin Chen
  2014-04-23  6:57   ` Shawn Guo
  4 siblings, 1 reply; 8+ messages in thread
From: Nicolin Chen @ 2014-04-22  2:54 UTC (permalink / raw)
  To: linux-arm-kernel

Hi all,

On Sat, Apr 19, 2014 at 01:01:29PM +0800, Shawn Guo wrote:
> We're constantly running into the situation on i.MX that multiple clocks
> share the single gate.  Since we already have i.MX specific gate clock
> implementation due to 2-bits gate, the series takes Gerhard's approach
> to add shared gate support for i.MX clk_gate2 clock.
> 
> Shawn Guo (4):
>   ARM: imx: define struct clk_gate2 on our own
>   ARM: imx: lock is always valid for clk_gate2
>   ARM: imx: add shared gate clock support
>   ARM: imx6q: add the missing esai_ahb clock

I've simply tested these patches on both for-next and 3.10.y baseline
and it works fine. Hope we can apply them soon.

Thank you,
Nicolin

> 
>  .../devicetree/bindings/clock/imx6q-clock.txt      |  1 +
>  arch/arm/mach-imx/clk-gate2.c                      | 47 ++++++++++++++--------
>  arch/arm/mach-imx/clk-imx6q.c                      |  7 +++-
>  arch/arm/mach-imx/clk.h                            | 13 +++++-
>  4 files changed, 48 insertions(+), 20 deletions(-)
> 
> -- 
> 1.8.3.2
> 
> 

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

* [PATCH 0/4] ARM: imx: shared gate support for i.MX clk_gate2 clock
  2014-04-22  2:54 ` [PATCH 0/4] ARM: imx: shared gate support for i.MX clk_gate2 clock Nicolin Chen
@ 2014-04-23  6:57   ` Shawn Guo
  0 siblings, 0 replies; 8+ messages in thread
From: Shawn Guo @ 2014-04-23  6:57 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, Apr 22, 2014 at 10:54:11AM +0800, Nicolin Chen wrote:
> Hi all,
> 
> On Sat, Apr 19, 2014 at 01:01:29PM +0800, Shawn Guo wrote:
> > We're constantly running into the situation on i.MX that multiple clocks
> > share the single gate.  Since we already have i.MX specific gate clock
> > implementation due to 2-bits gate, the series takes Gerhard's approach
> > to add shared gate support for i.MX clk_gate2 clock.
> > 
> > Shawn Guo (4):
> >   ARM: imx: define struct clk_gate2 on our own
> >   ARM: imx: lock is always valid for clk_gate2
> >   ARM: imx: add shared gate clock support
> >   ARM: imx6q: add the missing esai_ahb clock
> 
> I've simply tested these patches on both for-next and 3.10.y baseline
> and it works fine. Hope we can apply them soon.

Thanks for testing, Nicolin.  I just applied the series, and will get
it into linux-next for wider testing soon.

Shawn

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

end of thread, other threads:[~2014-04-23  6:57 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-04-19  5:01 [PATCH 0/4] ARM: imx: shared gate support for i.MX clk_gate2 clock Shawn Guo
2014-04-19  5:01 ` [PATCH 1/4] ARM: imx: define struct clk_gate2 on our own Shawn Guo
2014-04-19  5:01 ` [PATCH 2/4] ARM: imx: lock is always valid for clk_gate2 Shawn Guo
2014-04-19  5:01 ` [PATCH 3/4] ARM: imx: add shared gate clock support Shawn Guo
2014-04-19 11:09   ` Nicolin Chen
2014-04-19  5:01 ` [PATCH 4/4] ARM: imx6q: add the missing esai_ahb clock Shawn Guo
2014-04-22  2:54 ` [PATCH 0/4] ARM: imx: shared gate support for i.MX clk_gate2 clock Nicolin Chen
2014-04-23  6:57   ` Shawn Guo

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