All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 10/12] ASoC: mxs-saif: convert to clk_prepare/clk_unprepare
  2011-12-20 12:00 ` [PATCH 10/12] ASoC: mxs-saif: " Shawn Guo
@ 2011-12-20 11:55   ` Mark Brown
  2011-12-20 13:49   ` Marek Vasut
  1 sibling, 0 replies; 40+ messages in thread
From: Mark Brown @ 2011-12-20 11:55 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, Dec 20, 2011 at 08:00:41PM +0800, Shawn Guo wrote:
> The patch converts mxs-saif driver to clk_prepare/clk_unprepare by
> using helper functions clk_prepare_enable/clk_disable_unprepare.

Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>

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

* [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api
@ 2011-12-20 12:00 Shawn Guo
  2011-12-20 12:00 ` [PATCH 01/12] clk: add helper functions clk_prepare_enable and clk_disable_unprepare Shawn Guo
                   ` (12 more replies)
  0 siblings, 13 replies; 40+ messages in thread
From: Shawn Guo @ 2011-12-20 12:00 UTC (permalink / raw)
  To: linux-arm-kernel

The mutex locking problem on mxs platform has been reported on mailing
list for a few time.  The cause is that a mutex is being held in mxs
clock api clk_enable/clk_disable which are being called by some mxs
clock client drivers like amba-pl011 and mxs-saif in atomic context.

This series takes Russell's suggestion to:

 * Convert all mxs clock client drivers to clk_prepare/clk_unprepare.
   (I hope the series has covered all the drivers, but appreciate any
   reminding on any missing ones.)

 * Add clk_prepare/clk_unprepare for mxs clock api to contain the
   non-atomic portion of existing clk_enable/clk_disable implemention.
   (As the whole existing clk_enable/clk_disable are non-atomic,
   clk_prepare/clk_unprepare become a renaming of the existing
   clk_enable/clk_disable, and the new clk_enable/clk_disable become
   a pair of dummy functions.)

Thus, we can ensure that no mutex will be held for atomic context, and
the problem people keep reporting gets fixed with one step move toward
common clk framework while not ncessarily waiting for it.

If driver maintainers have no objection, after the review process, I
would like to send the series through arm-soc tree to ease the merge
process.

Those two patches from Richard Zhao are included here for completeness,
and they have been picked up by Sascha on imx tree.  But since imx and
mxs will both go through arm-soc, it should easy to sort out how we
should merge them.

Regards,
Shawn

Richard Zhao (2):
      clk: add helper functions clk_prepare_enable and clk_disable_unprepare
      net: fec: add clk_prepare/clk_unprepare

Shawn Guo (10):
      arm/mxs: convert platform code to clk_prepare/clk_unprepare
      dma: mxs-dma: convert to clk_prepare/clk_unprepare
      mmc: mxs-mmc: convert to clk_prepare/clk_unprepare
      mtd: gpmi-lib: convert to clk_prepare/clk_unprepare
      net: flexcan: convert to clk_prepare/clk_unprepare
      serial: mxs-auart: convert to clk_prepare/clk_unprepare
      video: mxsfb: convert to clk_prepare/clk_unprepare
      ASoC: mxs-saif: convert to clk_prepare/clk_unprepare
      clk: add config option HAVE_CLK_PREPARE into Kconfig
      arm/mxs: select HAVE_CLK_PREPARE for clock

 arch/arm/Kconfig                      |    1 +
 arch/arm/mach-mxs/clock-mx23.c        |   10 +++++-----
 arch/arm/mach-mxs/clock-mx28.c        |   10 +++++-----
 arch/arm/mach-mxs/clock.c             |   33 +++++++++++++++++++++++----------
 arch/arm/mach-mxs/mach-mx28evk.c      |    2 +-
 arch/arm/mach-mxs/system.c            |    2 +-
 arch/arm/mach-mxs/timer.c             |    2 +-
 drivers/clk/Kconfig                   |    3 +++
 drivers/dma/mxs-dma.c                 |    8 ++++----
 drivers/mmc/host/mxs-mmc.c            |   10 +++++-----
 drivers/mtd/nand/gpmi-nand/gpmi-lib.c |   12 ++++++------
 drivers/net/can/flexcan.c             |   10 +++++-----
 drivers/net/ethernet/freescale/fec.c  |   10 +++++-----
 drivers/tty/serial/mxs-auart.c        |    8 ++++----
 drivers/video/mxsfb.c                 |    8 ++++----
 include/linux/clk.h                   |   22 ++++++++++++++++++++++
 sound/soc/mxs/mxs-saif.c              |    4 ++--
 17 files changed, 97 insertions(+), 58 deletions(-)

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

* [PATCH 01/12] clk: add helper functions clk_prepare_enable and clk_disable_unprepare
  2011-12-20 12:00 [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api Shawn Guo
@ 2011-12-20 12:00 ` Shawn Guo
  2011-12-20 13:48   ` Marek Vasut
  2011-12-20 12:00 ` [PATCH 02/12] arm/mxs: convert platform code to clk_prepare/clk_unprepare Shawn Guo
                   ` (11 subsequent siblings)
  12 siblings, 1 reply; 40+ messages in thread
From: Shawn Guo @ 2011-12-20 12:00 UTC (permalink / raw)
  To: linux-arm-kernel

From: Richard Zhao <richard.zhao@linaro.org>

It's for migrating to generic clk framework API.

The helper functions  help cases clk_enable/clk_disable is used
in non-atomic context.
For example, Call clk_enable in probe and clk_disable in remove.

Signed-off-by: Richard Zhao <richard.zhao@linaro.org>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Cc: Russell King <linux@arm.linux.org.uk>
---
 include/linux/clk.h |   22 ++++++++++++++++++++++
 1 files changed, 22 insertions(+), 0 deletions(-)

diff --git a/include/linux/clk.h b/include/linux/clk.h
index 7213b52..b9d46fa 100644
--- a/include/linux/clk.h
+++ b/include/linux/clk.h
@@ -107,6 +107,28 @@ static inline void clk_unprepare(struct clk *clk)
 }
 #endif
 
+/* clk_prepare_enable helps cases using clk_enable in non-atomic context. */
+static inline int clk_prepare_enable(struct clk *clk)
+{
+	int ret;
+
+	ret = clk_prepare(clk);
+	if (ret)
+		return ret;
+	ret = clk_enable(clk);
+	if (ret)
+		clk_unprepare(clk);
+
+	return ret;
+}
+
+/* clk_disable_unprepare helps cases using clk_disable in non-atomic context. */
+static inline void clk_disable_unprepare(struct clk *clk)
+{
+	clk_disable(clk);
+	clk_unprepare(clk);
+}
+
 /**
  * clk_get_rate - obtain the current clock rate (in Hz) for a clock source.
  *		  This is only valid once the clock source has been enabled.
-- 
1.7.4.1

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

* [PATCH 02/12] arm/mxs: convert platform code to clk_prepare/clk_unprepare
  2011-12-20 12:00 [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api Shawn Guo
  2011-12-20 12:00 ` [PATCH 01/12] clk: add helper functions clk_prepare_enable and clk_disable_unprepare Shawn Guo
@ 2011-12-20 12:00 ` Shawn Guo
  2011-12-20 13:44   ` Marek Vasut
  2011-12-20 12:00 ` [PATCH 03/12] net: fec: add clk_prepare/clk_unprepare Shawn Guo
                   ` (10 subsequent siblings)
  12 siblings, 1 reply; 40+ messages in thread
From: Shawn Guo @ 2011-12-20 12:00 UTC (permalink / raw)
  To: linux-arm-kernel

The patch converts mxs platform code to clk_prepare/clk_unprepare
by using helper functions clk_prepare_enable/clk_disable_unprepare.

Signed-off-by: Richard Zhao <richard.zhao@linaro.org>
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
---
 arch/arm/mach-mxs/clock-mx23.c   |   10 +++++-----
 arch/arm/mach-mxs/clock-mx28.c   |   10 +++++-----
 arch/arm/mach-mxs/clock.c        |    2 +-
 arch/arm/mach-mxs/mach-mx28evk.c |    2 +-
 arch/arm/mach-mxs/system.c       |    2 +-
 arch/arm/mach-mxs/timer.c        |    2 +-
 6 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/arch/arm/mach-mxs/clock-mx23.c b/arch/arm/mach-mxs/clock-mx23.c
index 0163b6d..e12e112 100644
--- a/arch/arm/mach-mxs/clock-mx23.c
+++ b/arch/arm/mach-mxs/clock-mx23.c
@@ -545,11 +545,11 @@ int __init mx23_clocks_init(void)
 	 */
 	clk_set_parent(&ssp_clk, &ref_io_clk);
 
-	clk_enable(&cpu_clk);
-	clk_enable(&hbus_clk);
-	clk_enable(&xbus_clk);
-	clk_enable(&emi_clk);
-	clk_enable(&uart_clk);
+	clk_prepare_enable(&cpu_clk);
+	clk_prepare_enable(&hbus_clk);
+	clk_prepare_enable(&xbus_clk);
+	clk_prepare_enable(&emi_clk);
+	clk_prepare_enable(&uart_clk);
 
 	clkdev_add_table(lookups, ARRAY_SIZE(lookups));
 
diff --git a/arch/arm/mach-mxs/clock-mx28.c b/arch/arm/mach-mxs/clock-mx28.c
index da6e4aa..f85f1f5 100644
--- a/arch/arm/mach-mxs/clock-mx28.c
+++ b/arch/arm/mach-mxs/clock-mx28.c
@@ -775,11 +775,11 @@ int __init mx28_clocks_init(void)
 	clk_set_parent(&ssp0_clk, &ref_io0_clk);
 	clk_set_parent(&ssp1_clk, &ref_io0_clk);
 
-	clk_enable(&cpu_clk);
-	clk_enable(&hbus_clk);
-	clk_enable(&xbus_clk);
-	clk_enable(&emi_clk);
-	clk_enable(&uart_clk);
+	clk_prepare_enable(&cpu_clk);
+	clk_prepare_enable(&hbus_clk);
+	clk_prepare_enable(&xbus_clk);
+	clk_prepare_enable(&emi_clk);
+	clk_prepare_enable(&uart_clk);
 
 	clk_set_parent(&lcdif_clk, &ref_pix_clk);
 	clk_set_parent(&saif0_clk, &pll0_clk);
diff --git a/arch/arm/mach-mxs/clock.c b/arch/arm/mach-mxs/clock.c
index a7093c8..755eec0 100644
--- a/arch/arm/mach-mxs/clock.c
+++ b/arch/arm/mach-mxs/clock.c
@@ -166,7 +166,7 @@ int clk_set_parent(struct clk *clk, struct clk *parent)
 		return ret;
 
 	if (clk->usecount)
-		clk_enable(parent);
+		clk_prepare_enable(parent);
 
 	mutex_lock(&clocks_mutex);
 	ret = clk->set_parent(clk, parent);
diff --git a/arch/arm/mach-mxs/mach-mx28evk.c b/arch/arm/mach-mxs/mach-mx28evk.c
index 064ec5a..6b9e83e 100644
--- a/arch/arm/mach-mxs/mach-mx28evk.c
+++ b/arch/arm/mach-mxs/mach-mx28evk.c
@@ -228,7 +228,7 @@ static void __init mx28evk_fec_reset(void)
 	/* Enable fec phy clock */
 	clk = clk_get_sys("pll2", NULL);
 	if (!IS_ERR(clk))
-		clk_enable(clk);
+		clk_prepare_enable(clk);
 
 	/* Power up fec phy */
 	ret = gpio_request(MX28EVK_FEC_PHY_POWER, "fec-phy-power");
diff --git a/arch/arm/mach-mxs/system.c b/arch/arm/mach-mxs/system.c
index 20ec3bd..9760a12 100644
--- a/arch/arm/mach-mxs/system.c
+++ b/arch/arm/mach-mxs/system.c
@@ -66,7 +66,7 @@ static int __init mxs_arch_reset_init(void)
 
 	clk = clk_get_sys("rtc", NULL);
 	if (!IS_ERR(clk))
-		clk_enable(clk);
+		clk_prepare_enable(clk);
 
 	return 0;
 }
