summaryrefslogtreecommitdiffstats
path: root/src/build/debug/Hostboot
diff options
context:
space:
mode:
authorPatrick Williams <iawillia@us.ibm.com>2012-12-06 11:45:58 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2012-12-14 11:25:05 -0600
commit3e7277d17bdfa91ba4a1ce86f5b206ebe3ee2630 (patch)
tree2bab97dc5ed7b333193a77ffb4f20ae902482ba1 /src/build/debug/Hostboot
parent950ddd853b2044956d82d17ae67bfe222e49fded (diff)
downloadtalos-hostboot-3e7277d17bdfa91ba4a1ce86f5b206ebe3ee2630.tar.gz
talos-hostboot-3e7277d17bdfa91ba4a1ce86f5b206ebe3ee2630.zip
ContTrace tool updates for new trace design.
Change-Id: I424ee37b29bf762b8f6a8be73ebbc2f19ba914aa Reviewed-on: http://gfw160.austin.ibm.com:8080/gerrit/2585 Tested-by: Jenkins Server Reviewed-by: Mark W. Wenning <wenning@us.ibm.com> Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/build/debug/Hostboot')
-rwxr-xr-xsrc/build/debug/Hostboot/ContTrace.pm172
1 files changed, 35 insertions, 137 deletions
diff --git a/src/build/debug/Hostboot/ContTrace.pm b/src/build/debug/Hostboot/ContTrace.pm
index 516c8eafd..da1b8112d 100755
--- a/src/build/debug/Hostboot/ContTrace.pm
+++ b/src/build/debug/Hostboot/ContTrace.pm
@@ -27,13 +27,9 @@ package Hostboot::ContTrace;
use Exporter;
our @EXPORT_OK = ('main');
-use constant MAX_NUM_CONT_TRACE_CTL_STRUCT => 2;
-use constant CONT_TRACE_CTL_STRUCT_SIZE => 16;
-use constant CONT_TRACE_ENABLE_FLAG_OFFSET => MAX_NUM_CONT_TRACE_CTL_STRUCT * CONT_TRACE_CTL_STRUCT_SIZE;
-use constant MAX_NUM_CONT_TRACE_BUFFERS => 2;
-use constant DDWORD_SIZE => 8;
-use constant WORD_SIZE => 4;
-use constant TRIG_BIT => 0x8000000000000000;
+use constant CONT_TRACE_ENABLE_FLAG_OFFSET => 0;
+use constant CONT_TRACE_BUFFER_SIZE => CONT_TRACE_ENABLE_FLAG_OFFSET + 2;
+use constant CONT_TRACE_BUFFER_ADDR => CONT_TRACE_BUFFER_SIZE + 6;
use File::Temp ('tempfile');
@@ -42,7 +38,6 @@ sub main
my ($packName,$args) = @_;
#::userDisplay("args fsp-trace ".$args->{"fsp-trace"}."\n");
#::userDisplay("args with-file-names ".$args->{"with-file-names"}."\n");
- #::userDisplay("args last ".$args->{"last"}."\n");
if (not defined $args->{"fsp-trace"})
{
@@ -61,27 +56,21 @@ sub main
$fsptrace_options = $fsptrace_options."-f ";
}
- my $last = 0;
- if (defined $args->{"last"})
- {
- $last = 1;
- }
-
- my $on2off = 0;
my $symAddr = 0;
my $symSize = 0;
+ ($symAddr, $symSize) = ::findSymbolAddress("TRACE::g_debugSettings");
+ if (not defined $symAddr)
+ {
+ ::userDisplay "Cannot find symbol: TRACE::g_debugSettings.\n"; die;
+ }
+
if (defined $args->{"enable-cont-trace"})
{
my $new_enable = $args->{"enable-cont-trace"};
- $new_enable = $new_enable ? 2 : 0;
- ($symAddr, $symSize) =
- ::findSymbolAddress("TRACE::g_cont_trace_trigger_info");
- if (not defined $symAddr)
- {
- ::userDisplay "Cannot find symbol.\n"; die;
- }
- my $enable = ::read64($symAddr + CONT_TRACE_ENABLE_FLAG_OFFSET);
+ $new_enable = $new_enable ? 2 : 1;
+
+ my $enable = ::read8($symAddr + CONT_TRACE_ENABLE_FLAG_OFFSET);
if ($dbgMsg)
{
::userDisplay("current Cont Trace Enable Flag = $enable\n");
@@ -90,30 +79,19 @@ sub main
{
# truncate tracMERG to 0
system( "cp /dev/null tracMERG" );
- ::write64($symAddr + CONT_TRACE_ENABLE_FLAG_OFFSET, $new_enable);
- if ($dbgMsg)
- {
- $new_enable = ::read64($symAddr+CONT_TRACE_ENABLE_FLAG_OFFSET);
- ::userDisplay("new Cont Trace Enable Flag = $new_enable\n");
- }
- return;
- }
- elsif (($enable == 2) && ($new_enable == 0))
- {
- $on2off = 1;
- $last = 0;
}
- else
+
+ ::write8($symAddr + CONT_TRACE_ENABLE_FLAG_OFFSET, $new_enable);
+ if ($dbgMsg)
{
- return;
+ $new_enable = ::read8($symAddr+CONT_TRACE_ENABLE_FLAG_OFFSET);
+ ::userDisplay("new Cont Trace Enable Flag = $new_enable\n");
}
+
+ return;
}
- my $trigger = "simGETFAC B0.C0.S0.P0.E8.TPC.FSI.FSI_MAILBOX.FSXCOMP." .
- "FSXLOG.LBUS_MAILBOX.Q_GMB2E0.NLC.L2 32";
- $trigger = `$trigger`;
- $trigger =~ s/.*\n0xr(.*)\n.*/$1/g;
- $trigger =~ s/\n//g;
+ my $trigger = ::readScom(0x00050038,8);
if ($dbgMsg)
{
::userDisplay("$trigger...\n");
@@ -124,81 +102,24 @@ sub main
$cycles = `date`;
::userDisplay("$cycles");
}
- if (($trigger !~ /[1-9a-fA-F]+/) && ($last == 0))
+ if (0 == $trigger)
{
- if ($on2off)
- {
- ::write64($symAddr + CONT_TRACE_ENABLE_FLAG_OFFSET, 0);
- if ($dbgMsg)
- {
- $on2off = ::read64($symAddr + CONT_TRACE_ENABLE_FLAG_OFFSET);
- ::userDisplay("new Cont Trace Enable Flag = $on2off\n");
- }
- }
if ($dbgMsg)
{
- my $cycles = `date`;
- ::userDisplay("$cycles");
+ ::userDisplay("No new trace to gather.\n");
}
return;
}
- ($symAddr, $symSize) =
- ::findSymbolAddress("TRACE::g_cont_trace_trigger_info");
- if (not defined $symAddr) { ::userDisplay "Cannot find symbol.\n"; die; }
-
- my @fh;
- my @fname;
- ($fh[0],$fname[0]) = tempfile();
- binmode($fh[0]);
- ($fh[1],$fname[1]) = tempfile();
- binmode($fh[1]);
+ my $fh;
+ my $fname;
+ ($fh,$fname) = tempfile();
+ binmode($fh);
- # read the g_cont_trace_trigger_info structure
- my $result = ::readData($symAddr, $symSize);
+ my $buffAddr = ::read64($symAddr + CONT_TRACE_BUFFER_ADDR);
+ my $buffSize = ::read16($symAddr + CONT_TRACE_BUFFER_SIZE);
- my $addrOff = 0;
- my $lenOff = $addrOff + DDWORD_SIZE;
- my $seqOff = $lenOff + WORD_SIZE;
- my $foundBuffer = 0;
- my @seqNum;
-
- for (my $i = 0; $i < MAX_NUM_CONT_TRACE_BUFFERS; $i++)
- {
- # get the pointer to the continuous trace buffer
- my $buffAddr = substr $result, $addrOff, DDWORD_SIZE;
- $buffAddr= hex (unpack('H*',$buffAddr));
- my $buffLen = substr $result, $lenOff, WORD_SIZE;
- $buffLen= hex (unpack('H*',$buffLen));
- $seqNum[$i] = substr $result, $seqOff, WORD_SIZE;
- $seqNum[$i]= hex (unpack('H*',$seqNum[$i]));
- if ($dbgMsg)
- {
- ::userDisplay("Trigger [".$i."] = $buffAddr\n");
- ::userDisplay("Length [".$i."] = $buffLen\n");
- ::userDisplay("SeqNum [".$i."] = $seqNum[$i]\n");
- }
-
- my $fhandle = $fh[$i];
- # If trigger bit is set, or last call and buffer has trace data
- if ((0 != ($buffAddr & TRIG_BIT)) || (($last == 1) && ($buffLen > 1)))
- {
- $foundBuffer |= (1 << $i);
- $buffAddr &= ~TRIG_BIT;
- print $fhandle (::readData($buffAddr, $buffLen));
-
- # reset trigger bit
- ::write64($symAddr + $addrOff, $buffAddr);
-
- # reset count to 1
- ::write32($symAddr + $lenOff, 1);
- }
-
- # increment to next element in g_cont_trace_trigger_info.triggers[]
- $addrOff += (2 * DDWORD_SIZE);
- $lenOff = $addrOff + DDWORD_SIZE;
- $seqOff = $lenOff + WORD_SIZE;
- }
+ print $fh (::readData($buffAddr, $buffSize));
if ($dbgMsg)
{
@@ -208,38 +129,16 @@ sub main
::userDisplay("$cycles\n");
}
- if ($on2off)
- {
- ::write64($symAddr + CONT_TRACE_ENABLE_FLAG_OFFSET, 0);
- if ($dbgMsg)
- {
- $on2off = ::read64($symAddr + CONT_TRACE_ENABLE_FLAG_OFFSET);
- ::userDisplay("new Cont Trace Enable Flag = $on2off\n");
- }
- }
+ ::writeScom(0x00050038, 8, 0x0);
- if (($foundBuffer == 3) && ($seqNum[1] < $seqNum[0]))
+ open TRACE, ($args->{"fsp-trace"}." -s ".::getImgPath().
+ "hbotStringFile $fsptrace_options $fname |") || die;
+ while (my $line = <TRACE>)
{
- my $tmp = $fname[0];
- $fname[0] =$fname[1];
- $fname[1] = $tmp;
+ ::userDisplay $line;
}
- for (my $i = 0; $i < MAX_NUM_CONT_TRACE_BUFFERS; $i++)
- {
- if (($foundBuffer & (1 << $i)))
- {
- #my $cmd = "cp " . $fname[$i] . " tracMERG." . $seqNum[$i];
- #system ( $cmd );
- open TRACE, ($args->{"fsp-trace"}." -s ".
- ::getImgPath()."hbotStringFile $fsptrace_options $fname[$i] |");
- while (my $line = <TRACE>)
- {
- ::userDisplay $line;
- }
- }
- unlink($fname[$i]);
- }
+ unlink $fname;
if ($dbgMsg)
{
@@ -257,7 +156,6 @@ sub helpInfo
"fsp-trace=<path>" => ["Path to non-default fsp-trace utility."],
"with-file-names" => ["Trace statements will include file name of place the",
"trace was defined."],
- "last" => ["Shutdown call to offload remaining traces."],
"enable-cont-trace=<1|0>" => ["Turn on|off continuous trace"],
"debug" => ["Turn on debug messages"],
}
OpenPOWER on IntegriCloud