invalidate cache instead of disabling
authorSam Sortais <sam.sortais@xilinx.com>
Mon, 29 Feb 2016 05:52:18 +0000 (21:52 -0800)
committerSam Sortais <sam.sortais@xilinx.com>
Sat, 5 Mar 2016 02:33:19 +0000 (18:33 -0800)
Signed-off-by: Sam Sortais <sam.sortais@xilinx.com>
lib/include/openamp/env.h
lib/remoteproc/remoteproc.c
lib/system/generic/bm_env.c

index 9f2995d2b72f7fb337b31ce6f5e399894a56059c..a26df0ce75eb1940b1f351d40f470eecf58c7037 100644 (file)
@@ -438,8 +438,15 @@ unsigned long long env_get_timestamp(void);
  * Disables system caches.
  *
  */
+void env_disable_cache(void);
 
-void env_disable_cache();
+/**
+ * env_flush_invalidate_all_caches
+ * 
+ * Flush and Invalidate all caches.
+ *
+ */
+void env_flush_invalidate_all_caches(void);
 
 typedef void LOCK;
 
index a7a157ad508fc1792f63aaf2a099e456d8e2136b..1d82e4d8c1421d870cfda4fbc32762bee5afd26f 100644 (file)
@@ -151,7 +151,19 @@ int remoteproc_resource_deinit(struct remote_proc *rproc)
         * boots on the same core may experience cache inconsistencies.
         *
         */
-       env_disable_cache();
+       /* env_disable_cache(); */
+
+       /*
+        * Flush and Invalidate the caches - When the application is built with
+        * Xilinx Standalone BSP, caches are invalidated as part of boot process.
+        * Even if the master boots firmware multiple times without hard reset on
+        * same core, caches are flushed and invalidated at the end of
+        * remoteproc_resource_deinit for this run and caches would be again
+        * invalidated before starting the main thread of the application on next
+        * run to avoid any cache inconsistencies.
+        */
+        env_flush_invalidate_all_caches();
+
 
        return RPROC_SUCCESS;
 }
index a3a372b4a732d5bec9ba1b90085a627d1da1ec82..d6b9fa0ab1b5ae9a31501b258c65eec0dbfe1cac 100755 (executable)
@@ -508,6 +508,19 @@ void env_disable_cache()
        platform_cache_disable();
 }
 
+/**
+ * env_flush_invalidate_all_caches
+ *
+ * Flush and Invalidate all caches.
+ *
+ */
+
+void env_flush_invalidate_all_caches(void)
+{
+       platform_cache_all_flush_invalidate();
+}
+
+
 /**
  * 
  * env_get_timestamp