diff --git a/arch/arm/mach-mxs/timer.c b/arch/arm/mach-mxs/timer.c
index cace0d2..564a632 100644
--- a/arch/arm/mach-mxs/timer.c
+++ b/arch/arm/mach-mxs/timer.c
@@ -245,7 +245,7 @@ static int __init mxs_clocksource_init(struct clk *timer_clk)
 
 void __init mxs_timer_init(struct clk *timer_clk, int irq)
 {
-	clk_enable(timer_clk);
+	clk_prepare_enable(timer_clk);
 
 	/*
 	 * Initialize timers to a known state
-- 
1.7.4.1

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

* [PATCH 03/12] net: fec: add clk_prepare/clk_unprepare
  2011-12-20 12:00 [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api Shawn Guo
  2011-12-20 12:00 ` [PATCH 01/12] clk: add helper functions clk_prepare_enable and clk_disable_unprepare Shawn Guo
  2011-12-20 12:00 ` [PATCH 02/12] arm/mxs: convert platform code to clk_prepare/clk_unprepare Shawn Guo
@ 2011-12-20 12:00 ` Shawn Guo
  2011-12-20 13:45   ` Marek Vasut
  2011-12-20 12:00 ` [PATCH 04/12] dma: mxs-dma: convert to clk_prepare/clk_unprepare Shawn Guo
                   ` (9 subsequent siblings)
  12 siblings, 1 reply; 40+ messages in thread
From: Shawn Guo @ 2011-12-20 12:00 UTC (permalink / raw)
  To: linux-arm-kernel

From: Richard Zhao <richard.zhao@linaro.org>

It's for migrating to generic clk framework API.

Signed-off-by: Richard Zhao <richard.zhao@linaro.org>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Cc: David S. Miller <davem@davemloft.net>
---
 drivers/net/ethernet/freescale/fec.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/ethernet/freescale/fec.c b/drivers/net/ethernet/freescale/fec.c
index c136230..112af9b 100644
--- a/drivers/net/ethernet/freescale/fec.c
+++ b/drivers/net/ethernet/freescale/fec.c
@@ -1591,7 +1591,7 @@ fec_probe(struct platform_device *pdev)
 		ret = PTR_ERR(fep->clk);
 		goto failed_clk;
 	}
-	clk_enable(fep->clk);
+	clk_prepare_enable(fep->clk);
 
 	ret = fec_enet_init(ndev);
 	if (ret)
@@ -1614,7 +1614,7 @@ failed_register:
 	fec_enet_mii_remove(fep);
 failed_mii_init:
 failed_init:
-	clk_disable(fep->clk);
+	clk_disable_unprepare(fep->clk);
 	clk_put(fep->clk);
 failed_clk:
 	for (i = 0; i < FEC_IRQ_NUM; i++) {
@@ -1641,7 +1641,7 @@ fec_drv_remove(struct platform_device *pdev)
 
 	fec_stop(ndev);
 	fec_enet_mii_remove(fep);
-	clk_disable(fep->clk);
+	clk_disable_unprepare(fep->clk);
 	clk_put(fep->clk);
 	iounmap(fep->hwp);
 	unregister_netdev(ndev);
@@ -1667,7 +1667,7 @@ fec_suspend(struct device *dev)
 		fec_stop(ndev);
 		netif_device_detach(ndev);
 	}
-	clk_disable(fep->clk);
+	clk_disable_unprepare(fep->clk);
 
 	return 0;
 }
@@ -1678,7 +1678,7 @@ fec_resume(struct device *dev)
 	struct net_device *ndev = dev_get_drvdata(dev);
 	struct fec_enet_private *fep = netdev_priv(ndev);
 
-	clk_enable(fep->clk);
+	clk_prepare_enable(fep->clk);
 	if (netif_running(ndev)) {
 		fec_restart(ndev, fep->full_duplex);
 		netif_device_attach(ndev);
-- 
1.7.4.1

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

* [PATCH 04/12] dma: mxs-dma: convert to clk_prepare/clk_unprepare
  2011-12-20 12:00 [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api Shawn Guo
                   ` (2 preceding siblings ...)
  2011-12-20 12:00 ` [PATCH 03/12] net: fec: add clk_prepare/clk_unprepare Shawn Guo
@ 2011-12-20 12:00 ` Shawn Guo
  2011-12-20 13:45   ` Marek Vasut
  2011-12-20 12:00 ` [PATCH 05/12] mmc: mxs-mmc: " Shawn Guo
                   ` (8 subsequent siblings)
  12 siblings, 1 reply; 40+ messages in thread
From: Shawn Guo @ 2011-12-20 12:00 UTC (permalink / raw)
  To: linux-arm-kernel

The patch converts mxs-dma driver to clk_prepare/clk_unprepare by
using helper functions clk_prepare_enable/clk_disable_unprepare.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Cc: Vinod Koul <vinod.koul@intel.com>
---
 drivers/dma/mxs-dma.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/dma/mxs-dma.c b/drivers/dma/mxs-dma.c
index b4588bd..fc903c0 100644
--- a/drivers/dma/mxs-dma.c
+++ b/drivers/dma/mxs-dma.c
@@ -334,7 +334,7 @@ static int mxs_dma_alloc_chan_resources(struct dma_chan *chan)
 			goto err_irq;
 	}
 
-	ret = clk_enable(mxs_dma->clk);
+	ret = clk_prepare_enable(mxs_dma->clk);
 	if (ret)
 		goto err_clk;
 
@@ -372,7 +372,7 @@ static void mxs_dma_free_chan_resources(struct dma_chan *chan)
 	dma_free_coherent(mxs_dma->dma_device.dev, PAGE_SIZE,
 			mxs_chan->ccw, mxs_chan->ccw_phys);
 
-	clk_disable(mxs_dma->clk);
+	clk_disable_unprepare(mxs_dma->clk);
 }
 
 static struct dma_async_tx_descriptor *mxs_dma_prep_slave_sg(
@@ -578,7 +578,7 @@ static int __init mxs_dma_init(struct mxs_dma_engine *mxs_dma)
 {
 	int ret;
 
-	ret = clk_enable(mxs_dma->clk);
+	ret = clk_prepare_enable(mxs_dma->clk);
 	if (ret)
 		goto err_out;
 
@@ -604,7 +604,7 @@ static int __init mxs_dma_init(struct mxs_dma_engine *mxs_dma)
 	writel(MXS_DMA_CHANNELS_MASK << MXS_DMA_CHANNELS,
 		mxs_dma->base + HW_APBHX_CTRL1 + MXS_SET_ADDR);
 
-	clk_disable(mxs_dma->clk);
+	clk_disable_unprepare(mxs_dma->clk);
 
 	return 0;
 
-- 
1.7.4.1

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

* [PATCH 05/12] mmc: mxs-mmc: convert to clk_prepare/clk_unprepare
  2011-12-20 12:00 [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api Shawn Guo
                   ` (3 preceding siblings ...)
  2011-12-20 12:00 ` [PATCH 04/12] dma: mxs-dma: convert to clk_prepare/clk_unprepare Shawn Guo
@ 2011-12-20 12:00 ` Shawn Guo
  2011-12-20 13:45   ` Marek Vasut
  2011-12-20 12:00 ` [PATCH 06/12] mtd: gpmi-lib: " Shawn Guo
                   ` (7 subsequent siblings)
  12 siblings, 1 reply; 40+ messages in thread
From: Shawn Guo @ 2011-12-20 12:00 UTC (permalink / raw)
  To: linux-arm-kernel

The patch converts mxs-mmc driver to clk_prepare/clk_unprepare by
using helper functions clk_prepare_enable/clk_disable_unprepare.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Cc: Chris Ball <cjb@laptop.org>
---
 drivers/mmc/host/mxs-mmc.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/mmc/host/mxs-mmc.c b/drivers/mmc/host/mxs-mmc.c
index 99b449d..973011f 100644
--- a/drivers/mmc/host/mxs-mmc.c
+++ b/drivers/mmc/host/mxs-mmc.c
@@ -713,7 +713,7 @@ static int mxs_mmc_probe(struct platform_device *pdev)
 		ret = PTR_ERR(host->clk);
 		goto out_iounmap;
 	}
-	clk_enable(host->clk);
+	clk_prepare_enable(host->clk);
 
 	mxs_mmc_reset(host);
 
@@ -772,7 +772,7 @@ out_free_dma:
 	if (host->dmach)
 		dma_release_channel(host->dmach);
 out_clk_put:
-	clk_disable(host->clk);
+	clk_disable_unprepare(host->clk);
 	clk_put(host->clk);
 out_iounmap:
 	iounmap(host->base);
@@ -798,7 +798,7 @@ static int mxs_mmc_remove(struct platform_device *pdev)
 	if (host->dmach)
 		dma_release_channel(host->dmach);
 
-	clk_disable(host->clk);
+	clk_disable_unprepare(host->clk);
 	clk_put(host->clk);
 
 	iounmap(host->base);
@@ -819,7 +819,7 @@ static int mxs_mmc_suspend(struct device *dev)
 
 	ret = mmc_suspend_host(mmc);
 
-	clk_disable(host->clk);
+	clk_disable_unprepare(host->clk);
 
 	return ret;
 }
@@ -830,7 +830,7 @@ static int mxs_mmc_resume(struct device *dev)
 	struct mxs_mmc_host *host = mmc_priv(mmc);
 	int ret = 0;
 
-	clk_enable(host->clk);
+	clk_prepare_enable(host->clk);
 
 	ret = mmc_resume_host(mmc);
 
-- 
1.7.4.1

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

* [PATCH 06/12] mtd: gpmi-lib: convert to clk_prepare/clk_unprepare
  2011-12-20 12:00 [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api Shawn Guo
                   ` (4 preceding siblings ...)
  2011-12-20 12:00 ` [PATCH 05/12] mmc: mxs-mmc: " Shawn Guo
@ 2011-12-20 12:00 ` Shawn Guo
  2011-12-20 13:46   ` Marek Vasut
  2011-12-20 12:00 ` [PATCH 07/12] net: flexcan: " Shawn Guo
                   ` (6 subsequent siblings)
  12 siblings, 1 reply; 40+ messages in thread
From: Shawn Guo @ 2011-12-20 12:00 UTC (permalink / raw)
  To: linux-arm-kernel

The patch converts gpmi nand driver to clk_prepare/clk_unprepare by
using helper functions clk_prepare_enable/clk_disable_unprepare.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Cc: Huang Shijie <b32955@freescale.com>
Cc: Artem Bityutskiy <artem.bityutskiy@intel.com>
---
 drivers/mtd/nand/gpmi-nand/gpmi-lib.c |   12 ++++++------
 1 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-lib.c b/drivers/mtd/nand/gpmi-nand/gpmi-lib.c
index de4db76..2a56fc6 100644
--- a/drivers/mtd/nand/gpmi-nand/gpmi-lib.c
+++ b/drivers/mtd/nand/gpmi-nand/gpmi-lib.c
@@ -126,7 +126,7 @@ int gpmi_init(struct gpmi_nand_data *this)
 	struct resources *r = &this->resources;
 	int ret;
 
-	ret = clk_enable(r->clock);
+	ret = clk_prepare_enable(r->clock);
 	if (ret)
 		goto err_out;
 	ret = gpmi_reset_block(r->gpmi_regs, false);
@@ -146,7 +146,7 @@ int gpmi_init(struct gpmi_nand_data *this)
 	/* Select BCH ECC. */
 	writel(BM_GPMI_CTRL1_BCH_MODE, r->gpmi_regs + HW_GPMI_CTRL1_SET);
 
-	clk_disable(r->clock);
+	clk_disable_unprepare(r->clock);
 	return 0;
 err_out:
 	return ret;
@@ -202,7 +202,7 @@ int bch_set_geometry(struct gpmi_nand_data *this)
 	ecc_strength  = bch_geo->ecc_strength >> 1;
 	page_size     = bch_geo->page_size;
 
-	ret = clk_enable(r->clock);
+	ret = clk_prepare_enable(r->clock);
 	if (ret)
 		goto err_out;
 
@@ -229,7 +229,7 @@ int bch_set_geometry(struct gpmi_nand_data *this)
 	writel(BM_BCH_CTRL_COMPLETE_IRQ_EN,
 				r->bch_regs + HW_BCH_CTRL_SET);
 
-	clk_disable(r->clock);
+	clk_disable_unprepare(r->clock);
 	return 0;
 err_out:
 	return ret;
@@ -704,7 +704,7 @@ void gpmi_begin(struct gpmi_nand_data *this)
 	int ret;
 
 	/* Enable the clock. */
-	ret = clk_enable(r->clock);
+	ret = clk_prepare_enable(r->clock);
 	if (ret) {
 		pr_err("We failed in enable the clk\n");
 		goto err_out;
@@ -773,7 +773,7 @@ err_out:
 void gpmi_end(struct gpmi_nand_data *this)
 {
 	struct resources *r = &this->resources;
-	clk_disable(r->clock);
+	clk_disable_unprepare(r->clock);
 }
 
 /* Clears a BCH interrupt. */
-- 
1.7.4.1

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

* [PATCH 07/12] net: flexcan: convert to clk_prepare/clk_unprepare
  2011-12-20 12:00 [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api Shawn Guo
                   ` (5 preceding siblings ...)
  2011-12-20 12:00 ` [PATCH 06/12] mtd: gpmi-lib: " Shawn Guo
@ 2011-12-20 12:00 ` Shawn Guo
  2011-12-20 13:48   ` Marek Vasut
  2011-12-20 12:00 ` [PATCH 08/12] serial: mxs-auart: " Shawn Guo
                   ` (5 subsequent siblings)
  12 siblings, 1 reply; 40+ messages in thread
From: Shawn Guo @ 2011-12-20 12:00 UTC (permalink / raw)
  To: linux-arm-kernel

The patch converts flexcan driver to clk_prepare/clk_unprepare by
using helper functions clk_prepare_enable/clk_disable_unprepare.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Cc: Marc Kleine-Budde <mkl@pengutronix.de>
Cc: David S. Miller <davem@davemloft.net>
---
 drivers/net/can/flexcan.c |   10 +++++-----
 1 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c
index e023379..fdd0f3f 100644
--- a/drivers/net/can/flexcan.c
+++ b/drivers/net/can/flexcan.c
@@ -802,7 +802,7 @@ static int flexcan_open(struct net_device *dev)
 	struct flexcan_priv *priv = netdev_priv(dev);
 	int err;
 
-	clk_enable(priv->clk);
+	clk_prepare_enable(priv->clk);
 
 	err = open_candev(dev);
 	if (err)
@@ -824,7 +824,7 @@ static int flexcan_open(struct net_device *dev)
  out_close:
 	close_candev(dev);
  out:
-	clk_disable(priv->clk);
+	clk_disable_unprepare(priv->clk);
 
 	return err;
 }
@@ -838,7 +838,7 @@ static int flexcan_close(struct net_device *dev)
 	flexcan_chip_stop(dev);
 
 	free_irq(dev->irq, dev);
-	clk_disable(priv->clk);
+	clk_disable_unprepare(priv->clk);
 
 	close_candev(dev);
 
@@ -877,7 +877,7 @@ static int __devinit register_flexcandev(struct net_device *dev)
 	struct flexcan_regs __iomem *regs = priv->base;
 	u32 reg, err;
 
-	clk_enable(priv->clk);
+	clk_prepare_enable(priv->clk);
 
 	/* select "bus clock", chip must be disabled */
 	flexcan_chip_disable(priv);
@@ -911,7 +911,7 @@ static int __devinit register_flexcandev(struct net_device *dev)
  out:
 	/* disable core and turn off clocks */
 	flexcan_chip_disable(priv);
-	clk_disable(priv->clk);
+	clk_disable_unprepare(priv->clk);
 
 	return err;
 }
-- 
1.7.4.1

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

* [PATCH 08/12] serial: mxs-auart: convert to clk_prepare/clk_unprepare
  2011-12-20 12:00 [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api Shawn Guo
                   ` (6 preceding siblings ...)
  2011-12-20 12:00 ` [PATCH 07/12] net: flexcan: " Shawn Guo
@ 2011-12-20 12:00 ` Shawn Guo
  2011-12-20 13:49   ` Marek Vasut
  2011-12-20 12:00 ` [PATCH 09/12] video: mxsfb: " Shawn Guo
                   ` (4 subsequent siblings)
  12 siblings, 1 reply; 40+ messages in thread
From: Shawn Guo @ 2011-12-20 12:00 UTC (permalink / raw)
  To: linux-arm-kernel

The patch converts mxs-auart driver to clk_prepare/clk_unprepare by
using helper functions clk_prepare_enable/clk_disable_unprepare.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Alan Cox <alan@linux.intel.com>
---
 drivers/tty/serial/mxs-auart.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/tty/serial/mxs-auart.c b/drivers/tty/serial/mxs-auart.c
index 7e02c9c..c33500a 100644
--- a/drivers/tty/serial/mxs-auart.c
+++ b/drivers/tty/serial/mxs-auart.c
@@ -424,7 +424,7 @@ static int mxs_auart_startup(struct uart_port *u)
 {
 	struct mxs_auart_port *s = to_auart_port(u);
 
-	clk_enable(s->clk);
+	clk_prepare_enable(s->clk);
 
 	writel(AUART_CTRL0_CLKGATE, u->membase + AUART_CTRL0_CLR);
 
@@ -453,7 +453,7 @@ static void mxs_auart_shutdown(struct uart_port *u)
 	writel(AUART_INTR_RXIEN | AUART_INTR_RTIEN | AUART_INTR_CTSMIEN,
 			u->membase + AUART_INTR_CLR);
 
-	clk_disable(s->clk);
+	clk_disable_unprepare(s->clk);
 }
 
 static unsigned int mxs_auart_tx_empty(struct uart_port *u)
@@ -634,7 +634,7 @@ auart_console_setup(struct console *co, char *options)
 	if (!s)
 		return -ENODEV;
 
-	clk_enable(s->clk);
+	clk_prepare_enable(s->clk);
 
 	if (options)
 		uart_parse_options(options, &baud, &parity, &bits, &flow);
@@ -643,7 +643,7 @@ auart_console_setup(struct console *co, char *options)
 
 	ret = uart_set_options(&s->port, co, baud, parity, bits, flow);
 
-	clk_disable(s->clk);
+	clk_disable_unprepare(s->clk);
 
 	return ret;
 }
-- 
1.7.4.1

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

* [PATCH 09/12] video: mxsfb: convert to clk_prepare/clk_unprepare
  2011-12-20 12:00 [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api Shawn Guo
                   ` (7 preceding siblings ...)
  2011-12-20 12:00 ` [PATCH 08/12] serial: mxs-auart: " Shawn Guo
@ 2011-12-20 12:00 ` Shawn Guo
  2011-12-20 13:49   ` Marek Vasut
  2011-12-21  2:11   ` Florian Tobias Schandinat
  2011-12-20 12:00 ` [PATCH 10/12] ASoC: mxs-saif: " Shawn Guo
                   ` (3 subsequent siblings)
  12 siblings, 2 replies; 40+ messages in thread
From: Shawn Guo @ 2011-12-20 12:00 UTC (permalink / raw)
  To: linux-arm-kernel

The patch converts mxsfb driver to clk_prepare/clk_unprepare by
using helper functions clk_prepare_enable/clk_disable_unprepare.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
---
 drivers/video/mxsfb.c |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c
index d837d63..eb3c5ee 100644
--- a/drivers/video/mxsfb.c
+++ b/drivers/video/mxsfb.c
@@ -328,7 +328,7 @@ static void mxsfb_enable_controller(struct fb_info *fb_info)
 
 	dev_dbg(&host->pdev->dev, "%s\n", __func__);
 
-	clk_enable(host->clk);
+	clk_prepare_enable(host->clk);
 	clk_set_rate(host->clk, PICOS2KHZ(fb_info->var.pixclock) * 1000U);
 
 	/* if it was disabled, re-enable the mode again */
@@ -368,7 +368,7 @@ static void mxsfb_disable_controller(struct fb_info *fb_info)
 
 	writel(VDCTRL4_SYNC_SIGNALS_ON, host->base + LCDC_VDCTRL4 + REG_CLR);
 
-	clk_disable(host->clk);
+	clk_disable_unprepare(host->clk);
 
 	host->enabled = 0;
 }
@@ -668,7 +668,7 @@ static int __devinit mxsfb_restore_mode(struct mxsfb_info *host)
 	line_count = fb_info->fix.smem_len / fb_info->fix.line_length;
 	fb_info->fix.ypanstep = 1;
 
-	clk_enable(host->clk);
+	clk_prepare_enable(host->clk);
 	host->enabled = 1;
 
 	return 0;
@@ -841,7 +841,7 @@ static int __devinit mxsfb_probe(struct platform_device *pdev)
 
 error_register:
 	if (host->enabled)
-		clk_disable(host->clk);
+		clk_disable_unprepare(host->clk);
 	fb_destroy_modelist(&fb_info->modelist);
 error_init_fb:
 	kfree(fb_info->pseudo_palette);
-- 
1.7.4.1

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

* [PATCH 10/12] ASoC: mxs-saif: convert to clk_prepare/clk_unprepare
  2011-12-20 12:00 [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api Shawn Guo
                   ` (8 preceding siblings ...)
  2011-12-20 12:00 ` [PATCH 09/12] video: mxsfb: " Shawn Guo
@ 2011-12-20 12:00 ` Shawn Guo
  2011-12-20 11:55   ` Mark Brown
  2011-12-20 13:49   ` Marek Vasut
  2011-12-20 12:00 ` [PATCH 11/12] clk: add config option HAVE_CLK_PREPARE into Kconfig Shawn Guo
                   ` (2 subsequent siblings)
  12 siblings, 2 replies; 40+ messages in thread
From: Shawn Guo @ 2011-12-20 12:00 UTC (permalink / raw)
  To: linux-arm-kernel

The patch converts mxs-saif driver to clk_prepare/clk_unprepare by
using helper functions clk_prepare_enable/clk_disable_unprepare.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Cc: Dong Aisheng <b29396@freescale.com>
Cc: Liam Girdwood <lrg@ti.com>
Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
---
 sound/soc/mxs/mxs-saif.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/sound/soc/mxs/mxs-saif.c b/sound/soc/mxs/mxs-saif.c
index 76dc74d..ef1abb5 100644
--- a/sound/soc/mxs/mxs-saif.c
+++ b/sound/soc/mxs/mxs-saif.c
@@ -210,7 +210,7 @@ int mxs_saif_put_mclk(unsigned int saif_id)
 		return -EBUSY;
 	}
 
-	clk_disable(saif->clk);
+	clk_disable_unprepare(saif->clk);
 
 	/* disable MCLK output */
 	__raw_writel(BM_SAIF_CTRL_CLKGATE,
@@ -264,7 +264,7 @@ int mxs_saif_get_mclk(unsigned int saif_id, unsigned int mclk,
 	if (ret)
 		return ret;
 
-	ret = clk_enable(saif->clk);
+	ret = clk_prepare_enable(saif->clk);
 	if (ret)
 		return ret;
 
-- 
1.7.4.1

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

* [PATCH 11/12] clk: add config option HAVE_CLK_PREPARE into Kconfig
  2011-12-20 12:00 [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api Shawn Guo
                   ` (9 preceding siblings ...)
  2011-12-20 12:00 ` [PATCH 10/12] ASoC: mxs-saif: " Shawn Guo
@ 2011-12-20 12:00 ` Shawn Guo
  2011-12-20 12:00 ` [PATCH 12/12] arm/mxs: select HAVE_CLK_PREPARE for clock Shawn Guo
  2011-12-20 13:43 ` [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api Marek Vasut
  12 siblings, 0 replies; 40+ messages in thread
From: Shawn Guo @ 2011-12-20 12:00 UTC (permalink / raw)
  To: linux-arm-kernel

The commit 40d3e0f (clk: provide prepare/unprepare functions) provides
the config option HAVE_CLK_PREPARE for platforms that have
prepare/unprepare implementation to select.  This patch adds the option
into drivers/clk/Kconfig, so that it can be actually selected.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Cc: Russell King <rmk+kernel@arm.linux.org.uk>
---
 drivers/clk/Kconfig |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig
index 3530927..9b3cd08 100644
--- a/drivers/clk/Kconfig
+++ b/drivers/clk/Kconfig
@@ -3,5 +3,8 @@ config CLKDEV_LOOKUP
 	bool
 	select HAVE_CLK
 
+config HAVE_CLK_PREPARE
+	bool
+
 config HAVE_MACH_CLKDEV
 	bool
-- 
1.7.4.1

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

* [PATCH 12/12] arm/mxs: select HAVE_CLK_PREPARE for clock
  2011-12-20 12:00 [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api Shawn Guo
                   ` (10 preceding siblings ...)
  2011-12-20 12:00 ` [PATCH 11/12] clk: add config option HAVE_CLK_PREPARE into Kconfig Shawn Guo
@ 2011-12-20 12:00 ` Shawn Guo
  2011-12-20 13:43 ` [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api Marek Vasut
  12 siblings, 0 replies; 40+ messages in thread
From: Shawn Guo @ 2011-12-20 12:00 UTC (permalink / raw)
  To: linux-arm-kernel

This patch adds clk_prepare/clk_unprepare for mxs clock api by
renaming the existing non-atomic clk_enable/clk_disable to
clk_prepare/clk_unprepare and adding a pair of dummy
clk_enable/clk_disable.  Then with selecting HAVE_CLK_PREPARE for
mxs clock, we can fix the mutex locking warning that has been
reported for a few times.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
---
 arch/arm/Kconfig          |    1 +
 arch/arm/mach-mxs/clock.c |   31 ++++++++++++++++++++++---------
 2 files changed, 23 insertions(+), 9 deletions(-)

diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 776d76b..dc46163 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -442,6 +442,7 @@ config ARCH_MXS
 	select ARCH_REQUIRE_GPIOLIB
 	select CLKDEV_LOOKUP
 	select CLKSRC_MMIO
+	select HAVE_CLK_PREPARE
 	help
 	  Support for Freescale MXS-based family of processors
 
diff --git a/arch/arm/mach-mxs/clock.c b/arch/arm/mach-mxs/clock.c
index 755eec0..97a6f4a 100644
--- a/arch/arm/mach-mxs/clock.c
+++ b/arch/arm/mach-mxs/clock.c
@@ -74,10 +74,15 @@ static int __clk_enable(struct clk *clk)
 	return 0;
 }
 
-/* This function increments the reference count on the clock and enables the
- * clock if not already enabled. The parent clock tree is recursively enabled
+/*
+ * The clk_enable/clk_disable could be called by drivers in atomic context,
+ * so they should not really hold mutex.  Instead, clk_prepare/clk_unprepare
+ * can hold a mutex, as the pair will only be called in non-atomic context.
+ * Before migrating to common clk framework, we can have __clk_enable and
+ * __clk_disable called in clk_prepare/clk_unprepare with mutex held and
+ * leave clk_enable/clk_disable as the dummy functions.
  */
-int clk_enable(struct clk *clk)
+int clk_prepare(struct clk *clk)
 {
 	int ret = 0;
 
@@ -90,13 +95,9 @@ int clk_enable(struct clk *clk)
 
 	return ret;
 }
-EXPORT_SYMBOL(clk_enable);
+EXPORT_SYMBOL(clk_prepare);
 
-/* This function decrements the reference count on the clock and disables
- * the clock when reference count is 0. The parent clock tree is
- * recursively disabled
- */
-void clk_disable(struct clk *clk)
+void clk_unprepare(struct clk *clk)
 {
 	if (clk == NULL || IS_ERR(clk))
 		return;
@@ -105,6 +106,18 @@ void clk_disable(struct clk *clk)
 	__clk_disable(clk);
 	mutex_unlock(&clocks_mutex);
 }
+EXPORT_SYMBOL(clk_unprepare);
+
+int clk_enable(struct clk *clk)
+{
+	return 0;
+}
+EXPORT_SYMBOL(clk_enable);
+
+void clk_disable(struct clk *clk)
+{
+	/* nothing to do */
+}
 EXPORT_SYMBOL(clk_disable);
 
 /* Retrieve the *current* clock rate. If the clock itself
-- 
1.7.4.1

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

* [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api
  2011-12-20 12:00 [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api Shawn Guo
                   ` (11 preceding siblings ...)
  2011-12-20 12:00 ` [PATCH 12/12] arm/mxs: select HAVE_CLK_PREPARE for clock Shawn Guo
@ 2011-12-20 13:43 ` Marek Vasut
  2011-12-20 14:05   ` Shawn Guo
  12 siblings, 1 reply; 40+ messages in thread
From: Marek Vasut @ 2011-12-20 13:43 UTC (permalink / raw)
  To: linux-arm-kernel

> The mutex locking problem on mxs platform has been reported on mailing
> list for a few time.  The cause is that a mutex is being held in mxs
> clock api clk_enable/clk_disable which are being called by some mxs
> clock client drivers like amba-pl011 and mxs-saif in atomic context.
> 
> This series takes Russell's suggestion to:
> 
>  * Convert all mxs clock client drivers to clk_prepare/clk_unprepare.
>    (I hope the series has covered all the drivers, but appreciate any
>    reminding on any missing ones.)

serial/amba-pl011.c isn't converted, that's where I originally observed the 
issue.
> 
>  * Add clk_prepare/clk_unprepare for mxs clock api to contain the
>    non-atomic portion of existing clk_enable/clk_disable implemention.
>    (As the whole existing clk_enable/clk_disable are non-atomic,
>    clk_prepare/clk_unprepare become a renaming of the existing
>    clk_enable/clk_disable, and the new clk_enable/clk_disable become
>    a pair of dummy functions.)
> 
> Thus, we can ensure that no mutex will be held for atomic context, and
> the problem people keep reporting gets fixed with one step move toward
> common clk framework while not ncessarily waiting for it.
> 
> If driver maintainers have no objection, after the review process, I
> would like to send the series through arm-soc tree to ease the merge
> process.
> 
> Those two patches from Richard Zhao are included here for completeness,
> and they have been picked up by Sascha on imx tree.  But since imx and
> mxs will both go through arm-soc, it should easy to sort out how we
> should merge them.
> 
> Regards,
> Shawn
> 
> Richard Zhao (2):
>       clk: add helper functions clk_prepare_enable and
> clk_disable_unprepare net: fec: add clk_prepare/clk_unprepare
> 
> Shawn Guo (10):
>       arm/mxs: convert platform code to clk_prepare/clk_unprepare
>       dma: mxs-dma: convert to clk_prepare/clk_unprepare
>       mmc: mxs-mmc: convert to clk_prepare/clk_unprepare
>       mtd: gpmi-lib: convert to clk_prepare/clk_unprepare
>       net: flexcan: convert to clk_prepare/clk_unprepare
>       serial: mxs-auart: convert to clk_prepare/clk_unprepare
>       video: mxsfb: convert to clk_prepare/clk_unprepare
>       ASoC: mxs-saif: convert to clk_prepare/clk_unprepare
>       clk: add config option HAVE_CLK_PREPARE into Kconfig
>       arm/mxs: select HAVE_CLK_PREPARE for clock
> 
>  arch/arm/Kconfig                      |    1 +
>  arch/arm/mach-mxs/clock-mx23.c        |   10 +++++-----
>  arch/arm/mach-mxs/clock-mx28.c        |   10 +++++-----
>  arch/arm/mach-mxs/clock.c             |   33
> +++++++++++++++++++++++---------- arch/arm/mach-mxs/mach-mx28evk.c      | 
>   2 +-
>  arch/arm/mach-mxs/system.c            |    2 +-
>  arch/arm/mach-mxs/timer.c             |    2 +-
>  drivers/clk/Kconfig                   |    3 +++
>  drivers/dma/mxs-dma.c                 |    8 ++++----
>  drivers/mmc/host/mxs-mmc.c            |   10 +++++-----
>  drivers/mtd/nand/gpmi-nand/gpmi-lib.c |   12 ++++++------
>  drivers/net/can/flexcan.c             |   10 +++++-----
>  drivers/net/ethernet/freescale/fec.c  |   10 +++++-----
>  drivers/tty/serial/mxs-auart.c        |    8 ++++----
>  drivers/video/mxsfb.c                 |    8 ++++----
>  include/linux/clk.h                   |   22 ++++++++++++++++++++++
>  sound/soc/mxs/mxs-saif.c              |    4 ++--
>  17 files changed, 97 insertions(+), 58 deletions(-)

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

* [PATCH 02/12] arm/mxs: convert platform code to clk_prepare/clk_unprepare
  2011-12-20 12:00 ` [PATCH 02/12] arm/mxs: convert platform code to clk_prepare/clk_unprepare Shawn Guo
@ 2011-12-20 13:44   ` Marek Vasut
  2011-12-20 21:11     ` Russell King - ARM Linux
  0 siblings, 1 reply; 40+ messages in thread
From: Marek Vasut @ 2011-12-20 13:44 UTC (permalink / raw)
  To: linux-arm-kernel

> The patch converts mxs platform code to clk_prepare/clk_unprepare
> by using helper functions clk_prepare_enable/clk_disable_unprepare.
> 
> Signed-off-by: Richard Zhao <richard.zhao@linaro.org>
> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> ---
>  arch/arm/mach-mxs/clock-mx23.c   |   10 +++++-----
>  arch/arm/mach-mxs/clock-mx28.c   |   10 +++++-----
>  arch/arm/mach-mxs/clock.c        |    2 +-
>  arch/arm/mach-mxs/mach-mx28evk.c |    2 +-
>  arch/arm/mach-mxs/system.c       |    2 +-
>  arch/arm/mach-mxs/timer.c        |    2 +-
>  6 files changed, 14 insertions(+), 14 deletions(-)
> 
> diff --git a/arch/arm/mach-mxs/clock-mx23.c
> b/arch/arm/mach-mxs/clock-mx23.c index 0163b6d..e12e112 100644
> --- a/arch/arm/mach-mxs/clock-mx23.c
> +++ b/arch/arm/mach-mxs/clock-mx23.c
> @@ -545,11 +545,11 @@ int __init mx23_clocks_init(void)
>  	 */
>  	clk_set_parent(&ssp_clk, &ref_io_clk);
> 
> -	clk_enable(&cpu_clk);
> -	clk_enable(&hbus_clk);
> -	clk_enable(&xbus_clk);
> -	clk_enable(&emi_clk);
> -	clk_enable(&uart_clk);
> +	clk_prepare_enable(&cpu_clk);
> +	clk_prepare_enable(&hbus_clk);
> +	clk_prepare_enable(&xbus_clk);
> +	clk_prepare_enable(&emi_clk);
> +	clk_prepare_enable(&uart_clk);
> 
>  	clkdev_add_table(lookups, ARRAY_SIZE(lookups));
> 
> diff --git a/arch/arm/mach-mxs/clock-mx28.c
> b/arch/arm/mach-mxs/clock-mx28.c index da6e4aa..f85f1f5 100644
> --- a/arch/arm/mach-mxs/clock-mx28.c
> +++ b/arch/arm/mach-mxs/clock-mx28.c
> @@ -775,11 +775,11 @@ int __init mx28_clocks_init(void)
>  	clk_set_parent(&ssp0_clk, &ref_io0_clk);
>  	clk_set_parent(&ssp1_clk, &ref_io0_clk);
> 
> -	clk_enable(&cpu_clk);
> -	clk_enable(&hbus_clk);
> -	clk_enable(&xbus_clk);
> -	clk_enable(&emi_clk);
> -	clk_enable(&uart_clk);
> +	clk_prepare_enable(&cpu_clk);
> +	clk_prepare_enable(&hbus_clk);
> +	clk_prepare_enable(&xbus_clk);
> +	clk_prepare_enable(&emi_clk);
> +	clk_prepare_enable(&uart_clk);
> 
>  	clk_set_parent(&lcdif_clk, &ref_pix_clk);
>  	clk_set_parent(&saif0_clk, &pll0_clk);
> diff --git a/arch/arm/mach-mxs/clock.c b/arch/arm/mach-mxs/clock.c
> index a7093c8..755eec0 100644
> --- a/arch/arm/mach-mxs/clock.c
> +++ b/arch/arm/mach-mxs/clock.c
> @@ -166,7 +166,7 @@ int clk_set_parent(struct clk *clk, struct clk *parent)
>  		return ret;
> 
>  	if (clk->usecount)
> -		clk_enable(parent);
> +		clk_prepare_enable(parent);
> 
>  	mutex_lock(&clocks_mutex);
>  	ret = clk->set_parent(clk, parent);
> diff --git a/arch/arm/mach-mxs/mach-mx28evk.c
> b/arch/arm/mach-mxs/mach-mx28evk.c index 064ec5a..6b9e83e 100644
> --- a/arch/arm/mach-mxs/mach-mx28evk.c
> +++ b/arch/arm/mach-mxs/mach-mx28evk.c
> @@ -228,7 +228,7 @@ static void __init mx28evk_fec_reset(void)
>  	/* Enable fec phy clock */
>  	clk = clk_get_sys("pll2", NULL);
>  	if (!IS_ERR(clk))
> -		clk_enable(clk);
> +		clk_prepare_enable(clk);
> 
>  	/* Power up fec phy */
>  	ret = gpio_request(MX28EVK_FEC_PHY_POWER, "fec-phy-power");
> diff --git a/arch/arm/mach-mxs/system.c b/arch/arm/mach-mxs/system.c
> index 20ec3bd..9760a12 100644
> --- a/arch/arm/mach-mxs/system.c
> +++ b/arch/arm/mach-mxs/system.c
> @@ -66,7 +66,7 @@ static int __init mxs_arch_reset_init(void)
> 
>  	clk = clk_get_sys("rtc", NULL);
>  	if (!IS_ERR(clk))
> -		clk_enable(clk);
> +		clk_prepare_enable(clk);
> 

I still wonder how to handle the DUART -- amba-pl011 -- maybe we should toggle 
the clock here too ?

M

>  	return 0;
>  }
> diff --git a/arch/arm/mach-mxs/timer.c b/arch/arm/mach-mxs/timer.c
> index cace0d2..564a632 100644
> --- a/arch/arm/mach-mxs/timer.c
> +++ b/arch/arm/mach-mxs/timer.c
> @@ -245,7 +245,7 @@ static int __init mxs_clocksource_init(struct clk
> *timer_clk)
> 
>  void __init mxs_timer_init(struct clk *timer_clk, int irq)
>  {
> -	clk_enable(timer_clk);
> +	clk_prepare_enable(timer_clk);
> 
>  	/*
>  	 * Initialize timers to a known state

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

* [PATCH 03/12] net: fec: add clk_prepare/clk_unprepare
  2011-12-20 12:00 ` [PATCH 03/12] net: fec: add clk_prepare/clk_unprepare Shawn Guo
@ 2011-12-20 13:45   ` Marek Vasut
  0 siblings, 0 replies; 40+ messages in thread
From: Marek Vasut @ 2011-12-20 13:45 UTC (permalink / raw)
  To: linux-arm-kernel

> From: Richard Zhao <richard.zhao@linaro.org>
> 
> It's for migrating to generic clk framework API.
> 
> Signed-off-by: Richard Zhao <richard.zhao@linaro.org>
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> Cc: David S. Miller <davem@davemloft.net>
> ---
>  drivers/net/ethernet/freescale/fec.c |   10 +++++-----
>  1 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/net/ethernet/freescale/fec.c
> b/drivers/net/ethernet/freescale/fec.c index c136230..112af9b 100644
> --- a/drivers/net/ethernet/freescale/fec.c
> +++ b/drivers/net/ethernet/freescale/fec.c
> @@ -1591,7 +1591,7 @@ fec_probe(struct platform_device *pdev)
>  		ret = PTR_ERR(fep->clk);
>  		goto failed_clk;
>  	}
> -	clk_enable(fep->clk);
> +	clk_prepare_enable(fep->clk);
> 
>  	ret = fec_enet_init(ndev);
>  	if (ret)
> @@ -1614,7 +1614,7 @@ failed_register:
>  	fec_enet_mii_remove(fep);
>  failed_mii_init:
>  failed_init:
> -	clk_disable(fep->clk);
> +	clk_disable_unprepare(fep->clk);
>  	clk_put(fep->clk);
>  failed_clk:
>  	for (i = 0; i < FEC_IRQ_NUM; i++) {
> @@ -1641,7 +1641,7 @@ fec_drv_remove(struct platform_device *pdev)
> 
>  	fec_stop(ndev);
>  	fec_enet_mii_remove(fep);
> -	clk_disable(fep->clk);
> +	clk_disable_unprepare(fep->clk);
>  	clk_put(fep->clk);
>  	iounmap(fep->hwp);
>  	unregister_netdev(ndev);
> @@ -1667,7 +1667,7 @@ fec_suspend(struct device *dev)
>  		fec_stop(ndev);
>  		netif_device_detach(ndev);
>  	}
> -	clk_disable(fep->clk);
> +	clk_disable_unprepare(fep->clk);
> 
>  	return 0;
>  }
> @@ -1678,7 +1678,7 @@ fec_resume(struct device *dev)
>  	struct net_device *ndev = dev_get_drvdata(dev);
>  	struct fec_enet_private *fep = netdev_priv(ndev);
> 
> -	clk_enable(fep->clk);
> +	clk_prepare_enable(fep->clk);
>  	if (netif_running(ndev)) {
>  		fec_restart(ndev, fep->full_duplex);
>  		netif_device_attach(ndev);

Looks ok

Acked-by: Marek Vasut <marek.vasut@gmail.com>

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

* [PATCH 04/12] dma: mxs-dma: convert to clk_prepare/clk_unprepare
  2011-12-20 12:00 ` [PATCH 04/12] dma: mxs-dma: convert to clk_prepare/clk_unprepare Shawn Guo
@ 2011-12-20 13:45   ` Marek Vasut
  2011-12-23 17:35     ` Vinod Koul
  0 siblings, 1 reply; 40+ messages in thread
From: Marek Vasut @ 2011-12-20 13:45 UTC (permalink / raw)
  To: linux-arm-kernel

> The patch converts mxs-dma driver to clk_prepare/clk_unprepare by
> using helper functions clk_prepare_enable/clk_disable_unprepare.
> 
> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> Cc: Vinod Koul <vinod.koul@intel.com>
> ---
>  drivers/dma/mxs-dma.c |    8 ++++----
>  1 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/dma/mxs-dma.c b/drivers/dma/mxs-dma.c
> index b4588bd..fc903c0 100644
> --- a/drivers/dma/mxs-dma.c
> +++ b/drivers/dma/mxs-dma.c
> @@ -334,7 +334,7 @@ static int mxs_dma_alloc_chan_resources(struct dma_chan
> *chan) goto err_irq;
>  	}
> 
> -	ret = clk_enable(mxs_dma->clk);
> +	ret = clk_prepare_enable(mxs_dma->clk);
>  	if (ret)
>  		goto err_clk;
> 
> @@ -372,7 +372,7 @@ static void mxs_dma_free_chan_resources(struct dma_chan
> *chan) dma_free_coherent(mxs_dma->dma_device.dev, PAGE_SIZE,
>  			mxs_chan->ccw, mxs_chan->ccw_phys);
> 
> -	clk_disable(mxs_dma->clk);
> +	clk_disable_unprepare(mxs_dma->clk);
>  }
> 
>  static struct dma_async_tx_descriptor *mxs_dma_prep_slave_sg(
> @@ -578,7 +578,7 @@ static int __init mxs_dma_init(struct mxs_dma_engine
> *mxs_dma) {
>  	int ret;
> 
> -	ret = clk_enable(mxs_dma->clk);
> +	ret = clk_prepare_enable(mxs_dma->clk);
>  	if (ret)
>  		goto err_out;
> 
> @@ -604,7 +604,7 @@ static int __init mxs_dma_init(struct mxs_dma_engine
> *mxs_dma) writel(MXS_DMA_CHANNELS_MASK << MXS_DMA_CHANNELS,
>  		mxs_dma->base + HW_APBHX_CTRL1 + MXS_SET_ADDR);
> 
> -	clk_disable(mxs_dma->clk);
> +	clk_disable_unprepare(mxs_dma->clk);
> 
>  	return 0;

Acked-by: Marek Vasut <marek.vasut@gmail.com>

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

* [PATCH 05/12] mmc: mxs-mmc: convert to clk_prepare/clk_unprepare
  2011-12-20 12:00 ` [PATCH 05/12] mmc: mxs-mmc: " Shawn Guo
@ 2011-12-20 13:45   ` Marek Vasut
  0 siblings, 0 replies; 40+ messages in thread
From: Marek Vasut @ 2011-12-20 13:45 UTC (permalink / raw)
  To: linux-arm-kernel

> The patch converts mxs-mmc driver to clk_prepare/clk_unprepare by
> using helper functions clk_prepare_enable/clk_disable_unprepare.
> 
> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> Cc: Chris Ball <cjb@laptop.org>
> ---
>  drivers/mmc/host/mxs-mmc.c |   10 +++++-----
>  1 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/mmc/host/mxs-mmc.c b/drivers/mmc/host/mxs-mmc.c
> index 99b449d..973011f 100644
> --- a/drivers/mmc/host/mxs-mmc.c
> +++ b/drivers/mmc/host/mxs-mmc.c
> @@ -713,7 +713,7 @@ static int mxs_mmc_probe(struct platform_device *pdev)
>  		ret = PTR_ERR(host->clk);
>  		goto out_iounmap;
>  	}
> -	clk_enable(host->clk);
> +	clk_prepare_enable(host->clk);
> 
>  	mxs_mmc_reset(host);
> 
> @@ -772,7 +772,7 @@ out_free_dma:
>  	if (host->dmach)
>  		dma_release_channel(host->dmach);
>  out_clk_put:
> -	clk_disable(host->clk);
> +	clk_disable_unprepare(host->clk);
>  	clk_put(host->clk);
>  out_iounmap:
>  	iounmap(host->base);
> @@ -798,7 +798,7 @@ static int mxs_mmc_remove(struct platform_device *pdev)
>  	if (host->dmach)
>  		dma_release_channel(host->dmach);
> 
> -	clk_disable(host->clk);
> +	clk_disable_unprepare(host->clk);
>  	clk_put(host->clk);
> 
>  	iounmap(host->base);
> @@ -819,7 +819,7 @@ static int mxs_mmc_suspend(struct device *dev)
> 
>  	ret = mmc_suspend_host(mmc);
> 
> -	clk_disable(host->clk);
> +	clk_disable_unprepare(host->clk);
> 
>  	return ret;
>  }
> @@ -830,7 +830,7 @@ static int mxs_mmc_resume(struct device *dev)
>  	struct mxs_mmc_host *host = mmc_priv(mmc);
>  	int ret = 0;
> 
> -	clk_enable(host->clk);
> +	clk_prepare_enable(host->clk);
> 
>  	ret = mmc_resume_host(mmc);

Acked-by: Marek Vasut <marek.vasut@gmail.com>

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

* [PATCH 06/12] mtd: gpmi-lib: convert to clk_prepare/clk_unprepare
  2011-12-20 12:00 ` [PATCH 06/12] mtd: gpmi-lib: " Shawn Guo
@ 2011-12-20 13:46   ` Marek Vasut
  0 siblings, 0 replies; 40+ messages in thread
From: Marek Vasut @ 2011-12-20 13:46 UTC (permalink / raw)
  To: linux-arm-kernel

> The patch converts gpmi nand driver to clk_prepare/clk_unprepare by
> using helper functions clk_prepare_enable/clk_disable_unprepare.
> 
> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> Cc: Huang Shijie <b32955@freescale.com>
> Cc: Artem Bityutskiy <artem.bityutskiy@intel.com>
> ---
>  drivers/mtd/nand/gpmi-nand/gpmi-lib.c |   12 ++++++------
>  1 files changed, 6 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-lib.c
> b/drivers/mtd/nand/gpmi-nand/gpmi-lib.c index de4db76..2a56fc6 100644
> --- a/drivers/mtd/nand/gpmi-nand/gpmi-lib.c
> +++ b/drivers/mtd/nand/gpmi-nand/gpmi-lib.c
> @@ -126,7 +126,7 @@ int gpmi_init(struct gpmi_nand_data *this)
>  	struct resources *r = &this->resources;
>  	int ret;
> 
> -	ret = clk_enable(r->clock);
> +	ret = clk_prepare_enable(r->clock);
>  	if (ret)
>  		goto err_out;
>  	ret = gpmi_reset_block(r->gpmi_regs, false);
> @@ -146,7 +146,7 @@ int gpmi_init(struct gpmi_nand_data *this)
>  	/* Select BCH ECC. */
>  	writel(BM_GPMI_CTRL1_BCH_MODE, r->gpmi_regs + HW_GPMI_CTRL1_SET);
> 
> -	clk_disable(r->clock);
> +	clk_disable_unprepare(r->clock);
>  	return 0;
>  err_out:
>  	return ret;
> @@ -202,7 +202,7 @@ int bch_set_geometry(struct gpmi_nand_data *this)
>  	ecc_strength  = bch_geo->ecc_strength >> 1;
>  	page_size     = bch_geo->page_size;
> 
> -	ret = clk_enable(r->clock);
> +	ret = clk_prepare_enable(r->clock);
>  	if (ret)
>  		goto err_out;
> 
> @@ -229,7 +229,7 @@ int bch_set_geometry(struct gpmi_nand_data *this)
>  	writel(BM_BCH_CTRL_COMPLETE_IRQ_EN,
>  				r->bch_regs + HW_BCH_CTRL_SET);
> 
> -	clk_disable(r->clock);
> +	clk_disable_unprepare(r->clock);
>  	return 0;
>  err_out:
>  	return ret;
> @@ -704,7 +704,7 @@ void gpmi_begin(struct gpmi_nand_data *this)
>  	int ret;
> 
>  	/* Enable the clock. */
> -	ret = clk_enable(r->clock);
> +	ret = clk_prepare_enable(r->clock);
>  	if (ret) {
>  		pr_err("We failed in enable the clk\n");
>  		goto err_out;
> @@ -773,7 +773,7 @@ err_out:
>  void gpmi_end(struct gpmi_nand_data *this)
>  {
>  	struct resources *r = &this->resources;
> -	clk_disable(r->clock);
> +	clk_disable_unprepare(r->clock);
>  }
> 
>  /* Clears a BCH interrupt. */

Yes, this is still all very easy conversion :)

Acked-by: Marek Vasut <marek.vasut@gmail.com>

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

* [PATCH 01/12] clk: add helper functions clk_prepare_enable and clk_disable_unprepare
  2011-12-20 12:00 ` [PATCH 01/12] clk: add helper functions clk_prepare_enable and clk_disable_unprepare Shawn Guo
@ 2011-12-20 13:48   ` Marek Vasut
  2011-12-20 14:09     ` Shawn Guo
  0 siblings, 1 reply; 40+ messages in thread
From: Marek Vasut @ 2011-12-20 13:48 UTC (permalink / raw)
  To: linux-arm-kernel

> From: Richard Zhao <richard.zhao@linaro.org>
> 
> It's for migrating to generic clk framework API.
> 
> The helper functions  help cases clk_enable/clk_disable is used
> in non-atomic context.
> For example, Call clk_enable in probe and clk_disable in remove.
> 
> Signed-off-by: Richard Zhao <richard.zhao@linaro.org>
> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> Cc: Russell King <linux@arm.linux.org.uk>
> ---
>  include/linux/clk.h |   22 ++++++++++++++++++++++
>  1 files changed, 22 insertions(+), 0 deletions(-)
> 
> diff --git a/include/linux/clk.h b/include/linux/clk.h
> index 7213b52..b9d46fa 100644
> --- a/include/linux/clk.h
> +++ b/include/linux/clk.h
> @@ -107,6 +107,28 @@ static inline void clk_unprepare(struct clk *clk)
>  }
>  #endif
> 
> +/* clk_prepare_enable helps cases using clk_enable in non-atomic context.
> */ +static inline int clk_prepare_enable(struct clk *clk)
> +{
> +	int ret;
> +
> +	ret = clk_prepare(clk);
> +	if (ret)
> +		return ret;
> +	ret = clk_enable(clk);
> +	if (ret)
> +		clk_unprepare(clk);
> +
> +	return ret;
> +}
> +
> +/* clk_disable_unprepare helps cases using clk_disable in non-atomic
> context. */ +static inline void clk_disable_unprepare(struct clk *clk)
> +{
> +	clk_disable(clk);
> +	clk_unprepare(clk);
> +}
> +
>  /**
>   * clk_get_rate - obtain the current clock rate (in Hz) for a clock
> source. *		  This is only valid once the clock source has been 
enabled.

Just be sure clk_prepare() is always available (which I suspect is checked in 
the implementation, so ok). Other than that, 

Acked-by: Marek Vasut <marek.vasut@gmail.com>

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

* [PATCH 07/12] net: flexcan: convert to clk_prepare/clk_unprepare
  2011-12-20 12:00 ` [PATCH 07/12] net: flexcan: " Shawn Guo
@ 2011-12-20 13:48   ` Marek Vasut
  2011-12-20 14:23     ` Shawn Guo
  0 siblings, 1 reply; 40+ messages in thread
From: Marek Vasut @ 2011-12-20 13:48 UTC (permalink / raw)
  To: linux-arm-kernel

> The patch converts flexcan driver to clk_prepare/clk_unprepare by
> using helper functions clk_prepare_enable/clk_disable_unprepare.
> 
> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> Cc: Marc Kleine-Budde <mkl@pengutronix.de>
> Cc: David S. Miller <davem@davemloft.net>
> ---
>  drivers/net/can/flexcan.c |   10 +++++-----
>  1 files changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c
> index e023379..fdd0f3f 100644
> --- a/drivers/net/can/flexcan.c
> +++ b/drivers/net/can/flexcan.c
> @@ -802,7 +802,7 @@ static int flexcan_open(struct net_device *dev)
>  	struct flexcan_priv *priv = netdev_priv(dev);
>  	int err;
> 
> -	clk_enable(priv->clk);
> +	clk_prepare_enable(priv->clk);
> 
>  	err = open_candev(dev);
>  	if (err)
> @@ -824,7 +824,7 @@ static int flexcan_open(struct net_device *dev)
>   out_close:
>  	close_candev(dev);
>   out:
> -	clk_disable(priv->clk);
> +	clk_disable_unprepare(priv->clk);
> 
>  	return err;
>  }
> @@ -838,7 +838,7 @@ static int flexcan_close(struct net_device *dev)
>  	flexcan_chip_stop(dev);
> 
>  	free_irq(dev->irq, dev);
> -	clk_disable(priv->clk);
> +	clk_disable_unprepare(priv->clk);
> 
>  	close_candev(dev);
> 
> @@ -877,7 +877,7 @@ static int __devinit register_flexcandev(struct
> net_device *dev) struct flexcan_regs __iomem *regs = priv->base;
>  	u32 reg, err;
> 
> -	clk_enable(priv->clk);
> +	clk_prepare_enable(priv->clk);
> 
>  	/* select "bus clock", chip must be disabled */
>  	flexcan_chip_disable(priv);
> @@ -911,7 +911,7 @@ static int __devinit register_flexcandev(struct
> net_device *dev) out:
>  	/* disable core and turn off clocks */
>  	flexcan_chip_disable(priv);
> -	clk_disable(priv->clk);
> +	clk_disable_unprepare(priv->clk);
> 
>  	return err;
>  }

Are you sure close()/open() ops are not called from atomic?

M

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

* [PATCH 08/12] serial: mxs-auart: convert to clk_prepare/clk_unprepare
  2011-12-20 12:00 ` [PATCH 08/12] serial: mxs-auart: " Shawn Guo
@ 2011-12-20 13:49   ` Marek Vasut
  2011-12-20 14:07     ` Uwe Kleine-König
  2011-12-20 14:27     ` Shawn Guo
  0 siblings, 2 replies; 40+ messages in thread
From: Marek Vasut @ 2011-12-20 13:49 UTC (permalink / raw)
  To: linux-arm-kernel

> The patch converts mxs-auart driver to clk_prepare/clk_unprepare by
> using helper functions clk_prepare_enable/clk_disable_unprepare.
> 
> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> Cc: Sascha Hauer <s.hauer@pengutronix.de>
> Cc: Alan Cox <alan@linux.intel.com>
> ---
>  drivers/tty/serial/mxs-auart.c |    8 ++++----
>  1 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/tty/serial/mxs-auart.c
> b/drivers/tty/serial/mxs-auart.c index 7e02c9c..c33500a 100644
> --- a/drivers/tty/serial/mxs-auart.c
> +++ b/drivers/tty/serial/mxs-auart.c
> @@ -424,7 +424,7 @@ static int mxs_auart_startup(struct uart_port *u)
>  {
>  	struct mxs_auart_port *s = to_auart_port(u);
> 
> -	clk_enable(s->clk);
> +	clk_prepare_enable(s->clk);
> 
>  	writel(AUART_CTRL0_CLKGATE, u->membase + AUART_CTRL0_CLR);
> 
> @@ -453,7 +453,7 @@ static void mxs_auart_shutdown(struct uart_port *u)
>  	writel(AUART_INTR_RXIEN | AUART_INTR_RTIEN | AUART_INTR_CTSMIEN,
>  			u->membase + AUART_INTR_CLR);
> 
> -	clk_disable(s->clk);
> +	clk_disable_unprepare(s->clk);
>  }
> 
>  static unsigned int mxs_auart_tx_empty(struct uart_port *u)
> @@ -634,7 +634,7 @@ auart_console_setup(struct console *co, char *options)
>  	if (!s)
>  		return -ENODEV;
> 
> -	clk_enable(s->clk);
> +	clk_prepare_enable(s->clk);
> 
>  	if (options)
>  		uart_parse_options(options, &baud, &parity, &bits, &flow);
> @@ -643,7 +643,7 @@ auart_console_setup(struct console *co, char *options)
> 
>  	ret = uart_set_options(&s->port, co, baud, parity, bits, flow);
> 
> -	clk_disable(s->clk);
> +	clk_disable_unprepare(s->clk);
> 
>  	return ret;
>  }

DTTO here, are you sure all of them are not called from atomic ctx?

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

* [PATCH 09/12] video: mxsfb: convert to clk_prepare/clk_unprepare
  2011-12-20 12:00 ` [PATCH 09/12] video: mxsfb: " Shawn Guo
@ 2011-12-20 13:49   ` Marek Vasut
  2011-12-21  2:11   ` Florian Tobias Schandinat
  1 sibling, 0 replies; 40+ messages in thread
From: Marek Vasut @ 2011-12-20 13:49 UTC (permalink / raw)
  To: linux-arm-kernel

> The patch converts mxsfb driver to clk_prepare/clk_unprepare by
> using helper functions clk_prepare_enable/clk_disable_unprepare.
> 
> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> Cc: Sascha Hauer <s.hauer@pengutronix.de>
> Cc: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
> ---
>  drivers/video/mxsfb.c |    8 ++++----
>  1 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c
> index d837d63..eb3c5ee 100644
> --- a/drivers/video/mxsfb.c
> +++ b/drivers/video/mxsfb.c
> @@ -328,7 +328,7 @@ static void mxsfb_enable_controller(struct fb_info
> *fb_info)
> 
>  	dev_dbg(&host->pdev->dev, "%s\n", __func__);
> 
> -	clk_enable(host->clk);
> +	clk_prepare_enable(host->clk);
>  	clk_set_rate(host->clk, PICOS2KHZ(fb_info->var.pixclock) * 1000U);
> 
>  	/* if it was disabled, re-enable the mode again */
> @@ -368,7 +368,7 @@ static void mxsfb_disable_controller(struct fb_info
> *fb_info)
> 
>  	writel(VDCTRL4_SYNC_SIGNALS_ON, host->base + LCDC_VDCTRL4 + REG_CLR);
> 
> -	clk_disable(host->clk);
> +	clk_disable_unprepare(host->clk);
> 
>  	host->enabled = 0;
>  }
> @@ -668,7 +668,7 @@ static int __devinit mxsfb_restore_mode(struct
> mxsfb_info *host) line_count = fb_info->fix.smem_len /
> fb_info->fix.line_length;
>  	fb_info->fix.ypanstep = 1;
> 
> -	clk_enable(host->clk);
> +	clk_prepare_enable(host->clk);
>  	host->enabled = 1;
> 
>  	return 0;
> @@ -841,7 +841,7 @@ static int __devinit mxsfb_probe(struct platform_device
> *pdev)
> 
>  error_register:
>  	if (host->enabled)
> -		clk_disable(host->clk);
> +		clk_disable_unprepare(host->clk);
>  	fb_destroy_modelist(&fb_info->modelist);
>  error_init_fb:
>  	kfree(fb_info->pseudo_palette);

Acked-by: Marek Vasut <marek.vasut@gmail.com>

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

* [PATCH 10/12] ASoC: mxs-saif: convert to clk_prepare/clk_unprepare
  2011-12-20 12:00 ` [PATCH 10/12] ASoC: mxs-saif: " Shawn Guo
  2011-12-20 11:55   ` Mark Brown
@ 2011-12-20 13:49   ` Marek Vasut
  1 sibling, 0 replies; 40+ messages in thread
From: Marek Vasut @ 2011-12-20 13:49 UTC (permalink / raw)
  To: linux-arm-kernel

> The patch converts mxs-saif driver to clk_prepare/clk_unprepare by
> using helper functions clk_prepare_enable/clk_disable_unprepare.
> 
> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> Cc: Dong Aisheng <b29396@freescale.com>
> Cc: Liam Girdwood <lrg@ti.com>
> Cc: Mark Brown <broonie@opensource.wolfsonmicro.com>
> ---
>  sound/soc/mxs/mxs-saif.c |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/sound/soc/mxs/mxs-saif.c b/sound/soc/mxs/mxs-saif.c
> index 76dc74d..ef1abb5 100644
> --- a/sound/soc/mxs/mxs-saif.c
> +++ b/sound/soc/mxs/mxs-saif.c
> @@ -210,7 +210,7 @@ int mxs_saif_put_mclk(unsigned int saif_id)
>  		return -EBUSY;
>  	}
> 
> -	clk_disable(saif->clk);
> +	clk_disable_unprepare(saif->clk);
> 
>  	/* disable MCLK output */
>  	__raw_writel(BM_SAIF_CTRL_CLKGATE,
> @@ -264,7 +264,7 @@ int mxs_saif_get_mclk(unsigned int saif_id, unsigned
> int mclk, if (ret)
>  		return ret;
> 
> -	ret = clk_enable(saif->clk);
> +	ret = clk_prepare_enable(saif->clk);
>  	if (ret)
>  		return ret;

Acked-by: Marek Vasut <marek.vasut@gmail.com>

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

* [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api
  2011-12-20 14:05   ` Shawn Guo
@ 2011-12-20 13:59     ` Marek Vasut
  2011-12-20 14:21       ` Shawn Guo
  0 siblings, 1 reply; 40+ messages in thread
From: Marek Vasut @ 2011-12-20 13:59 UTC (permalink / raw)
  To: linux-arm-kernel

> On Tue, Dec 20, 2011 at 02:43:02PM +0100, Marek Vasut wrote:
> > > The mutex locking problem on mxs platform has been reported on mailing
> > > list for a few time.  The cause is that a mutex is being held in mxs
> > > clock api clk_enable/clk_disable which are being called by some mxs
> > > clock client drivers like amba-pl011 and mxs-saif in atomic context.
> > > 
> > > This series takes Russell's suggestion to:
> > >  * Convert all mxs clock client drivers to clk_prepare/clk_unprepare.
> > >  
> > >    (I hope the series has covered all the drivers, but appreciate any
> > >    reminding on any missing ones.)
> > 
> > serial/amba-pl011.c isn't converted, that's where I originally observed
> > the issue.
> 
> The amba-pl011 on mainline had already been converted by Russell.  The
> reason we are still seeing the problem is that clk_prepare/clk_unprepare
> is dummy while clk_enable/clk_disable holds mutex on mxs clock api.
> And this series is trying to swap the their position to have the problem
> fixed.
> 
> You can try this series out to see if your problem goes away :)

Shawn, what exact tree should I use for the test / what branch. I'm slightly 
confused here. So far, I used next/master since it contained all the stuff I 
needed (gpmi nand etc).

Thanks!

M

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

* [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api
  2011-12-20 13:43 ` [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api Marek Vasut
@ 2011-12-20 14:05   ` Shawn Guo
  2011-12-20 13:59     ` Marek Vasut
  0 siblings, 1 reply; 40+ messages in thread
From: Shawn Guo @ 2011-12-20 14:05 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, Dec 20, 2011 at 02:43:02PM +0100, Marek Vasut wrote:
> > The mutex locking problem on mxs platform has been reported on mailing
> > list for a few time.  The cause is that a mutex is being held in mxs
> > clock api clk_enable/clk_disable which are being called by some mxs
> > clock client drivers like amba-pl011 and mxs-saif in atomic context.
> > 
> > This series takes Russell's suggestion to:
> > 
> >  * Convert all mxs clock client drivers to clk_prepare/clk_unprepare.
> >    (I hope the series has covered all the drivers, but appreciate any
> >    reminding on any missing ones.)
> 
> serial/amba-pl011.c isn't converted, that's where I originally observed the 
> issue.

The amba-pl011 on mainline had already been converted by Russell.  The
reason we are still seeing the problem is that clk_prepare/clk_unprepare
is dummy while clk_enable/clk_disable holds mutex on mxs clock api.
And this series is trying to swap the their position to have the problem
fixed.

You can try this series out to see if your problem goes away :)

-- 
Regards,
Shawn

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

* [PATCH 08/12] serial: mxs-auart: convert to clk_prepare/clk_unprepare
  2011-12-20 13:49   ` Marek Vasut
@ 2011-12-20 14:07     ` Uwe Kleine-König
  2011-12-20 21:15       ` Russell King - ARM Linux
  2011-12-20 14:27     ` Shawn Guo
  1 sibling, 1 reply; 40+ messages in thread
From: Uwe Kleine-König @ 2011-12-20 14:07 UTC (permalink / raw)
  To: linux-arm-kernel

Hello,

On Tue, Dec 20, 2011 at 02:49:13PM +0100, Marek Vasut wrote:
> > The patch converts mxs-auart driver to clk_prepare/clk_unprepare by
> > using helper functions clk_prepare_enable/clk_disable_unprepare.
> > 
> > Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> > Cc: Sascha Hauer <s.hauer@pengutronix.de>
> > Cc: Alan Cox <alan@linux.intel.com>
> > ---
> >  drivers/tty/serial/mxs-auart.c |    8 ++++----
> >  1 files changed, 4 insertions(+), 4 deletions(-)
> > 
> > diff --git a/drivers/tty/serial/mxs-auart.c
> > b/drivers/tty/serial/mxs-auart.c index 7e02c9c..c33500a 100644
> > --- a/drivers/tty/serial/mxs-auart.c
> > +++ b/drivers/tty/serial/mxs-auart.c
> > @@ -424,7 +424,7 @@ static int mxs_auart_startup(struct uart_port *u)
> >  {
> >  	struct mxs_auart_port *s = to_auart_port(u);
> > 
> > -	clk_enable(s->clk);
> > +	clk_prepare_enable(s->clk);
> > 
> >  	writel(AUART_CTRL0_CLKGATE, u->membase + AUART_CTRL0_CLR);
> > 
> > @@ -453,7 +453,7 @@ static void mxs_auart_shutdown(struct uart_port *u)
> >  	writel(AUART_INTR_RXIEN | AUART_INTR_RTIEN | AUART_INTR_CTSMIEN,
> >  			u->membase + AUART_INTR_CLR);
> > 
> > -	clk_disable(s->clk);
> > +	clk_disable_unprepare(s->clk);
> >  }
> > 
> >  static unsigned int mxs_auart_tx_empty(struct uart_port *u)
> > @@ -634,7 +634,7 @@ auart_console_setup(struct console *co, char *options)
> >  	if (!s)
> >  		return -ENODEV;
> > 
> > -	clk_enable(s->clk);
> > +	clk_prepare_enable(s->clk);
> > 
> >  	if (options)
> >  		uart_parse_options(options, &baud, &parity, &bits, &flow);
> > @@ -643,7 +643,7 @@ auart_console_setup(struct console *co, char *options)
> > 
> >  	ret = uart_set_options(&s->port, co, baud, parity, bits, flow);
> > 
> > -	clk_disable(s->clk);
> > +	clk_disable_unprepare(s->clk);
> > 
> >  	return ret;
> >  }
> 
> DTTO here, are you sure all of them are not called from atomic ctx?
the startup callback is called with irqs off. AFAIK clk_prepare should
be called in request_port and console_setup.

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-K?nig            |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |

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

* [PATCH 01/12] clk: add helper functions clk_prepare_enable and clk_disable_unprepare
  2011-12-20 13:48   ` Marek Vasut
@ 2011-12-20 14:09     ` Shawn Guo
  0 siblings, 0 replies; 40+ messages in thread
From: Shawn Guo @ 2011-12-20 14:09 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, Dec 20, 2011 at 02:48:10PM +0100, Marek Vasut wrote:
> > From: Richard Zhao <richard.zhao@linaro.org>
> > 
> > It's for migrating to generic clk framework API.
> > 
> > The helper functions  help cases clk_enable/clk_disable is used
> > in non-atomic context.
> > For example, Call clk_enable in probe and clk_disable in remove.
> > 
> > Signed-off-by: Richard Zhao <richard.zhao@linaro.org>
> > Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
> > Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> > Cc: Russell King <linux@arm.linux.org.uk>
> > ---
> >  include/linux/clk.h |   22 ++++++++++++++++++++++
> >  1 files changed, 22 insertions(+), 0 deletions(-)
> > 
> > diff --git a/include/linux/clk.h b/include/linux/clk.h
> > index 7213b52..b9d46fa 100644
> > --- a/include/linux/clk.h
> > +++ b/include/linux/clk.h
> > @@ -107,6 +107,28 @@ static inline void clk_unprepare(struct clk *clk)
> >  }
> >  #endif
> > 
> > +/* clk_prepare_enable helps cases using clk_enable in non-atomic context.
> > */ +static inline int clk_prepare_enable(struct clk *clk)
> > +{
> > +	int ret;
> > +
> > +	ret = clk_prepare(clk);
> > +	if (ret)
> > +		return ret;
> > +	ret = clk_enable(clk);
> > +	if (ret)
> > +		clk_unprepare(clk);
> > +
> > +	return ret;
> > +}
> > +
> > +/* clk_disable_unprepare helps cases using clk_disable in non-atomic
> > context. */ +static inline void clk_disable_unprepare(struct clk *clk)
> > +{
> > +	clk_disable(clk);
> > +	clk_unprepare(clk);
> > +}
> > +
> >  /**
> >   * clk_get_rate - obtain the current clock rate (in Hz) for a clock
> > source. *		  This is only valid once the clock source has been 
> enabled.
> 
> Just be sure clk_prepare() is always available (which I suspect is checked in 
> the implementation, so ok). Other than that, 
> 
If HAVE_CLK_PREPARE is selected for given clock api implementation,
that implementation needs to provide clk_prepare().  Otherwise,
there is a dummy one provided by include/linux/clk.h.

-- 
Regards,
Shawn

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

* [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api
  2011-12-20 13:59     ` Marek Vasut
@ 2011-12-20 14:21       ` Shawn Guo
  0 siblings, 0 replies; 40+ messages in thread
From: Shawn Guo @ 2011-12-20 14:21 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, Dec 20, 2011 at 02:59:38PM +0100, Marek Vasut wrote:
> Shawn, what exact tree should I use for the test / what branch. I'm slightly 
> confused here. So far, I used next/master since it contained all the stuff I 
> needed (gpmi nand etc).
> 
git://git.linaro.org/people/shawnguo/linux-2.6.git mxs/clk-prepare

It's based on v3.2-rc6, but I guess it can be merged to next/master
without any major problem.

-- 
Regards,
Shawn

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

* [PATCH 07/12] net: flexcan: convert to clk_prepare/clk_unprepare
  2011-12-20 13:48   ` Marek Vasut
@ 2011-12-20 14:23     ` Shawn Guo
  0 siblings, 0 replies; 40+ messages in thread
From: Shawn Guo @ 2011-12-20 14:23 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, Dec 20, 2011 at 02:48:48PM +0100, Marek Vasut wrote:
> > The patch converts flexcan driver to clk_prepare/clk_unprepare by
> > using helper functions clk_prepare_enable/clk_disable_unprepare.
> > 
> > Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> > Cc: Marc Kleine-Budde <mkl@pengutronix.de>
> > Cc: David S. Miller <davem@davemloft.net>
> > ---
> >  drivers/net/can/flexcan.c |   10 +++++-----
> >  1 files changed, 5 insertions(+), 5 deletions(-)
> > 
> > diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c
> > index e023379..fdd0f3f 100644
> > --- a/drivers/net/can/flexcan.c
> > +++ b/drivers/net/can/flexcan.c
> > @@ -802,7 +802,7 @@ static int flexcan_open(struct net_device *dev)
> >  	struct flexcan_priv *priv = netdev_priv(dev);
> >  	int err;
> > 
> > -	clk_enable(priv->clk);
> > +	clk_prepare_enable(priv->clk);
> > 
> >  	err = open_candev(dev);
> >  	if (err)
> > @@ -824,7 +824,7 @@ static int flexcan_open(struct net_device *dev)
> >   out_close:
> >  	close_candev(dev);
> >   out:
> > -	clk_disable(priv->clk);
> > +	clk_disable_unprepare(priv->clk);
> > 
> >  	return err;
> >  }
> > @@ -838,7 +838,7 @@ static int flexcan_close(struct net_device *dev)
> >  	flexcan_chip_stop(dev);
> > 
> >  	free_irq(dev->irq, dev);
> > -	clk_disable(priv->clk);
> > +	clk_disable_unprepare(priv->clk);
> > 
> >  	close_candev(dev);
> > 
> > @@ -877,7 +877,7 @@ static int __devinit register_flexcandev(struct
> > net_device *dev) struct flexcan_regs __iomem *regs = priv->base;
> >  	u32 reg, err;
> > 
> > -	clk_enable(priv->clk);
> > +	clk_prepare_enable(priv->clk);
> > 
> >  	/* select "bus clock", chip must be disabled */
> >  	flexcan_chip_disable(priv);
> > @@ -911,7 +911,7 @@ static int __devinit register_flexcandev(struct
> > net_device *dev) out:
> >  	/* disable core and turn off clocks */
> >  	flexcan_chip_disable(priv);
> > -	clk_disable(priv->clk);
> > +	clk_disable_unprepare(priv->clk);
> > 
> >  	return err;
> >  }
> 
> Are you sure close()/open() ops are not called from atomic?
> 
That's my understanding.  But I Cc-ed Marc and David for help :)

