diff options
| author | Yue Du <daviddu@us.ibm.com> | 2016-02-29 21:39:12 -0600 |
|---|---|---|
| committer | Joshua Hunsberger <jahunsbe@us.ibm.com> | 2017-10-23 15:59:54 -0500 |
| commit | 67e95c483435e3ac29164cd38c331fcbf9e27140 (patch) | |
| tree | 3dd9528c431185cb1fe8c6c13cfa9074410667e9 | |
| parent | 58cdd3699ab3dd3be80b2ade4ef09e256da20d99 (diff) | |
| download | talos-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>
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) |

