--- /dev/null
+From linux-omap-owner@vger.kernel.org Sun Jun 22 10:11:39 2008\r
+Received: from localhost\r
+ ([127.0.0.1] helo=dominion ident=koen)\r
+ by dominion.dominion.void with esmtp (Exim 4.63)\r
+ (envelope-from <linux-omap-owner@vger.kernel.org>)\r
+ id 1KAKfj-0008Qc-FC\r
+ for koen@localhost; Sun, 22 Jun 2008 10:11:39 +0200\r
+Received: from xs.service.utwente.nl [130.89.5.250]\r
+ by dominion with POP3 (fetchmail-6.3.6)\r
+ for <koen@localhost> (single-drop); Sun, 22 Jun 2008 10:11:39 +0200 (CEST)\r
+Received: from mail.service.utwente.nl ([130.89.5.253]) by exchange.service.utwente.nl with Microsoft SMTPSVC(6.0.3790.3959);\r
+ Sat, 21 Jun 2008 19:06:02 +0200\r
+Received: from smtp.utwente.nl ([130.89.2.9]) by mail.service.utwente.nl with Microsoft SMTPSVC(6.0.3790.3959);\r
+ Sat, 21 Jun 2008 19:06:01 +0200\r
+Received: from vger.kernel.org (vger.kernel.org [209.132.176.167])\r
+ by smtp.utwente.nl (8.12.10/SuSE Linux 0.7) with ESMTP id m5LH5TSm026212\r
+ for <k.kooi@student.utwente.nl>; Sat, 21 Jun 2008 19:05:30 +0200\r
+Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand\r
+ id S1753396AbYFURFN (ORCPT <rfc822;k.kooi@student.utwente.nl>);\r
+ Sat, 21 Jun 2008 13:05:13 -0400\r
+Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753305AbYFURFN\r
+ (ORCPT <rfc822;linux-omap-outgoing>);\r
+ Sat, 21 Jun 2008 13:05:13 -0400\r
+Received: from utopia.booyaka.com ([72.9.107.138]:41675 "EHLO\r
+ utopia.booyaka.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\r
+ with ESMTP id S1753145AbYFURFL (ORCPT\r
+ <rfc822;linux-omap@vger.kernel.org>); Sat, 21 Jun 2008 13:05:11 -0400\r
+Received: (qmail 20532 invoked by uid 526); 21 Jun 2008 17:05:10 -0000\r
+Date: Sat, 21 Jun 2008 11:05:10 -0600 (MDT)\r
+From: Paul Walmsley <paul@pwsan.com>\r
+To: "Gadiyar, Anand" <gadiyar@ti.com>,\r
+ "linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>\r
+cc: Dirk Behme <dirk.behme@googlemail.com>,\r
+ "jouni.hogander@nokia.com" <jouni.hogander@nokia.com>\r
+Subject: [PATCH] OMAP3 clock: fix omap2_clk_wait_ready for OMAP3430ES2 DSS\r
+In-Reply-To: <5A47E75E594F054BAF48C5E4FC4B92AB022BB66209@dbde02.ent.ti.com>\r
+Message-ID: <alpine.DEB.1.00.0806211054100.19765@utopia.booyaka.com>\r
+References: <5A47E75E594F054BAF48C5E4FC4B92AB022BE46296@dbde02.ent.ti.com>,<485CA347.909@googlemail.com> <5A47E75E594F054BAF48C5E4FC4B92AB022BB66209@dbde02.ent.ti.com>\r
+User-Agent: Alpine 1.00 (DEB 882 2007-12-20)\r
+MIME-Version: 1.0\r
+Content-Type: TEXT/PLAIN; charset=US-ASCII\r
+Sender: linux-omap-owner@vger.kernel.org\r
+Precedence: bulk\r
+List-ID: <linux-omap.vger.kernel.org>\r
+X-Mailing-List: linux-omap@vger.kernel.org\r
+X-UTwente-MailScanner-Information: Scanned by MailScanner. Contact servicedesk@icts.utwente.nl for more information.\r
+X-UTwente-MailScanner: Found to be clean\r
+X-UTwente-MailScanner-From: linux-omap-owner@vger.kernel.org\r
+X-Spam-Status: No\r
+X-OriginalArrivalTime: 21 Jun 2008 17:06:02.0187 (UTC) FILETIME=[157001B0:01C8D3C1]\r
+\r
+\r
+On OMAP3430ES2, DSS has both an initiator standby CM_IDLEST bit, and a\r
+target idle CM_IDLEST bit. This is a departure from previous silicon,\r
+which only had an initiator standby bit.\r
+\r
+This means we need to test the target idle bit after enabling\r
+dss1_alwon_fclk. Previous clock code has done the wrong thing since ES2\r
+came out: it's either tested the wrong bit, causing intermittent\r
+\r
+ Clock dss1_alwon_fck didn't enable in 100000 tries\r
+\r
+messages; or not tested anything at all, causing intermittent crashes \r
+during DISPC initialization with:\r
+\r
+ Unhandled fault: external abort on non-linefetch (0x1028)\r
+\r
+This patch modifies omap2_clk_wait_ready() to wait for the DSS to become\r
+accessible after dss1_alwon_fclk is enabled.\r
+\r
+Thanks to Anand Gadiyar <gadiyar@ti.com> for identifying one of the\r
+problem patches.\r
+\r
+Signed-off-by: Paul Walmsley <paul@pwsan.com>\r
+---\r
+\r
+ arch/arm/mach-omap2/clock.c | 30 ++++++++++++++++++++++++------\r
+ arch/arm/mach-omap2/cm-regbits-34xx.h | 4 +++-\r
+ 2 files changed, 27 insertions(+), 7 deletions(-)\r
+\r
+diff --git a/arch/arm/mach-omap2/clock.c b/arch/arm/mach-omap2/clock.c\r
+index ed15868..1820f75 100644\r
+--- a/arch/arm/mach-omap2/clock.c\r
++++ b/arch/arm/mach-omap2/clock.c\r
+@@ -244,18 +244,36 @@ static void omap2_clk_wait_ready(struct clk *clk)\r
+ }\r
+ \r
+ /* REVISIT: What are the appropriate exclusions for 34XX? */\r
+- /* OMAP3: ignore DSS-mod clocks */\r
+- if (cpu_is_omap34xx() &&\r
+- ((reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(OMAP3430_DSS_MOD, 0) ||\r
+- (((reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(CORE_MOD, 0)) &&\r
+- clk->enable_bit == OMAP3430_EN_SSI_SHIFT)))\r
+- return;\r
++ if (cpu_is_omap34xx()) {\r
++\r
++ /* 3430ES1 DSS and SSI have no target idlest bits */\r
++ if (is_sil_rev_equal_to(OMAP3430_REV_ES1_0) &&\r
++ ((reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(OMAP3430_DSS_MOD, 0) ||\r
++ ((reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(CORE_MOD, 0) &&\r
++ clk->enable_bit == OMAP3430_EN_SSI_SHIFT)))\r
++ return;\r
++\r
++ /* Even for 3430ES2 DSS, only wait for dss1_alwon_fclk */\r
++ if (is_sil_rev_greater_than(OMAP3430_REV_ES1_0) &&\r
++ (reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(OMAP3430_DSS_MOD, 0) &&\r
++ clk->enable_bit != OMAP3430_EN_DSS1_SHIFT)\r
++ return;\r
++\r
++ }\r
+ \r
+ /* Check if both functional and interface clocks\r
+ * are running. */\r
+ bit = 1 << clk->enable_bit;\r
+ if (!(__raw_readl((__force void __iomem *)other_reg) & bit))\r
+ return;\r
++\r
++ /* OMAP3430ES2 DSS is an unusual case */\r
++ if (cpu_is_omap34xx() &&\r
++ (reg & ~0xff) == (__force u32)OMAP34XX_CM_REGADDR(OMAP3430_DSS_MOD, 0) &&\r
++ clk->enable_bit == OMAP3430_EN_DSS1_SHIFT) {\r
++ bit = OMAP3430ES2_ST_DSS_IDLE;\r
++ }\r
++\r
+ st_reg = ((other_reg & ~0xf0) | 0x20); /* CM_IDLEST* */\r
+ \r
+ omap2_wait_clock_ready((__force void __iomem *)st_reg, bit, clk->name);\r
+diff --git a/arch/arm/mach-omap2/cm-regbits-34xx.h b/arch/arm/mach-omap2/cm-regbits-34xx.h\r
+index 6ec66f4..946c552 100644\r
+--- a/arch/arm/mach-omap2/cm-regbits-34xx.h\r
++++ b/arch/arm/mach-omap2/cm-regbits-34xx.h\r
+@@ -500,7 +500,9 @@\r
+ #define OMAP3430_CM_ICLKEN_DSS_EN_DSS_SHIFT 0\r
+ \r
+ /* CM_IDLEST_DSS */\r
+-#define OMAP3430_ST_DSS (1 << 0)\r
++#define OMAP3430ES2_ST_DSS_IDLE (1 << 1)\r
++#define OMAP3430ES2_ST_DSS_STDBY (1 << 0)\r
++#define OMAP3430ES1_ST_DSS (1 << 0)\r
+ \r
+ /* CM_AUTOIDLE_DSS */\r
+ #define OMAP3430_AUTO_DSS (1 << 0)\r
+--\r
+To unsubscribe from this list: send the line "unsubscribe linux-omap" in\r
+the body of a message to majordomo@vger.kernel.org\r
+More majordomo info at http://vger.kernel.org/majordomo-info.html\r
+\r