-- 
Regards,
Shawn

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

* [PATCH 08/12] serial: mxs-auart: convert to clk_prepare/clk_unprepare
  2011-12-20 13:49   ` Marek Vasut
  2011-12-20 14:07     ` Uwe Kleine-König
@ 2011-12-20 14:27     ` Shawn Guo
  1 sibling, 0 replies; 40+ messages in thread
From: Shawn Guo @ 2011-12-20 14:27 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, Dec 20, 2011 at 02:49:13PM +0100, Marek Vasut wrote:
> > The patch converts mxs-auart driver to clk_prepare/clk_unprepare by
> > using helper functions clk_prepare_enable/clk_disable_unprepare.
> > 
> > Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> > Cc: Sascha Hauer <s.hauer@pengutronix.de>
> > Cc: Alan Cox <alan@linux.intel.com>
> > ---
> >  drivers/tty/serial/mxs-auart.c |    8 ++++----
> >  1 files changed, 4 insertions(+), 4 deletions(-)
> > 
> > diff --git a/drivers/tty/serial/mxs-auart.c
> > b/drivers/tty/serial/mxs-auart.c index 7e02c9c..c33500a 100644
> > --- a/drivers/tty/serial/mxs-auart.c
> > +++ b/drivers/tty/serial/mxs-auart.c
> > @@ -424,7 +424,7 @@ static int mxs_auart_startup(struct uart_port *u)
> >  {
> >  	struct mxs_auart_port *s = to_auart_port(u);
> > 
> > -	clk_enable(s->clk);
> > +	clk_prepare_enable(s->clk);
> > 
> >  	writel(AUART_CTRL0_CLKGATE, u->membase + AUART_CTRL0_CLR);
> > 
> > @@ -453,7 +453,7 @@ static void mxs_auart_shutdown(struct uart_port *u)
> >  	writel(AUART_INTR_RXIEN | AUART_INTR_RTIEN | AUART_INTR_CTSMIEN,
> >  			u->membase + AUART_INTR_CLR);
> > 
> > -	clk_disable(s->clk);
> > +	clk_disable_unprepare(s->clk);
> >  }
> > 
> >  static unsigned int mxs_auart_tx_empty(struct uart_port *u)
> > @@ -634,7 +634,7 @@ auart_console_setup(struct console *co, char *options)
> >  	if (!s)
> >  		return -ENODEV;
> > 
> > -	clk_enable(s->clk);
> > +	clk_prepare_enable(s->clk);
> > 
> >  	if (options)
> >  		uart_parse_options(options, &baud, &parity, &bits, &flow);
> > @@ -643,7 +643,7 @@ auart_console_setup(struct console *co, char *options)
> > 
> >  	ret = uart_set_options(&s->port, co, baud, parity, bits, flow);
> > 
> > -	clk_disable(s->clk);
> > +	clk_disable_unprepare(s->clk);
> > 
> >  	return ret;
> >  }
> 
> DTTO here, are you sure all of them are not called from atomic ctx?
> 
Yes.  My understanding is that only the clk_enable/clk_disable in
auart_console_write() will be called in atomic context.

-- 
Regards,
Shawn

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

* [PATCH 02/12] arm/mxs: convert platform code to clk_prepare/clk_unprepare
  2011-12-20 13:44   ` Marek Vasut
