summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDean Sanner <dsanner@us.ibm.com>2016-09-23 07:41:11 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2016-10-05 10:52:47 -0400
commit4415fb37f923bfeb63f1f81c55fe177d2e0adb95 (patch)
tree292da2c425892ab1583ed04c957f963ca0ad5ad9
parent083d6c0b0a1517b0995134822202535ed71b60fd (diff)
downloadtalos-hostboot-4415fb37f923bfeb63f1f81c55fe177d2e0adb95.tar.gz
talos-hostboot-4415fb37f923bfeb63f1f81c55fe177d2e0adb95.zip
Allow Cronus to use debugComm on FSP based systems
-Pass down HRMOR adjusted addr -Provide unique continous trace enable for debugComm Change-Id: I214a6b2e0113ce19b8813e7d4902de4b42b23d11 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/30178 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Prachi Gupta <pragupta@us.ibm.com> Reviewed-by: Corey V. Swenson <cswenson@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
-rwxr-xr-xsrc/build/debug/Hostboot/_DebugFramework.pm2
-rw-r--r--src/usr/trace/daemon/daemon.C42
-rw-r--r--src/usr/trace/daemonif.C5
-rw-r--r--src/usr/trace/debug.H6
-rw-r--r--src/usr/util/utilmbox_scratch.C4
5 files changed, 37 insertions, 22 deletions
diff --git a/src/build/debug/Hostboot/_DebugFramework.pm b/src/build/debug/Hostboot/_DebugFramework.pm
index 7e03adf74..1da95cf22 100755
--- a/src/build/debug/Hostboot/_DebugFramework.pm
+++ b/src/build/debug/Hostboot/_DebugFramework.pm
@@ -718,7 +718,7 @@ sub translateHRMOR
}
else
{
- $addr += ::getHRMOR();
+ $addr |= ::getHRMOR();
}
return $addr;
diff --git a/src/usr/trace/daemon/daemon.C b/src/usr/trace/daemon/daemon.C
index 49fe6da32..44515dc52 100644
--- a/src/usr/trace/daemon/daemon.C
+++ b/src/usr/trace/daemon/daemon.C
@@ -159,11 +159,16 @@ namespace TRACEDAEMON
g_debugSettings.contTraceOverride =
DebugSettings::CONT_TRACE_FORCE_DISABLE;
}
- else if (msg->data[0] == 1)
+ else if (msg->data[0] == 1) //enable from FSP
{
g_debugSettings.contTraceOverride =
DebugSettings::CONT_TRACE_FORCE_ENABLE;
}
+ else if (msg->data[0] == 2) //enable from debugComm
+ {
+ g_debugSettings.contTraceOverride =
+ DebugSettings::CONT_TRACE_FORCE_ENABLE_DEBUG_COMM;
+ }
msg->data[0] = msg->data[1] = 0;
break;
@@ -448,17 +453,25 @@ namespace TRACEDAEMON
if (g_debugSettings.contTraceOverride !=
DebugSettings::CONT_TRACE_USE_ATTR)
{
- contEnabled = (g_debugSettings.contTraceOverride ==
+ contEnabled = (g_debugSettings.contTraceOverride >=
DebugSettings::CONT_TRACE_FORCE_ENABLE);
}
- if (!contEnabled)
- {
- // Trace isn't enabled so just discard the buffer.
- free(i_buffer);
- }
- else
+ if(contEnabled)
{
+ //Only send via debugComm if tool has explicitly enabled
+ //otherwise this will "hang" hostboot while it waits for the tool
+ if(g_debugSettings.contTraceOverride ==
+ DebugSettings::CONT_TRACE_FORCE_ENABLE_DEBUG_COMM)
+ {
+ // Write scratch register indicating is available.
+ uint64_t l_addr = reinterpret_cast<uint64_t>(i_buffer);
+ Util::writeDebugCommRegs(Util::MSG_TYPE_TRACE,
+ l_addr,
+ i_size);
+ }
+
+ //Always attempt to send to FSP if enabled
if (MBOX::mailbox_enabled())
{
msg_t* msg = msg_allocate();
@@ -466,7 +479,6 @@ namespace TRACEDAEMON
msg->data[1] = i_size;
msg->extra_data = MBOX::allocate(i_size);
memcpy(msg->extra_data,i_buffer,i_size);
- free(i_buffer);
errlHndl_t l_errl = MBOX::send(MBOX::FSP_TRACE_MSGQ, msg);
if (l_errl)
@@ -475,16 +487,10 @@ namespace TRACEDAEMON
msg_free(msg);
}
}
- else
- {
- // Write scratch register indicating is available.
- uint64_t l_addr = reinterpret_cast<uint64_t>(i_buffer);
- Util::writeDebugCommRegs(Util::MSG_TYPE_TRACE,
- l_addr,
- i_size);
- free(i_buffer);
- }
}
+
+ //Always free the buf
+ free(i_buffer);
}
void Daemon::sendExtractBuffer(void* i_buffer, size_t i_size)
diff --git a/src/usr/trace/daemonif.C b/src/usr/trace/daemonif.C
index c6dd79219..f84844800 100644
--- a/src/usr/trace/daemonif.C
+++ b/src/usr/trace/daemonif.C
@@ -70,7 +70,10 @@ namespace TRACE
{
msg_t* msg = msg_allocate();
msg->type = TRACE_CONT_TRACE_STATE;
- msg->data[0] = i_enable ? 0x1 : 0x0; //needs to be a zero/one
+ //Send a 0x2 to enable CONT_TRACE_FORCE_ENABLE_DEBUG_COMM
+ //As this function is only called by debug comm routines (FSP
+ //sends directly message)
+ msg->data[0] = i_enable ? 0x2 : 0x0;
msg_sendrecv(iv_queue, msg);
msg_free(msg);
}
diff --git a/src/usr/trace/debug.H b/src/usr/trace/debug.H
index 8895da5e4..47e52a610 100644
--- a/src/usr/trace/debug.H
+++ b/src/usr/trace/debug.H
@@ -5,7 +5,9 @@
/* */
/* OpenPOWER HostBoot Project */
/* */
-/* COPYRIGHT International Business Machines Corp. 2012,2014 */
+/* Contributors Listed Below - COPYRIGHT 2012,2016 */
+/* [+] International Business Machines Corp. */
+/* */
/* */
/* Licensed under the Apache License, Version 2.0 (the "License"); */
/* you may not use this file except in compliance with the License. */
@@ -42,6 +44,8 @@ namespace TRACE
CONT_TRACE_FORCE_DISABLE = 1,
/** Force enable. */
CONT_TRACE_FORCE_ENABLE = 2,
+ /** Force enable on debugComm. */
+ CONT_TRACE_FORCE_ENABLE_DEBUG_COMM = 3,
};
// Continuous Trace:
diff --git a/src/usr/util/utilmbox_scratch.C b/src/usr/util/utilmbox_scratch.C
index 814a9026a..6d2c57174 100644
--- a/src/usr/util/utilmbox_scratch.C
+++ b/src/usr/util/utilmbox_scratch.C
@@ -39,6 +39,7 @@
#include <errl/errlmanager.H>
#include <devicefw/userif.H>
#include <sys/task.h>
+#include <sys/misc.h>
#include <util/utilmbox_scratch.H>
#include "utilbase.H"
@@ -92,7 +93,8 @@ namespace Util
void writeDebugCommRegs(uint8_t i_usage, uint32_t i_addr, uint32_t i_size)
{
//convert input into uint64_t for scom write
- uint64_t l_bufAddr = i_addr;
+ uint64_t l_hrmorVal = cpu_spr_value(CPU_SPR_HRMOR);
+ uint64_t l_bufAddr = i_addr | l_hrmorVal; //OR in HRMOR for RA
uint64_t l_bufSize = (i_size & MSG_DATA_SIZE_MASK) |
(i_usage << MSG_USAGE_SHIFT);
OpenPOWER on IntegriCloud