Added memory barrier calls
On some A72 based devices, data shared between cores was found to be
inconsistent which was resulting in an infinite loop.
Adding memory barriers before marking a CTB as parsed/processed,
all the pending memory operations are guaranteed to be completed.
Change-Id: I6e3bb11123a3c12ba7e69c4bfcd38960616f9fb5
(cherry picked from commit 031b91dde5dd07c15d6401601e47e7c937e79051)
(cherry picked from commit 27405a217f75f663a814454068bd81fcf30e9cf6)
diff --git a/common/arm/ihevc_platform_macros.h b/common/arm/ihevc_platform_macros.h
index 6d48cd9..3d79d07 100644
--- a/common/arm/ihevc_platform_macros.h
+++ b/common/arm/ihevc_platform_macros.h
@@ -143,6 +143,7 @@
}
}
+#define DATA_SYNC() __sync_synchronize()
/**
******************************************************************************
diff --git a/common/mips/ihevc_platform_macros.h b/common/mips/ihevc_platform_macros.h
index b028624..f820cf2 100644
--- a/common/mips/ihevc_platform_macros.h
+++ b/common/mips/ihevc_platform_macros.h
@@ -93,4 +93,6 @@
#define MEM_ALIGN16 __attribute__ ((aligned (16)))
#define MEM_ALIGN32 __attribute__ ((aligned (32)))
+#define DATA_SYNC() __sync_synchronize()
+
#endif /* _IHEVC_PLATFORM_MACROS_H_ */
diff --git a/common/x86/ihevc_platform_macros.h b/common/x86/ihevc_platform_macros.h
index 1d5dc74..66ef542 100644
--- a/common/x86/ihevc_platform_macros.h
+++ b/common/x86/ihevc_platform_macros.h
@@ -96,6 +96,8 @@
}
}
+#define DATA_SYNC() __sync_synchronize()
+
/**
******************************************************************************
* @brief returns postion of msb bit for 32bit input
diff --git a/decoder/ihevcd_parse_slice.c b/decoder/ihevcd_parse_slice.c
index 3bb658e..853afee 100644
--- a/decoder/ihevcd_parse_slice.c
+++ b/decoder/ihevcd_parse_slice.c
@@ -3115,6 +3115,7 @@
}
+ DATA_SYNC();
/* Update the parse status map */
{
diff --git a/decoder/ihevcd_process_slice.c b/decoder/ihevcd_process_slice.c
index 09b596a..f57cc31 100644
--- a/decoder/ihevcd_process_slice.c
+++ b/decoder/ihevcd_process_slice.c
@@ -189,6 +189,7 @@
//NOP(128 * 16);
}
}
+ DATA_SYNC();
}
}
@@ -202,6 +203,7 @@
/* Update the current CTBs processing status */
if(ps_proc->i4_check_proc_status)
{
+ DATA_SYNC();
for(i = 0; i < nctb; i++)
{
sps_t *ps_sps = ps_proc->ps_sps;