@ 2011-12-20 21:11     ` Russell King - ARM Linux
  2011-12-20 21:28       ` Marek Vasut
  0 siblings, 1 reply; 40+ messages in thread
From: Russell King - ARM Linux @ 2011-12-20 21:11 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, Dec 20, 2011 at 02:44:40PM +0100, Marek Vasut wrote:
> I still wonder how to handle the DUART -- amba-pl011 -- maybe we should
> toggle the clock here too ?

amba-pl011, along with all the other Primecells and a few other devices,
have already been converted to use clk_prepare() in the appropriate
places.  See the bunch of commits from
7ff6bcf048e6a9849ea0b44269fa4c1c72869db2 to (and including)
40d3e0f4942ec12c4521fe1b2a2b774164cd2c80.

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

* [PATCH 08/12] serial: mxs-auart: convert to clk_prepare/clk_unprepare
  2011-12-20 14:07     ` Uwe Kleine-König
@ 2011-12-20 21:15       ` Russell King - ARM Linux
  2011-12-20 21:28         ` Marek Vasut
  0 siblings, 1 reply; 40+ messages in thread
From: Russell King - ARM Linux @ 2011-12-20 21:15 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, Dec 20, 2011 at 03:07:50PM +0100, Uwe Kleine-K?nig wrote:
> Hello,
> 
> On Tue, Dec 20, 2011 at 02:49:13PM +0100, Marek Vasut wrote:
> > > The patch converts mxs-auart driver to clk_prepare/clk_unprepare by
> > > using helper functions clk_prepare_enable/clk_disable_unprepare.
> > > 
> > > Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> > > Cc: Sascha Hauer <s.hauer@pengutronix.de>
> > > Cc: Alan Cox <alan@linux.intel.com>
> > > ---
> > >  drivers/tty/serial/mxs-auart.c |    8 ++++----
> > >  1 files changed, 4 insertions(+), 4 deletions(-)
> > > 
> > > diff --git a/drivers/tty/serial/mxs-auart.c
> > > b/drivers/tty/serial/mxs-auart.c index 7e02c9c..c33500a 100644
> > > --- a/drivers/tty/serial/mxs-auart.c
> > > +++ b/drivers/tty/serial/mxs-auart.c
> > > @@ -424,7 +424,7 @@ static int mxs_auart_startup(struct uart_port *u)
> > >  {
> > >  	struct mxs_auart_port *s = to_auart_port(u);
> > > 
> > > -	clk_enable(s->clk);
> > > +	clk_prepare_enable(s->clk);
> > > 
> > >  	writel(AUART_CTRL0_CLKGATE, u->membase + AUART_CTRL0_CLR);
> > > 
> > > @@ -453,7 +453,7 @@ static void mxs_auart_shutdown(struct uart_port *u)
> > >  	writel(AUART_INTR_RXIEN | AUART_INTR_RTIEN | AUART_INTR_CTSMIEN,
> > >  			u->membase + AUART_INTR_CLR);
> > > 
> > > -	clk_disable(s->clk);
> > > +	clk_disable_unprepare(s->clk);
> > >  }
> > > 
> > >  static unsigned int mxs_auart_tx_empty(struct uart_port *u)
> > > @@ -634,7 +634,7 @@ auart_console_setup(struct console *co, char *options)
> > >  	if (!s)
> > >  		return -ENODEV;
> > > 
> > > -	clk_enable(s->clk);
> > > +	clk_prepare_enable(s->clk);
> > > 
> > >  	if (options)
> > >  		uart_parse_options(options, &baud, &parity, &bits, &flow);
> > > @@ -643,7 +643,7 @@ auart_console_setup(struct console *co, char *options)
> > > 
> > >  	ret = uart_set_options(&s->port, co, baud, parity, bits, flow);
> > > 
> > > -	clk_disable(s->clk);
> > > +	clk_disable_unprepare(s->clk);
> > > 
> > >  	return ret;
> > >  }
> > 
> > DTTO here, are you sure all of them are not called from atomic ctx?
> the startup callback is called with irqs off.

It shouldn't be, as it has to do things like request_irq() which can
sleep.  The documentation in Documentation/serial/driver is now out
of date, and can't be relied upon.

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

* [PATCH 08/12] serial: mxs-auart: convert to clk_prepare/clk_unprepare
  2011-12-20 21:15       ` Russell King - ARM Linux
