On Saturday 04 February 2012 05:46 PM, Aneesh V wrote: > Add an ISR for EMIF that: > 1. reports details of access errors > 2. takes action on thermal events > > On thermal events SDRAM timing parameters are > adjusted to ensure safe operation > > Also clear all interrupts on shut-down. Pending IRQs > may casue problems during warm-reset. > Add some more details like MR4, EMIF polling frequency etc for better understanding. > Signed-off-by: Aneesh V <aneesh@xxxxxx> > --- > drivers/misc/emif.c | 209 ++++++++++++++++++++++++++++++++++++++++++++++++++- > 1 files changed, 207 insertions(+), 2 deletions(-) > > diff --git a/drivers/misc/emif.c b/drivers/misc/emif.c > index 36ba6f4..5c2b0ae 100644 > --- a/drivers/misc/emif.c > +++ b/drivers/misc/emif.c > @@ -500,6 +500,45 @@ static u32 get_pwr_mgmt_ctrl(u32 freq, struct emif_data *emif, u32 ip_rev) > } > > /* > + * Get the temperature level of the EMIF instance: > + * Reads the MR4 register of attached SDRAM parts to find out the temperature > + * level. If there are two parts attached(one on each CS), then the temperature > + * level for the EMIF instance is the higher of the two temperatures. > + */ > +static void get_temperature_level(struct emif_data *emif) > +{ > + u32 temp, temperature_level; > + unsigned long irqs; > + void __iomem *base; > + > + base = emif->base; > + > + /* Read mode register 4 */ > + writel(DDR_MR4, base + EMIF_LPDDR2_MODE_REG_CONFIG); > + temperature_level = readl(base + EMIF_LPDDR2_MODE_REG_DATA); > + temperature_level = (temperature_level & MR4_SDRAM_REF_RATE_MASK) >> > + MR4_SDRAM_REF_RATE_SHIFT; > + > + if (emif->plat_data->device_info->cs1_used) { > + writel(DDR_MR4 | CS_MASK, base + EMIF_LPDDR2_MODE_REG_CONFIG); > + temp = readl(base + EMIF_LPDDR2_MODE_REG_DATA); > + temp = (temp & MR4_SDRAM_REF_RATE_MASK) > + >> MR4_SDRAM_REF_RATE_SHIFT; > + temperature_level = max(temp, temperature_level); > + } > + > + spin_lock_irqsave(&emif->lock, irqs); Add a line here. > + /* treat everything less than nominal(3) in MR4 as nominal */ > + if (unlikely(temperature_level < SDRAM_TEMP_NOMINAL)) > + temperature_level = SDRAM_TEMP_NOMINAL; > + > + /* if we get reserved value in MR4 persist with the existing value */ > + if (likely(temperature_level != SDRAM_TEMP_RESERVED_4)) > + emif->temperature_level = temperature_level; > + spin_unlock_irqrestore(&emif->lock, irqs); > +} > + rest of the patch looks fine to me -- 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