Message ID | 1362978365-5593-6-git-send-email-lokeshvutla@ti.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Monday 11 March 2013 10:36 AM, Lokesh Vutla wrote: > From: Nishanth Menon <nm@ti.com> > > Some machine or kernel variants might have missed implementation > of power off handlers. We DONOT want to let the system be in > "out of spec" state in this condition. So, WARN and attempt > a machine restart in the hopes of clearing the out-of-spec > temperature condition. > > NOTE: This is not the safest option, but safer than leaving the > system in unstable conditions. > > Signed-off-by: Nishanth Menon <nm@ti.com> > Signed-off-by: Lokesh Vutla <lokeshvutla@ti.com> > --- > drivers/memory/emif.c | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/drivers/memory/emif.c b/drivers/memory/emif.c > index 927fb55..02a94fc 100644 > --- a/drivers/memory/emif.c > +++ b/drivers/memory/emif.c > @@ -25,6 +25,7 @@ > #include <linux/module.h> > #include <linux/list.h> > #include <linux/spinlock.h> > +#include <linux/pm.h> > #include <memory/jedec_ddr.h> > #include "emif.h" > #include "of_memory.h" > @@ -1011,7 +1012,13 @@ static irqreturn_t emif_threaded_isr(int irq, void *dev_id) > > if (emif->temperature_level == SDRAM_TEMP_VERY_HIGH_SHUTDOWN) { > dev_emerg(emif->dev, "SDRAM temperature exceeds operating limit.. Needs shut down!!!\n"); > - kernel_power_off(); Extra line here would be good here. > + /* If we have Power OFF ability, use it, else try restarting */ > + if (pm_power_off) { > + kernel_power_off(); > + } else { > + WARN(1, "FIXME: NO pm_power_off!!! trying restart\n"); > + kernel_restart("SDRAM Over-temp Emergency restart"); > + } > return IRQ_HANDLED; > } > Otherwise, Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
diff --git a/drivers/memory/emif.c b/drivers/memory/emif.c index 927fb55..02a94fc 100644 --- a/drivers/memory/emif.c +++ b/drivers/memory/emif.c @@ -25,6 +25,7 @@ #include <linux/module.h> #include <linux/list.h> #include <linux/spinlock.h> +#include <linux/pm.h> #include <memory/jedec_ddr.h> #include "emif.h" #include "of_memory.h" @@ -1011,7 +1012,13 @@ static irqreturn_t emif_threaded_isr(int irq, void *dev_id) if (emif->temperature_level == SDRAM_TEMP_VERY_HIGH_SHUTDOWN) { dev_emerg(emif->dev, "SDRAM temperature exceeds operating limit.. Needs shut down!!!\n"); - kernel_power_off(); + /* If we have Power OFF ability, use it, else try restarting */ + if (pm_power_off) { + kernel_power_off(); + } else { + WARN(1, "FIXME: NO pm_power_off!!! trying restart\n"); + kernel_restart("SDRAM Over-temp Emergency restart"); + } return IRQ_HANDLED; }