@ 2011-12-20 21:28         ` Marek Vasut
  2011-12-20 22:24           ` Russell King - ARM Linux
  0 siblings, 1 reply; 40+ messages in thread
From: Marek Vasut @ 2011-12-20 21:28 UTC (permalink / raw)
  To: linux-arm-kernel

> On Tue, Dec 20, 2011 at 03:07:50PM +0100, Uwe Kleine-K?nig wrote:
> > Hello,
> > 
> > On Tue, Dec 20, 2011 at 02:49:13PM +0100, Marek Vasut wrote:
> > > > The patch converts mxs-auart driver to clk_prepare/clk_unprepare by
> > > > using helper functions clk_prepare_enable/clk_disable_unprepare.
> > > > 
> > > > Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> > > > Cc: Sascha Hauer <s.hauer@pengutronix.de>
> > > > Cc: Alan Cox <alan@linux.intel.com>
> > > > ---
> > > > 
> > > >  drivers/tty/serial/mxs-auart.c |    8 ++++----
> > > >  1 files changed, 4 insertions(+), 4 deletions(-)
> > > > 
> > > > diff --git a/drivers/tty/serial/mxs-auart.c
> > > > b/drivers/tty/serial/mxs-auart.c index 7e02c9c..c33500a 100644
> > > > --- a/drivers/tty/serial/mxs-auart.c
> > > > +++ b/drivers/tty/serial/mxs-auart.c
> > > > @@ -424,7 +424,7 @@ static int mxs_auart_startup(struct uart_port *u)
> > > > 
> > > >  {
> > > >  
> > > >  	struct mxs_auart_port *s = to_auart_port(u);
> > > > 
> > > > -	clk_enable(s->clk);
> > > > +	clk_prepare_enable(s->clk);
> > > > 
> > > >  	writel(AUART_CTRL0_CLKGATE, u->membase + AUART_CTRL0_CLR);
> > > > 
> > > > @@ -453,7 +453,7 @@ static void mxs_auart_shutdown(struct uart_port
> > > > *u)
> > > > 
> > > >  	writel(AUART_INTR_RXIEN | AUART_INTR_RTIEN | AUART_INTR_CTSMIEN,
> > > >  	
> > > >  			u->membase + AUART_INTR_CLR);
> > > > 
> > > > -	clk_disable(s->clk);
> > > > +	clk_disable_unprepare(s->clk);
> > > > 
> > > >  }
> > > >  
> > > >  static unsigned int mxs_auart_tx_empty(struct uart_port *u)
> > > > 
> > > > @@ -634,7 +634,7 @@ auart_console_setup(struct console *co, char
> > > > *options)
> > > > 
> > > >  	if (!s)
> > > >  	
> > > >  		return -ENODEV;
> > > > 
> > > > -	clk_enable(s->clk);
> > > > +	clk_prepare_enable(s->clk);
> > > > 
> > > >  	if (options)
> > > >  	
> > > >  		uart_parse_options(options, &baud, &parity, &bits, 
&flow);
> > > > 
> > > > @@ -643,7 +643,7 @@ auart_console_setup(struct console *co, char
> > > > *options)
> > > > 
> > > >  	ret = uart_set_options(&s->port, co, baud, parity, bits, flow);
> > > > 
> > > > -	clk_disable(s->clk);
> > > > +	clk_disable_unprepare(s->clk);
> > > > 
> > > >  	return ret;
> > > >  
> > > >  }
> > > 
> > > DTTO here, are you sure all of them are not called from atomic ctx?
> > 
> > the startup callback is called with irqs off.
> 
> It shouldn't be, as it has to do things like request_irq() which can
> sleep.  The documentation in Documentation/serial/driver is now out
> of date, and can't be relied upon.

