On 4/11/18 9:53 PM, Keerthy wrote:
From: Dave Gerlach <d-gerl...@ti.com>

After an RTC+DDR cycle we lose sram context so emif pm functions present
in sram are lost. We can check if the first byte of the original
code in DDR contains the same first byte as the code in sram, and if
they do not match we know we have lost context and must recopy the
functions to the previous address to maintain PM functionality.

Signed-off-by: Dave Gerlach <d-gerl...@ti.com>
Signed-off-by: Keerthy <j-keer...@ti.com>
  drivers/memory/ti-emif-pm.c | 24 ++++++++++++++++++++++++
  1 file changed, 24 insertions(+)

diff --git a/drivers/memory/ti-emif-pm.c b/drivers/memory/ti-emif-pm.c
index 632651f..ec4a62c 100644
--- a/drivers/memory/ti-emif-pm.c
+++ b/drivers/memory/ti-emif-pm.c
@@ -249,6 +249,25 @@ int ti_emif_get_mem_type(void)
  MODULE_DEVICE_TABLE(of, ti_emif_of_match);
+static int ti_emif_resume(struct device *dev)
+       unsigned long tmp =
+                       __raw_readl((void *)emif_instance->ti_emif_sram_virt);
+       /*
+        * Check to see if what we are copying is already present in the
+        * first byte at the destination, only copy if it is not which
+        * indicates we have lost context and sram no longer contains
+        * the PM code
+        */

+       if (tmp != ti_emif_sram)
+               ti_emif_push_sram(dev, emif_instance);
+       return 0;
+#endif /* CONFIG_PM_SLEEP */
Instead of this indirect method , why can't just check the previous
deep sleep mode and based on that do copy or not. EMIF power status
register should have something like that ?

Another minor point is even though there is nothing to do in suspend,
might be good to have a callback with comment that nothing to do with
some explanation why not. Don't have strong preference but may for
better readability.


Reply via email to