Smartreflex error config register is special as it contains certain status bits which if written a 1 into means a clear of those bits. This patch takes special care during modify of this register that no status bits in this register are accidently set to 1. This issue was first reported by Nishanth Menon. Signed-off-by: Thara Gopinath <thara@xxxxxx> --- arch/arm/mach-omap2/smartreflex.c | 11 +++++++++++ arch/arm/mach-omap2/smartreflex.h | 6 ++++++ 2 files changed, 17 insertions(+), 0 deletions(-) diff --git a/arch/arm/mach-omap2/smartreflex.c b/arch/arm/mach-omap2/smartreflex.c index 56a8005..da7f534 100644 --- a/arch/arm/mach-omap2/smartreflex.c +++ b/arch/arm/mach-omap2/smartreflex.c @@ -71,6 +71,17 @@ static inline void sr_modify_reg(struct omap_sr *sr, unsigned offset, u32 mask, reg_val = omap_hwmod_readl(odev->hwmods[0], offset); reg_val &= ~mask; + /* + * Smartreflex error config register is special as it contains + * certain status bits which if written a 1 into means a clear + * of those bits. So in order to make sure no accidental write of + * 1 happens to those status bits, do a clear of them in the read + * value. Now if there is an actual reguest to write to these bits + * they will be set in the nex step. + */ + if (offset == ERRCONFIG) + reg_val &= ~ERRCONFIG_STATUS_MASK; + reg_val |= value; omap_hwmod_writel(reg_val, odev->hwmods[0], offset); diff --git a/arch/arm/mach-omap2/smartreflex.h b/arch/arm/mach-omap2/smartreflex.h index 0cdee6e..823aea0 100644 --- a/arch/arm/mach-omap2/smartreflex.h +++ b/arch/arm/mach-omap2/smartreflex.h @@ -77,6 +77,12 @@ extern struct dentry *pm_dbg_main_dir; #define ERRCONFIG_MCUDISACKINTEN BIT(23) #define ERRCONFIG_MCUDISACKINTST BIT(22) +#define ERRCONFIG_STATUS_MASK (ERRCONFIG_VPBOUNDINTST | \ + ERRCONFIG_MCUACCUMINTST | \ + ERRCONFIG_MCUVALIDINTST | \ + ERRCONFIG_MCUBOUNDINTST | \ + ERRCONFIG_MCUDISACKINTST) + /* Common Bit values */ #define SRCLKLENGTH_12MHZ_SYSCLK 0x3C -- 1.7.0.rc1.33.g07cf0f -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html