auart_rx/tx_empty() shouldn't be called from atomic context? It doesn't really 
look that way. The name is probably misleading though.

M

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

* [PATCH 02/12] arm/mxs: convert platform code to clk_prepare/clk_unprepare
  2011-12-20 21:11     ` Russell King - ARM Linux
@ 2011-12-20 21:28       ` Marek Vasut
  0 siblings, 0 replies; 40+ messages in thread
From: Marek Vasut @ 2011-12-20 21:28 UTC (permalink / raw)
  To: linux-arm-kernel

> On Tue, Dec 20, 2011 at 02:44:40PM +0100, Marek Vasut wrote:
> > I still wonder how to handle the DUART -- amba-pl011 -- maybe we should
> > toggle the clock here too ?
> 
> amba-pl011, along with all the other Primecells and a few other devices,
> have already been converted to use clk_prepare() in the appropriate
> places.  See the bunch of commits from
> 7ff6bcf048e6a9849ea0b44269fa4c1c72869db2 to (and including)
> 40d3e0f4942ec12c4521fe1b2a2b774164cd2c80.

Thanks!

M

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

* [PATCH 08/12] serial: mxs-auart: convert to clk_prepare/clk_unprepare
  2011-12-20 21:28         ` Marek Vasut
@ 2011-12-20 22:24           ` Russell King - ARM Linux
  2011-12-21  1:06             ` Marek Vasut
  0 siblings, 1 reply; 40+ messages in thread
From: Russell King - ARM Linux @ 2011-12-20 22:24 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, Dec 20, 2011 at 10:28:26PM +0100, Marek Vasut wrote:
> > On Tue, Dec 20, 2011 at 03:07:50PM +0100, Uwe Kleine-K?nig wrote:
> > > Hello,
> > > 
> > > On Tue, Dec 20, 2011 at 02:49:13PM +0100, Marek Vasut wrote:
> > > > > The patch converts mxs-auart driver to clk_prepare/clk_unprepare by
> > > > > using helper functions clk_prepare_enable/clk_disable_unprepare.
> > > > > 
> > > > > Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> > > > > Cc: Sascha Hauer <s.hauer@pengutronix.de>
> > > > > Cc: Alan Cox <alan@linux.intel.com>
> > > > > ---
> > > > > 
> > > > >  drivers/tty/serial/mxs-auart.c |    8 ++++----
> > > > >  1 files changed, 4 insertions(+), 4 deletions(-)
> > > > > 
> > > > > diff --git a/drivers/tty/serial/mxs-auart.c
> > > > > b/drivers/tty/serial/mxs-auart.c index 7e02c9c..c33500a 100644
> > > > > --- a/drivers/tty/serial/mxs-auart.c
> > > > > +++ b/drivers/tty/serial/mxs-auart.c
> > > > > @@ -424,7 +424,7 @@ static int mxs_auart_startup(struct uart_port *u)
> > > > > 
> > > > >  {
> > > > >  
> > > > >  	struct mxs_auart_port *s = to_auart_port(u);
> > > > > 
> > > > > -	clk_enable(s->clk);
> > > > > +	clk_prepare_enable(s->clk);
> > > > > 
> > > > >  	writel(AUART_CTRL0_CLKGATE, u->membase + AUART_CTRL0_CLR);
> > > > > 
> > > > > @@ -453,7 +453,7 @@ static void mxs_auart_shutdown(struct uart_port
> > > > > *u)
> > > > > 
> > > > >  	writel(AUART_INTR_RXIEN | AUART_INTR_RTIEN | AUART_INTR_CTSMIEN,
> > > > >  	
> > > > >  			u->membase + AUART_INTR_CLR);
> > > > > 
> > > > > -	clk_disable(s->clk);
> > > > > +	clk_disable_unprepare(s->clk);
> > > > > 
> > > > >  }
> > > > >  
> > > > >  static unsigned int mxs_auart_tx_empty(struct uart_port *u)
> > > > > 
> > > > > @@ -634,7 +634,7 @@ auart_console_setup(struct console *co, char
> > > > > *options)
> > > > > 
> > > > >  	if (!s)
> > > > >  	
> > > > >  		return -ENODEV;
> > > > > 
> > > > > -	clk_enable(s->clk);
> > > > > +	clk_prepare_enable(s->clk);
> > > > > 
> > > > >  	if (options)
> > > > >  	
> > > > >  		uart_parse_options(options, &baud, &parity, &bits, 
> &flow);
> > > > > 
> > > > > @@ -643,7 +643,7 @@ auart_console_setup(struct console *co, char
> > > > > *options)
> > > > > 
> > > > >  	ret = uart_set_options(&s->port, co, baud, parity, bits, flow);
> > > > > 
> > > > > -	clk_disable(s->clk);
> > > > > +	clk_disable_unprepare(s->clk);
> > > > > 
> > > > >  	return ret;
> > > > >  
> > > > >  }
> > > > 
> > > > DTTO here, are you sure all of them are not called from atomic ctx?
> > > 
> > > the startup callback is called with irqs off.
> > 
> > It shouldn't be, as it has to do things like request_irq() which can
> > sleep.  The documentation in Documentation/serial/driver is now out
> > of date, and can't be relied upon.
> 
> auart_rx/tx_empty() shouldn't be called from atomic context? It
> doesn't really look that way. The name is probably misleading though.

I can't find an auart_rx nor auart_rx_empty() function.

The tx_empty function should only be called while the port is started-up,
and in any case is only called from process context.  (Functions calling
this also call put_user(), msleep() or other functions which can cause
schedule events.)

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

* [PATCH 08/12] serial: mxs-auart: convert to clk_prepare/clk_unprepare
  2011-12-20 22:24           ` Russell King - ARM Linux
