[PATCH 4/8] memory: emif: Handle devices which are not rated for 85C

2013-03-10 Thread Lokesh Vutla
From: Nishanth Menon n...@ti.com

As per JESD209-2E specification for LPDDR2,
  http://www.jedec.org/standards-documents/results/jesd209-2E
Table 73, LPDDR2 memories come in two flavors - Standard and
Extended. The Standard types can operate from -25C to +85C
However, beyond that and upto +105C can only be supported by
Extended types.

Unfortunately, it seems there is no info in MR0(device info) or
MR[1,2](device feature) for run time detection of this capability
as far as seen on the spec. Hence, we provide a custom_config
flag to be populated by platforms which have these extended
type memories.

For the Standard memories, we need to consider MR4 notifications
of temperature triggers 85C as equivalent to thermal shutdown
events (equivalent to Spec specified thermal shutdown events for
extended parts).

Reported-by: Richard Woodruff r-woodru...@ti.com
Signed-off-by: Nishanth Menon n...@ti.com
Signed-off-by: Lokesh Vutla lokeshvu...@ti.com
---
 drivers/memory/emif.c   |   27 +++
 include/linux/platform_data/emif_plat.h |1 +
 2 files changed, 28 insertions(+)

diff --git a/drivers/memory/emif.c b/drivers/memory/emif.c
index 37e0c77..927fb55 100644
--- a/drivers/memory/emif.c
+++ b/drivers/memory/emif.c
@@ -914,6 +914,7 @@ static irqreturn_t handle_temp_alert(void __iomem *base, 
struct emif_data *emif)
 {
u32 old_temp_level;
irqreturn_t ret = IRQ_HANDLED;
+   struct emif_custom_configs *custom_configs;
 
spin_lock_irqsave(emif_lock, irq_state);
old_temp_level = emif-temperature_level;
@@ -926,6 +927,29 @@ static irqreturn_t handle_temp_alert(void __iomem *base, 
struct emif_data *emif)
goto out;
}
 
+   custom_configs = emif-plat_data-custom_configs;
+
+   /*
+* IF we detect higher than nominal rating from DDR sensor
+* on an unsupported DDR part, shutdown system
+*/
+   if (custom_configs  !(custom_configs-mask 
+   EMIF_CUSTOM_CONFIG_EXTENDED_TEMP_PART)) {
+   if (emif-temperature_level = SDRAM_TEMP_HIGH_DERATE_REFRESH) {
+   dev_err(emif-dev,
+   %s:NOT Extended temperature capable memory.
+   Converting MR4=0x%02x as shutdown event\n,
+   __func__, emif-temperature_level);
+   /*
+* Temperature far too high - do kernel_power_off()
+* from thread context
+*/
+   emif-temperature_level = SDRAM_TEMP_VERY_HIGH_SHUTDOWN;
+   ret = IRQ_WAKE_THREAD;
+   goto out;
+   }
+   }
+
if (emif-temperature_level  old_temp_level ||
emif-temperature_level == SDRAM_TEMP_VERY_HIGH_SHUTDOWN) {
/*
@@ -1224,6 +1248,9 @@ static void __init_or_module of_get_custom_configs(struct 
device_node *np_emif,
cust_cfgs-temp_alert_poll_interval_ms = *poll_intvl;
}
 
+   if (of_find_property(np_emif, extended-temp-part, len))
+   cust_cfgs-mask |= EMIF_CUSTOM_CONFIG_EXTENDED_TEMP_PART;
+
if (!is_custom_config_valid(cust_cfgs, emif-dev)) {
devm_kfree(emif-dev, cust_cfgs);
return;
diff --git a/include/linux/platform_data/emif_plat.h 
b/include/linux/platform_data/emif_plat.h
index 03378ca..5c19a2a 100644
--- a/include/linux/platform_data/emif_plat.h
+++ b/include/linux/platform_data/emif_plat.h
@@ -40,6 +40,7 @@
 /* Custom config requests */
 #define EMIF_CUSTOM_CONFIG_LPMODE  0x0001
 #define EMIF_CUSTOM_CONFIG_TEMP_ALERT_POLL_INTERVAL0x0002
+#define EMIF_CUSTOM_CONFIG_EXTENDED_TEMP_PART  0x0004
 
 #ifndef __ASSEMBLY__
 /**
-- 
1.7.9.5

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


Re: [PATCH 4/8] memory: emif: Handle devices which are not rated for 85C

2013-03-10 Thread Santosh Shilimkar
On Monday 11 March 2013 10:36 AM, Lokesh Vutla wrote:
 From: Nishanth Menon n...@ti.com
 
 As per JESD209-2E specification for LPDDR2,
   http://www.jedec.org/standards-documents/results/jesd209-2E
 Table 73, LPDDR2 memories come in two flavors - Standard and
 Extended. The Standard types can operate from -25C to +85C
 However, beyond that and upto +105C can only be supported by
 Extended types.
 
right.

 Unfortunately, it seems there is no info in MR0(device info) or
 MR[1,2](device feature) for run time detection of this capability
 as far as seen on the spec. Hence, we provide a custom_config
 flag to be populated by platforms which have these extended
 type memories.
 
 For the Standard memories, we need to consider MR4 notifications
 of temperature triggers 85C as equivalent to thermal shutdown
 events (equivalent to Spec specified thermal shutdown events for
 extended parts).

Make sense.
 
 Reported-by: Richard Woodruff r-woodru...@ti.com
 Signed-off-by: Nishanth Menon n...@ti.com
 Signed-off-by: Lokesh Vutla lokeshvu...@ti.com
 ---
Thanks for the fix.
Acked-by: Santosh Shilimkar santosh.shilim...@ti.com

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