summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYue Du <daviddu@us.ibm.com>2016-02-29 21:39:12 -0600
committerJoshua Hunsberger <jahunsbe@us.ibm.com>2017-10-23 15:59:54 -0500
commit67e95c483435e3ac29164cd38c331fcbf9e27140 (patch)
tree3dd9528c431185cb1fe8c6c13cfa9074410667e9
parent58cdd3699ab3dd3be80b2ade4ef09e256da20d99 (diff)
downloadtalos-hcode-67e95c483435e3ac29164cd38c331fcbf9e27140.tar.gz
talos-hcode-67e95c483435e3ac29164cd38c331fcbf9e27140.zip
PK/TRACE: Add marker to pk trace of trace buffer wrap helping EPM
Change-Id: Ib173ef7e2447c074c047271cf9402f0342e3579f Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/21488 Tested-by: Jenkins Server Reviewed-by: Gregory S. Still <stillgs@us.ibm.com>
-rw-r--r--import/chips/p9/procedures/ppe/pk/trace/pk_trace.h4
-rw-r--r--import/chips/p9/procedures/ppe/pk/trace/pk_trace_big.c11
-rw-r--r--import/chips/p9/procedures/ppe/pk/trace/pk_trace_binary.c11
-rw-r--r--import/chips/p9/procedures/ppe/pk/trace/pk_trace_core.c15
-rwxr-xr-ximport/chips/p9/procedures/ppe/tools/PowerPCtoPPE/ppc-ppe-pcp.py5
5 files changed, 44 insertions, 2 deletions
diff --git a/import/chips/p9/procedures/ppe/pk/trace/pk_trace.h b/import/chips/p9/procedures/ppe/pk/trace/pk_trace.h
index 3b243421..a53992bf 100644
--- a/import/chips/p9/procedures/ppe/pk/trace/pk_trace.h
+++ b/import/chips/p9/procedures/ppe/pk/trace/pk_trace.h
@@ -302,4 +302,8 @@ typedef struct
extern PkTraceBuffer g_pk_trace_buf;
+#ifdef PK_TRACE_BUFFER_WRAP_MARKER
+ extern uint32_t G_wrap_mask;
+#endif
+
#endif /* __PK_TRACE_H__ */
diff --git a/import/chips/p9/procedures/ppe/pk/trace/pk_trace_big.c b/import/chips/p9/procedures/ppe/pk/trace/pk_trace_big.c
index 52ed1bbd..b953aea2 100644
--- a/import/chips/p9/procedures/ppe/pk/trace/pk_trace_big.c
+++ b/import/chips/p9/procedures/ppe/pk/trace/pk_trace_big.c
@@ -85,6 +85,17 @@ void pk_trace_big(uint32_t i_hash_and_count,
//calculate the offset for the next entry in the cb
state.offset = footer_offset + sizeof(PkTraceBig);
+#ifdef PK_TRACE_BUFFER_WRAP_MARKER
+
+ //insert marker to indicate when circular buffer wraps
+ if ((state.offset & PK_TRACE_SZ) ^ G_wrap_mask)
+ {
+ G_wrap_mask = state.offset & PK_TRACE_SZ;
+ asm volatile ("tw 0, 31, 31");
+ }
+
+#endif
+
//update the cb state (tbu and offset)
g_pk_trace_buf.state.word64 = state.word64;
diff --git a/import/chips/p9/procedures/ppe/pk/trace/pk_trace_binary.c b/import/chips/p9/procedures/ppe/pk/trace/pk_trace_binary.c
index 61218a5b..65358dd9 100644
--- a/import/chips/p9/procedures/ppe/pk/trace/pk_trace_binary.c
+++ b/import/chips/p9/procedures/ppe/pk/trace/pk_trace_binary.c
@@ -85,6 +85,17 @@ void pk_trace_binary(uint32_t i_hash_and_size, void* bufp)
//calculate the offset for the next entry in the cb
state.offset = footer_offset + sizeof(PkTraceBinary);
+#ifdef PK_TRACE_BUFFER_WRAP_MARKER
+
+ //insert marker to indicate when circular buffer wraps
+ if ((state.offset & PK_TRACE_SZ) ^ G_wrap_mask)
+ {
+ G_wrap_mask = state.offset & PK_TRACE_SZ;
+ asm volatile ("tw 0, 31, 31");
+ }
+
+#endif
+
//update the cb state (tbu and offset)
g_pk_trace_buf.state.word64 = state.word64;
diff --git a/import/chips/p9/procedures/ppe/pk/trace/pk_trace_core.c b/import/chips/p9/procedures/ppe/pk/trace/pk_trace_core.c
index 7ccc066a..8ca3905b 100644
--- a/import/chips/p9/procedures/ppe/pk/trace/pk_trace_core.c
+++ b/import/chips/p9/procedures/ppe/pk/trace/pk_trace_core.c
@@ -72,6 +72,10 @@ PkTraceBuffer g_pk_trace_buf =
//Needed for buffer extraction in simics for now
PkTraceBuffer* g_pk_trace_buf_ptr = &g_pk_trace_buf;
+#ifdef PK_TRACE_BUFFER_WRAP_MARKER
+ uint32_t G_wrap_mask = 0;
+#endif
+
// Creates an 8 byte entry in the trace buffer that includes a timestamp,
// a format string hash value and a 16 bit parameter.
//
@@ -102,6 +106,17 @@ void pk_trace_tiny(uint32_t i_parm)
//calculate the offset for the next entry in the cb
state.offset = g_pk_trace_buf.state.offset + sizeof(PkTraceTiny);
+#ifdef PK_TRACE_BUFFER_WRAP_MARKER
+
+ //insert marker to indicate when circular buffer wraps
+ if ((state.offset & PK_TRACE_SZ) ^ G_wrap_mask)
+ {
+ G_wrap_mask = state.offset & PK_TRACE_SZ;
+ asm volatile ("tw 0, 31, 31");
+ }
+
+#endif
+
//update the cb state (tbu and offset)
g_pk_trace_buf.state.word64 = state.word64;
diff --git a/import/chips/p9/procedures/ppe/tools/PowerPCtoPPE/ppc-ppe-pcp.py b/import/chips/p9/procedures/ppe/tools/PowerPCtoPPE/ppc-ppe-pcp.py
index 88417a42..e44f9c3a 100755
--- a/import/chips/p9/procedures/ppe/tools/PowerPCtoPPE/ppc-ppe-pcp.py
+++ b/import/chips/p9/procedures/ppe/tools/PowerPCtoPPE/ppc-ppe-pcp.py
@@ -263,7 +263,7 @@ ReplaceRules = {#ppc_op : [ rule | ppe_op ]
# -1 0 | [ppe] ppe_op(cmp*b*) | extended mnemonics of compares are handled
#-------|-------------------------|--------------------------------------------
# 'v' | [ppc] ppc_op(lwz/stw) | rule for combining double word aligned
-# | ppc_op(lwz/stw) | load/store pairs into signle 'virtual'
+# | ppc_op(lwz/stw) | load/store pairs into single 'virtual'
# -1 -1 | [ppe] ppe_op(lvd/stvd) | double word instructions(PPE specific)
#-------|-------------------------|--------------------------------------------
# 'l' | [ppc] .p2align | compiler will insert ".p2align" directive to
@@ -740,6 +740,7 @@ def p2p_onefile(ppcFileName):
pre_line = ""
pre_op = ""
done = True
+
# use inline file editing, back up original PPC assembly file as <filename>.S
for line in fileinput.input(ppeFileName, inplace=1, backup='.405'):
@@ -958,7 +959,7 @@ def p2p_main():
if options.ppcFile:
if P2P_VERBOSE :
- print "Processing signle file: " + options.ppcFile
+ print "Processing single file: " + options.ppcFile
p2p_onefile(options.ppcFile)
OpenPOWER on IntegriCloud