@ 2011-12-21  1:06             ` Marek Vasut
  0 siblings, 0 replies; 40+ messages in thread
From: Marek Vasut @ 2011-12-21  1:06 UTC (permalink / raw)
  To: linux-arm-kernel

> On Tue, Dec 20, 2011 at 10:28:26PM +0100, Marek Vasut wrote:
> > > On Tue, Dec 20, 2011 at 03:07:50PM +0100, Uwe Kleine-K?nig wrote:
> > > > Hello,
> > > > 
> > > > On Tue, Dec 20, 2011 at 02:49:13PM +0100, Marek Vasut wrote:
> > > > > > The patch converts mxs-auart driver to clk_prepare/clk_unprepare
> > > > > > by using helper functions
> > > > > > clk_prepare_enable/clk_disable_unprepare.
> > > > > > 
> > > > > > Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> > > > > > Cc: Sascha Hauer <s.hauer@pengutronix.de>
> > > > > > Cc: Alan Cox <alan@linux.intel.com>
> > > > > > ---
> > > > > > 
> > > > > >  drivers/tty/serial/mxs-auart.c |    8 ++++----
> > > > > >  1 files changed, 4 insertions(+), 4 deletions(-)
> > > > > > 
> > > > > > diff --git a/drivers/tty/serial/mxs-auart.c
> > > > > > b/drivers/tty/serial/mxs-auart.c index 7e02c9c..c33500a 100644
> > > > > > --- a/drivers/tty/serial/mxs-auart.c
> > > > > > +++ b/drivers/tty/serial/mxs-auart.c
> > > > > > @@ -424,7 +424,7 @@ static int mxs_auart_startup(struct uart_port
> > > > > > *u)
> > > > > > 
> > > > > >  {
> > > > > >  
> > > > > >  	struct mxs_auart_port *s = to_auart_port(u);
> > > > > > 
> > > > > > -	clk_enable(s->clk);
> > > > > > +	clk_prepare_enable(s->clk);
> > > > > > 
> > > > > >  	writel(AUART_CTRL0_CLKGATE, u->membase + AUART_CTRL0_CLR);
> > > > > > 
> > > > > > @@ -453,7 +453,7 @@ static void mxs_auart_shutdown(struct
> > > > > > uart_port *u)
> > > > > > 
> > > > > >  	writel(AUART_INTR_RXIEN | AUART_INTR_RTIEN |
> > > > > >  	AUART_INTR_CTSMIEN,
> > > > > >  	
> > > > > >  			u->membase + AUART_INTR_CLR);
> > > > > > 
> > > > > > -	clk_disable(s->clk);
> > > > > > +	clk_disable_unprepare(s->clk);
> > > > > > 
> > > > > >  }
> > > > > >  
> > > > > >  static unsigned int mxs_auart_tx_empty(struct uart_port *u)
> > > > > > 
> > > > > > @@ -634,7 +634,7 @@ auart_console_setup(struct console *co, char
> > > > > > *options)
> > > > > > 
> > > > > >  	if (!s)
> > > > > >  	
> > > > > >  		return -ENODEV;
> > > > > > 
> > > > > > -	clk_enable(s->clk);
> > > > > > +	clk_prepare_enable(s->clk);
> > > > > > 
> > > > > >  	if (options)
> > > > > >  	
> > > > > >  		uart_parse_options(options, &baud, &parity, &bits,
> > 
> > &flow);
> > 
> > > > > > @@ -643,7 +643,7 @@ auart_console_setup(struct console *co, char
> > > > > > *options)
> > > > > > 
> > > > > >  	ret = uart_set_options(&s->port, co, baud, parity, bits, flow);
> > > > > > 
> > > > > > -	clk_disable(s->clk);
> > > > > > +	clk_disable_unprepare(s->clk);
> > > > > > 
> > > > > >  	return ret;
> > > > > >  
> > > > > >  }
> > > > > 
> > > > > DTTO here, are you sure all of them are not called from atomic ctx?
> > > > 
> > > > the startup callback is called with irqs off.
> > > 
> > > It shouldn't be, as it has to do things like request_irq() which can
> > > sleep.  The documentation in Documentation/serial/driver is now out
> > > of date, and can't be relied upon.
> > 
> > auart_rx/tx_empty() shouldn't be called from atomic context? It
> > doesn't really look that way. The name is probably misleading though.
> 
> I can't find an auart_rx nor auart_rx_empty() function.
> 
> The tx_empty function should only be called while the port is started-up,
> and in any case is only called from process context.  (Functions calling
> this also call put_user(), msleep() or other functions which can cause
> schedule events.)

Well then this is cleared up :)

M

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

* [PATCH 09/12] video: mxsfb: convert to clk_prepare/clk_unprepare
  2011-12-20 12:00 ` [PATCH 09/12] video: mxsfb: " Shawn Guo
  2011-12-20 13:49   ` Marek Vasut
@ 2011-12-21  2:11   ` Florian Tobias Schandinat
  1 sibling, 0 replies; 40+ messages in thread
