All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] arm: mxs: use timeouts in block reset routines
@ 2012-10-30 14:21 Wolfram Sang
  2012-10-30 14:21 ` [PATCH 2/3] dma: apbh: check for errors when resetting ip core Wolfram Sang
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Wolfram Sang @ 2012-10-30 14:21 UTC (permalink / raw)
  To: barebox; +Cc: Wolfram Sang

These routines can fail, add support for that. Also, put in missing
copyright headers.

Signed-off-by: Wolfram Sang <w.sang@pengutronix.de>
---
 arch/arm/mach-mxs/common.c |   39 +++++++++++++++++++++++++++++++++++----
 1 file changed, 35 insertions(+), 4 deletions(-)

diff --git a/arch/arm/mach-mxs/common.c b/arch/arm/mach-mxs/common.c
index 3730633..122d883 100644
--- a/arch/arm/mach-mxs/common.c
+++ b/arch/arm/mach-mxs/common.c
@@ -1,8 +1,26 @@
+/*
+ * Freescale i.MXS common code
+ *
+ * Copyright (C) 2012 Wolfram Sang <w.sang@pengutronix.de>
+ *
+ * Based on code from LTIB:
+ * Copyright (C) 2010 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ */
+
 #include <common.h>
 #include <io.h>
+#include <errno.h>
+#include <clock.h>
 #include <mach/mxs.h>
 #include <mach/imx-regs.h>
 
+#define	MXS_IP_RESET_TIMEOUT	(10 * MSECOND)
+
 #define	MXS_BLOCK_SFTRST				(1 << 31)
 #define	MXS_BLOCK_CLKGATE				(1 << 30)
 
@@ -10,7 +28,9 @@ int mxs_reset_block(void __iomem *reg, int just_enable)
 {
 	/* Clear SFTRST */
 	writel(MXS_BLOCK_SFTRST, reg + BIT_CLR);
-	mdelay(1);
+
+	if (wait_on_timeout(MXS_IP_RESET_TIMEOUT, !(readl(reg) & MXS_BLOCK_SFTRST)))
+		goto timeout;
 
 	/* Clear CLKGATE */
 	writel(MXS_BLOCK_CLKGATE, reg + BIT_CLR);
@@ -18,16 +38,27 @@ int mxs_reset_block(void __iomem *reg, int just_enable)
 	if (!just_enable) {
 		/* Set SFTRST */
 		writel(MXS_BLOCK_SFTRST, reg + BIT_SET);
-		mdelay(1);
+
+		/* Wait for CLKGATE being set */
+		if (wait_on_timeout(MXS_IP_RESET_TIMEOUT, readl(reg) & MXS_BLOCK_CLKGATE))
+			goto timeout;
 	}
 
 	/* Clear SFTRST */
 	writel(MXS_BLOCK_SFTRST, reg + BIT_CLR);
-	mdelay(1);
+
+	if (wait_on_timeout(MXS_IP_RESET_TIMEOUT, !(readl(reg) & MXS_BLOCK_SFTRST)))
+		goto timeout;
 
 	/* Clear CLKGATE */
 	writel(MXS_BLOCK_CLKGATE, reg + BIT_CLR);
-	mdelay(1);
+
+	if (wait_on_timeout(MXS_IP_RESET_TIMEOUT, !(readl(reg) & MXS_BLOCK_CLKGATE)))
+		goto timeout;
 
 	return 0;
+
+timeout:
+	printf("MXS: Timeout resetting block via register 0x%p\n", reg);
+	return -ETIMEDOUT;
 }
-- 
1.7.10.4


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

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

end of thread, other threads:[~2012-10-31  9:39 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-30 14:21 [PATCH 1/3] arm: mxs: use timeouts in block reset routines Wolfram Sang
2012-10-30 14:21 ` [PATCH 2/3] dma: apbh: check for errors when resetting ip core Wolfram Sang
2012-10-31  8:29   ` Juergen Beisert
2012-10-31  8:36     ` Wolfram Sang
2012-10-31  8:48       ` Juergen Beisert
2012-10-31  8:54         ` Wolfram Sang
2012-10-31  9:29           ` Juergen Beisert
2012-10-31  9:39             ` Wolfram Sang
2012-10-30 14:21 ` [PATCH 3/3] mtd: nand: mxs: " Wolfram Sang
2012-10-31  7:37 ` [PATCH 1/3] arm: mxs: use timeouts in block reset routines Sascha Hauer

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.