Skip to contentSkip to conversation

OMAP3 dual-mode timer: data aborts after fclk re-enable

DISCUSSION Paul Walmsley 2 participants 2 messages Dec 4, 2007 1 message not in the archive

Subsystems (4)
lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]

Paul Walmsley

author maintainer
#1 lore raw

Hi Kevin,

Quoted 3 lines · Kevin Hilman

While working with the -rt patch + HRT on OMAP3, I'm seeing are data aborts during the first access to any timer register after the fclk is (re)enabled by dm_timer_set_source().

if this looks familiar,

<1>Unhandled fault: external abort on non-linefetch (0x1028) at 0xd9032010

perhaps this temporary patch -- not for git, there is a better implementation in the works -- might help?

- Paul

---
 arch/arm/mach-omap2/clock.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
arch/arm/mach-omap2/clock.c +4 -4
Index: linux-omap/arch/arm/mach-omap2/clock.c
===================================================================
@@ -202,11 +202,11 @@
 	 * it and pull it into struct clk itself somehow.
 	 */
 	reg = clk->enable_reg;
-	if (reg == OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1) ||
-	    reg == OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2))
+	if ((((u32)reg & 0xff) >= CM_FCLKEN1) &&
+	    (((u32)reg & 0xff) <= OMAP24XX_CM_FCLKEN2))
 		other_reg = (void __iomem *)(((u32)reg & ~0xf0) | 0x10); /* CM_ICLKEN* */
-	else if (reg == OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1) ||
-		 reg == OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2))
+	else if ((((u32)reg & 0xff) >= CM_ICLKEN1) &&
+		 (((u32)reg & 0xff) <= OMAP24XX_CM_ICLKEN4))
 		other_reg = (void __iomem *)(((u32)reg & ~0xf0) | 0x00); /* CM_FCLKEN* */
 	else
 		return;
#2 lore raw
Quoted 6 lines · Paul Walmsley
Quoted 3 lines · Kevin Hilman

While working with the -rt patch + HRT on OMAP3, I'm seeing are data aborts during the first access to any timer register after the fclk is (re)enabled by dm_timer_set_source().

Quoted 6 lines

if this looks familiar,

<1>Unhandled fault: external abort on non-linefetch (0x1028) at 0xd9032010

perhaps this temporary patch -- not for git, there is a better implementation in the works -- might help?

Yup, that looks like it. I should've asked sooner.

Kevin

Quoted 28 lines
---
 arch/arm/mach-omap2/clock.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

Index: linux-omap/arch/arm/mach-omap2/clock.c
===================================================================

arch/arm/mach-omap2/clock.c +4 -5
@@ -202,11 +202,11 @@
 	 * it and pull it into struct clk itself somehow.
 	 */
 	reg = clk->enable_reg;
-	if (reg == OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1) ||
-	    reg == OMAP_CM_REGADDR(CORE_MOD, OMAP24XX_CM_FCLKEN2))
+	if ((((u32)reg & 0xff) >= CM_FCLKEN1) &&
+	    (((u32)reg & 0xff) <= OMAP24XX_CM_FCLKEN2))
 		other_reg = (void __iomem *)(((u32)reg & ~0xf0) | 0x10); /* CM_ICLKEN* */
-	else if (reg == OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1) ||
-		 reg == OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN2))
+	else if ((((u32)reg & 0xff) >= CM_ICLKEN1) &&
+		 (((u32)reg & 0xff) <= OMAP24XX_CM_ICLKEN4))
 		other_reg = (void __iomem *)(((u32)reg & ~0xf0) | 0x00); /* CM_FCLKEN* */
 	else
 		return;
-

To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html