From: Florian Tobias Schandinat @ 2011-12-21  2:11 UTC (permalink / raw)
  To: linux-arm-kernel

On 12/20/2011 12:00 PM, Shawn Guo wrote:
> The patch converts mxsfb driver to clk_prepare/clk_unprepare by
> using helper functions clk_prepare_enable/clk_disable_unprepare.
> 
> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> Cc: Sascha Hauer <s.hauer@pengutronix.de>
> Cc: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>

Acked-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>

> ---
>  drivers/video/mxsfb.c |    8 ++++----
>  1 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/video/mxsfb.c b/drivers/video/mxsfb.c
> index d837d63..eb3c5ee 100644
> --- a/drivers/video/mxsfb.c
> +++ b/drivers/video/mxsfb.c
> @@ -328,7 +328,7 @@ static void mxsfb_enable_controller(struct fb_info *fb_info)
>  
>  	dev_dbg(&host->pdev->dev, "%s\n", __func__);
>  
> -	clk_enable(host->clk);
> +	clk_prepare_enable(host->clk);
>  	clk_set_rate(host->clk, PICOS2KHZ(fb_info->var.pixclock) * 1000U);
>  
>  	/* if it was disabled, re-enable the mode again */
> @@ -368,7 +368,7 @@ static void mxsfb_disable_controller(struct fb_info *fb_info)
>  
>  	writel(VDCTRL4_SYNC_SIGNALS_ON, host->base + LCDC_VDCTRL4 + REG_CLR);
>  
> -	clk_disable(host->clk);
> +	clk_disable_unprepare(host->clk);
>  
>  	host->enabled = 0;
>  }
> @@ -668,7 +668,7 @@ static int __devinit mxsfb_restore_mode(struct mxsfb_info *host)
>  	line_count = fb_info->fix.smem_len / fb_info->fix.line_length;
>  	fb_info->fix.ypanstep = 1;
>  
> -	clk_enable(host->clk);
> +	clk_prepare_enable(host->clk);
>  	host->enabled = 1;
>  
>  	return 0;
> @@ -841,7 +841,7 @@ static int __devinit mxsfb_probe(struct platform_device *pdev)
>  
>  error_register:
>  	if (host->enabled)
> -		clk_disable(host->clk);
> +		clk_disable_unprepare(host->clk);
>  	fb_destroy_modelist(&fb_info->modelist);
>  error_init_fb:
>  	kfree(fb_info->pseudo_palette);

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

* [PATCH 04/12] dma: mxs-dma: convert to clk_prepare/clk_unprepare
  2011-12-20 13:45   ` Marek Vasut
@ 2011-12-23 17:35     ` Vinod Koul
  0 siblings, 0 replies; 40+ messages in thread
From: Vinod Koul @ 2011-12-23 17:35 UTC (permalink / raw)
  To: linux-arm-kernel

On Tue, 2011-12-20 at 14:45 +0100, Marek Vasut wrote:
> > The patch converts mxs-dma driver to clk_prepare/clk_unprepare by
> > using helper functions clk_prepare_enable/clk_disable_unprepare.
> > 
> > Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> > Cc: Vinod Koul <vinod.koul@intel.com>
> > ---
> >  drivers/dma/mxs-dma.c |    8 ++++----
> >  1 files changed, 4 insertions(+), 4 deletions(-)
> > 
> > diff --git a/drivers/dma/mxs-dma.c b/drivers/dma/mxs-dma.c
> > index b4588bd..fc903c0 100644
> > --- a/drivers/dma/mxs-dma.c
> > +++ b/drivers/dma/mxs-dma.c
> > @@ -334,7 +334,7 @@ static int mxs_dma_alloc_chan_resources(struct dma_chan
> > *chan) goto err_irq;
> >  	}
> > 
> > -	ret = clk_enable(mxs_dma->clk);
> > +	ret = clk_prepare_enable(mxs_dma->clk);
> >  	if (ret)
> >  		goto err_clk;
> > 
> > @@ -372,7 +372,7 @@ static void mxs_dma_free_chan_resources(struct dma_chan
> > *chan) dma_free_coherent(mxs_dma->dma_device.dev, PAGE_SIZE,
> >  			mxs_chan->ccw, mxs_chan->ccw_phys);
> > 
> > -	clk_disable(mxs_dma->clk);
> > +	clk_disable_unprepare(mxs_dma->clk);
> >  }
> > 
> >  static struct dma_async_tx_descriptor *mxs_dma_prep_slave_sg(
> > @@ -578,7 +578,7 @@ static int __init mxs_dma_init(struct mxs_dma_engine
> > *mxs_dma) {
> >  	int ret;
> > 
> > -	ret = clk_enable(mxs_dma->clk);
> > +	ret = clk_prepare_enable(mxs_dma->clk);
> >  	if (ret)
> >  		goto err_out;
> > 
> > @@ -604,7 +604,7 @@ static int __init mxs_dma_init(struct mxs_dma_engine
> > *mxs_dma) writel(MXS_DMA_CHANNELS_MASK << MXS_DMA_CHANNELS,
> >  		mxs_dma->base + HW_APBHX_CTRL1 + MXS_SET_ADDR);
> > 
> > -	clk_disable(mxs_dma->clk);
> > +	clk_disable_unprepare(mxs_dma->clk);
> > 
> >  	return 0;
> 
> Acked-by: Marek Vasut <marek.vasut@gmail.com>
Acked-by: Vinod Koul <vinod.koul@linux.intel.com>


-- 
~Vinod

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

end of thread, other threads:[~2011-12-23 17:35 UTC | newest]

Thread overview: 40+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-12-20 12:00 [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api Shawn Guo
2011-12-20 12:00 ` [PATCH 01/12] clk: add helper functions clk_prepare_enable and clk_disable_unprepare Shawn Guo
2011-12-20 13:48   ` Marek Vasut
2011-12-20 14:09     ` Shawn Guo
2011-12-20 12:00 ` [PATCH 02/12] arm/mxs: convert platform code to clk_prepare/clk_unprepare Shawn Guo
2011-12-20 13:44   ` Marek Vasut
2011-12-20 21:11     ` Russell King - ARM Linux
2011-12-20 21:28       ` Marek Vasut
2011-12-20 12:00 ` [PATCH 03/12] net: fec: add clk_prepare/clk_unprepare Shawn Guo
2011-12-20 13:45   ` Marek Vasut
2011-12-20 12:00 ` [PATCH 04/12] dma: mxs-dma: convert to clk_prepare/clk_unprepare Shawn Guo
2011-12-20 13:45   ` Marek Vasut
2011-12-23 17:35     ` Vinod Koul
2011-12-20 12:00 ` [PATCH 05/12] mmc: mxs-mmc: " Shawn Guo
2011-12-20 13:45   ` Marek Vasut
2011-12-20 12:00 ` [PATCH 06/12] mtd: gpmi-lib: " Shawn Guo
2011-12-20 13:46   ` Marek Vasut
2011-12-20 12:00 ` [PATCH 07/12] net: flexcan: " Shawn Guo
2011-12-20 13:48   ` Marek Vasut
2011-12-20 14:23     ` Shawn Guo
2011-12-20 12:00 ` [PATCH 08/12] serial: mxs-auart: " Shawn Guo
2011-12-20 13:49   ` Marek Vasut
2011-12-20 14:07     ` Uwe Kleine-König
2011-12-20 21:15       ` Russell King - ARM Linux
2011-12-20 21:28         ` Marek Vasut
2011-12-20 22:24           ` Russell King - ARM Linux
2011-12-21  1:06             ` Marek Vasut
2011-12-20 14:27     ` Shawn Guo
2011-12-20 12:00 ` [PATCH 09/12] video: mxsfb: " Shawn Guo
2011-12-20 13:49   ` Marek Vasut
2011-12-21  2:11   ` Florian Tobias Schandinat
2011-12-20 12:00 ` [PATCH 10/12] ASoC: mxs-saif: " Shawn Guo
2011-12-20 11:55   ` Mark Brown
2011-12-20 13:49   ` Marek Vasut
2011-12-20 12:00 ` [PATCH 11/12] clk: add config option HAVE_CLK_PREPARE into Kconfig Shawn Guo
2011-12-20 12:00 ` [PATCH 12/12] arm/mxs: select HAVE_CLK_PREPARE for clock Shawn Guo
2011-12-20 13:43 ` [PATCH 0/12] Add clk_prepare/clk_unprepare for mxs clock api Marek Vasut
2011-12-20 14:05   ` Shawn Guo
2011-12-20 13:59     ` Marek Vasut
2011-12-20 14:21       ` Shawn Guo

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.