summaryrefslogtreecommitdiffstats
path: root/import
diff options
context:
space:
mode:
Diffstat (limited to 'import')
-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
4 files changed, 41 insertions, 0 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 8d699476..21d8ceb4 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 42df103d..a76ae7e7 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 5bc63179..c6680a32 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 4669a56b..5cd5051f 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;
OpenPOWER on IntegriCloud