summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAngela Stegmaier2016-12-09 16:14:09 -0600
committerAngela Stegmaier2017-01-17 14:46:27 -0600
commit5fd7da53b505e1bc80a0c9d116fe31e5cd177d74 (patch)
tree53fc0f5585beb0ad879797e59889ba3f31a8bbab
parentc51f144b079836afb868bff44afe7308248a0217 (diff)
downloadhardware-ti-libdce-5fd7da53b505e1bc80a0c9d116fe31e5cd177d74.tar.gz
hardware-ti-libdce-5fd7da53b505e1bc80a0c9d116fe31e5cd177d74.tar.xz
hardware-ti-libdce-5fd7da53b505e1bc80a0c9d116fe31e5cd177d74.zip
libdce[Android]: Add dce_ipc_recover API
In case of remote core recovery due to remote core crash, the rpmsg-dce handle needs to be closed and re-opened since any handles that were open when the crash happened are marked as stale in the driver. This patch adds a new API that the user can call to close the rpmsg-dce handle so that recovery can happen. In case the user receives notification of a remote core crash, it can call the dce_ipc_recover() API to make sure that the rpmsg-dce handle that is opened during dce_buf_lock is closed so that a new one can be opened the next time. Change-Id: I8ebc19e308ffe7431b57c31cfecd469e171777f6 Signed-off-by: Angela Stegmaier <angelabaker@ti.com>
-rw-r--r--libdce.h6
-rw-r--r--libdce_android.c9
-rw-r--r--memplugin_android.c6
3 files changed, 18 insertions, 3 deletions
diff --git a/libdce.h b/libdce.h
index f17422e..bbc7c13 100644
--- a/libdce.h
+++ b/libdce.h
@@ -132,6 +132,12 @@ int dce_ipc_init(int core);
132 */ 132 */
133void dce_ipc_deinit(int core, int tableIdx); 133void dce_ipc_deinit(int core, int tableIdx);
134 134
135/*===============================================================*/
136/** dce_ipc_recover : Recover the DCE IPC in case of
137 * remote core crash.
138 */
139void dce_ipc_recover(void);
140
135/************************ Input/Output Buffer Lock/Unlock APIs ************************/ 141/************************ Input/Output Buffer Lock/Unlock APIs ************************/
136/*=====================================================================================*/ 142/*=====================================================================================*/
137/** dce_buf_lock : Pin or lock Tiler Buffers which would be used by the IVAHD codec 143/** dce_buf_lock : Pin or lock Tiler Buffers which would be used by the IVAHD codec
diff --git a/libdce_android.c b/libdce_android.c
index de6a5c8..0c6065a 100644
--- a/libdce_android.c
+++ b/libdce_android.c
@@ -45,6 +45,7 @@
45extern MmRpc_Handle MmRpcHandle[]; 45extern MmRpc_Handle MmRpcHandle[];
46extern pthread_mutex_t ipc_mutex; 46extern pthread_mutex_t ipc_mutex;
47int is_ipc_ready = 0; 47int is_ipc_ready = 0;
48static int dce_buf_count = 0;
48 49
49int dce_buf_lock(int num, size_t *handle) 50int dce_buf_lock(int num, size_t *handle)
50{ 51{
@@ -113,4 +114,10 @@ EXIT:
113 return (eError); 114 return (eError);
114} 115}
115 116
116 117void dce_ipc_recover(void)
118{
119 if (is_ipc_ready) {
120 dce_ipc_deinit(IPU, -1);
121 is_ipc_ready = 0;
122 }
123}
diff --git a/memplugin_android.c b/memplugin_android.c
index 22a5564..b140aa5 100644
--- a/memplugin_android.c
+++ b/memplugin_android.c
@@ -99,8 +99,10 @@ int memplugin_close()
99 /*Acquire permission to use IPC*/ 99 /*Acquire permission to use IPC*/
100 pthread_mutex_lock(&ipc_mutex); 100 pthread_mutex_lock(&ipc_mutex);
101 101
102 dce_ipc_deinit(IPU, -1); 102 if (is_ipc_ready) {
103 is_ipc_ready = 0; 103 dce_ipc_deinit(IPU, -1);
104 is_ipc_ready = 0;
105 }
104 106
105 /*Relinquish IPC*/ 107 /*Relinquish IPC*/
106 pthread_mutex_unlock(&ipc_mutex); 108 pthread_mutex_unlock(&ipc_mutex);