OMAP3 dual-mode timer: data aborts after fclk re-enable
A message that is not in the archive (sent off-list or not yet received): [email protected]
Paul Walmsley
maintainerHi 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
@@ -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 ;
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) at0xd9032010perhaps 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