summaryrefslogtreecommitdiffstats
path: root/src/build
diff options
context:
space:
mode:
authorMarty Gloff <mgloff@us.ibm.com>2017-06-19 11:54:55 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-06-30 10:18:59 -0400
commit178ec2a3c04b60d6abba4a6a9d344c9fb6f61027 (patch)
tree465293af14f04aff634cd58288334ab79e0ed8a3 /src/build
parentf70e2531c2b0bafc08151294d904991f0e376493 (diff)
downloadtalos-hostboot-178ec2a3c04b60d6abba4a6a9d344c9fb6f61027.tar.gz
talos-hostboot-178ec2a3c04b60d6abba4a6a9d344c9fb6f61027.zip
Change Bootloader data alignments
The data defined in bootloader_data.H is not aligned as originally thought. Some changes should be made to this file and the BlData.pm tool to nicely align this data and output it. Also add static_assert statements to alert for future changes. Use default address to find data and traces with optional argument to override that address. Change-Id: I4ed61273baa54b2c7cb510ef9a24cebb239d9300 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/42057 Reviewed-by: Matt Derksen <mderkse1@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com> Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com> Reviewed-by: Stephen M. Cprek <smcprek@us.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/build')
-rw-r--r--src/build/debug/Hostboot/BlData.pm54
-rw-r--r--src/build/debug/Hostboot/BlTrace.pm25
-rwxr-xr-xsrc/build/debug/Hostboot/_DebugFramework.pm21
3 files changed, 79 insertions, 21 deletions
diff --git a/src/build/debug/Hostboot/BlData.pm b/src/build/debug/Hostboot/BlData.pm
index 83e6e2866..ddbbb7304 100644
--- a/src/build/debug/Hostboot/BlData.pm
+++ b/src/build/debug/Hostboot/BlData.pm
@@ -57,13 +57,28 @@ sub main
{
::setBootloader();
+ my ($packName,$args) = @_;
+
my $btLdrHrmorOffset = 0x0000000000200000;
+ my $dataAddr = 0x08208000;
+ my $dataOffset = 0;
+
+ # Parse data address from options.
+ if (defined $args->{"address"})
+ {
+ $dataAddr = $args->{"address"};
+ }
+ elsif (defined $args->{"addr"})
+ {
+ $dataAddr = $args->{"addr"};
+ }
+
my ($dataSym, $dataSize) = ::findSymbolAddress("Bootloader::g_blData");
if (not defined $dataSym) { ::userDisplay "Cannot find symbol.\n"; die; }
my $dataSymStr = sprintf("0x%08X", $dataSym);
- my $dataAddr = ::read64($dataSym|$btLdrHrmorOffset);
- my $dataAddrStr = sprintf("0x%016llX", $dataAddr);
+ my $dataAddress = ::read64($dataSym|$btLdrHrmorOffset);
+ my $dataAddrStr = sprintf("0x%016llX", $dataAddress);
::userDisplay "------------Bootloader Data------------";
::userDisplay "\nData Symbol Address: ";
@@ -84,11 +99,12 @@ sub main
::userDisplay $scratchAddrStr;
::userDisplay "\n--------------------------------------------\n";
- my $traceAddr = $dataAddr;
+ my $traceAddr = $dataAddr + $dataOffset;
my $traceAddrStr = sprintf("0x%08X", $traceAddr);
my $traceSize = 64;
my $trace = ::readData($traceAddr,$traceSize);
my $traceData = formatData($trace);
+ $dataOffset += ::alignUp($traceSize, 16);
::userDisplay "\nTrace Buffer Address: ";
::userDisplay $traceAddrStr;
@@ -97,10 +113,11 @@ sub main
::userDisplay "\n--------------------------------------------\n";
- my $indexAddr = $dataAddr + 64;
+ my $indexAddr = $dataAddr + $dataOffset;
my $indexAddrStr = sprintf("0x%08X", $indexAddr);
my $index = ::read8($indexAddr);
my $indexStr = sprintf("0x%02X", $index);
+ $dataOffset += 2; # index and reserved
::userDisplay "\nTrace Index Address: ";
::userDisplay $indexAddrStr;
@@ -109,10 +126,11 @@ sub main
::userDisplay "\n\n--------------------------------------------\n";
- my $savedAddr = $dataAddr + 66;
+ my $savedAddr = $dataAddr + $dataOffset;
my $savedAddrStr = sprintf("0x%08X", $savedAddr);
my $saved = ::read8($savedAddr);
my $savedStr = sprintf("0x%02X", $saved);
+ $dataOffset += 2; # saved index and reserved
::userDisplay "\nSaved Trace Index Address: ";
::userDisplay $savedAddrStr;
@@ -121,10 +139,11 @@ sub main
::userDisplay "\n\n--------------------------------------------\n";
- my $loopCntAddr = $dataAddr + 68;
+ my $loopCntAddr = $dataAddr + $dataOffset;
my $loopCntAddrStr = sprintf("0x%08X", $loopCntAddr);
my $loopCnt = ::read32($loopCntAddr);
my $loopCntStr = sprintf("0x%08X", $loopCnt);
+ $dataOffset += 4; # loop counter
::userDisplay "\nPNOR Loop Counter Address: ";
::userDisplay $loopCntAddrStr;
@@ -133,10 +152,11 @@ sub main
::userDisplay "\n\n--------------------------------------------\n";
- my $pnorMmioAddr = $dataAddr + 72;
+ my $pnorMmioAddr = $dataAddr + $dataOffset;
my $pnorMmioAddrStr = sprintf("0x%08X", $pnorMmioAddr);
my $pnorMmio = ::read64($pnorMmioAddr);
my $pnorMmioStr = sprintf("0x%016llX", $pnorMmio);
+ $dataOffset += 8; # MMIO address
::userDisplay "\nFirst PNOR MMIO Address: ";
::userDisplay $pnorMmioAddrStr;
@@ -145,11 +165,12 @@ sub main
::userDisplay "\n\n--------------------------------------------\n";
- my $tiDataAreaAddr = $dataAddr + 80;
+ my $tiDataAreaAddr = $dataAddr + $dataOffset;
my $tiDataAreaAddrStr = sprintf("0x%08X", $tiDataAreaAddr);
my $tiDataAreaSize = 48;
my $tiDataArea = ::readData($tiDataAreaAddr,$tiDataAreaSize);
my $tiDataAreaData = formatData($tiDataArea);
+ $dataOffset += ::alignUp($tiDataAreaSize, 16);
::userDisplay "\nTI Data Area Address: ";
::userDisplay $tiDataAreaAddrStr;
@@ -158,11 +179,12 @@ sub main
::userDisplay "\n--------------------------------------------\n";
- my $hbbPnorSecAddr = $dataAddr + 128;
+ my $hbbPnorSecAddr = $dataAddr + $dataOffset;
my $hbbPnorSecAddrStr = sprintf("0x%08X", $hbbPnorSecAddr);
- my $hbbPnorSecSize = 32;
+ my $hbbPnorSecSize = 26;
my $hbbPnorSec = ::readData($hbbPnorSecAddr,$hbbPnorSecSize);
my $hbbPnorSecData = formatData($hbbPnorSec);
+ $dataOffset += ::alignUp($hbbPnorSecSize, 16);
::userDisplay "\nHBB PNOR Section Data Address: ";
::userDisplay $hbbPnorSecAddrStr;
@@ -171,10 +193,11 @@ sub main
::userDisplay "\n--------------------------------------------\n";
- my $secRomValAddr = $dataAddr + 160;
+ my $secRomValAddr = $dataAddr + $dataOffset;
my $secRomValAddrStr = sprintf("0x%08X", $secRomValAddr);
my $secRomVal = ::read8($secRomValAddr);
my $secRomValStr = sprintf("0x%02X", $secRomVal);
+ $dataOffset += 16; # secure ROM value and reserved
::userDisplay "\nSecure ROM Valid Address: ";
::userDisplay $secRomValAddrStr;
@@ -183,11 +206,12 @@ sub main
::userDisplay "\n\n--------------------------------------------\n";
- my $blToHbAddr = $dataAddr + 176;
+ my $blToHbAddr = $dataAddr + $dataOffset;
my $blToHbAddrStr = sprintf("0x%08X", $blToHbAddr);
- my $blToHbSize = 89;
+ my $blToHbSize = 91;
my $blToHb = ::readData($blToHbAddr,$blToHbSize);
my $blToHbData = formatData($blToHb);
+ $dataOffset += ::alignUp($blToHbSize, 16);
::userDisplay "\nBL to HB Data Address: ";
::userDisplay $blToHbAddrStr;
@@ -203,5 +227,9 @@ sub helpInfo
my %info = (
name => "BlData",
intro => ["Displays Bootloader data."],
+ options => {
+ "address='data address'" => ["Address of Bootloader data."],
+ },
+ notes => ["addr can be used as a short-name for 'address'."]
);
}
diff --git a/src/build/debug/Hostboot/BlTrace.pm b/src/build/debug/Hostboot/BlTrace.pm
index 27a5e6aa6..8aa93a951 100644
--- a/src/build/debug/Hostboot/BlTrace.pm
+++ b/src/build/debug/Hostboot/BlTrace.pm
@@ -129,13 +129,22 @@ sub main
{
::setBootloader();
- my $btLdrHrmorOffset = 0x0000000000200000;
+ my ($packName,$args) = @_;
- my ($dataSym, $dataSize) = ::findSymbolAddress("Bootloader::g_blData");
- if (not defined $dataSym) { ::userDisplay "Cannot find symbol.\n"; die; }
- my $dataAddr = ::read64($dataSym|$btLdrHrmorOffset);
+ my $traceAddr = 0x08208000;
+ my $traceSize = 64;
- my $indexAddr = $dataAddr + 64;
+ # Parse trace address from options.
+ if (defined $args->{"address"})
+ {
+ $traceAddr = $args->{"address"};
+ }
+ elsif (defined $args->{"addr"})
+ {
+ $traceAddr = $args->{"addr"};
+ }
+
+ my $indexAddr = $traceAddr + $traceSize;
my $index = ::read8($indexAddr);
my $indexStr = sprintf("0x%02X", $index);
@@ -143,9 +152,7 @@ sub main
::userDisplay "\nNext Entry Index: ";
::userDisplay $indexStr;
- my $traceAddr = $dataAddr;
my $traceAddrStr = sprintf("0x%08X", $traceAddr);
- my $traceSize = 64;
my $trace = ::readData($traceAddr,$traceSize);
$trace =~ s/\0+//g; #strip off nulls
my $traceData = formatTrace($trace);
@@ -164,5 +171,9 @@ sub helpInfo
my %info = (
name => "BlTrace",
intro => ["Displays the Bootloader trace buffer."],
+ options => {
+ "address='trace address'" => ["Address of trace buffer."],
+ },
+ notes => ["addr can be used as a short-name for 'address'."]
);
}
diff --git a/src/build/debug/Hostboot/_DebugFramework.pm b/src/build/debug/Hostboot/_DebugFramework.pm
index 1da95cf22..8937f4f6d 100755
--- a/src/build/debug/Hostboot/_DebugFramework.pm
+++ b/src/build/debug/Hostboot/_DebugFramework.pm
@@ -6,7 +6,7 @@
#
# OpenPOWER HostBoot Project
#
-# Contributors Listed Below - COPYRIGHT 2011,2016
+# Contributors Listed Below - COPYRIGHT 2011,2017
# [+] International Business Machines Corp.
#
#
@@ -55,6 +55,7 @@ our @EXPORT = ( 'setBootloader', 'clearBootloader', 'callToolModule',
'translateHRMOR',
'getIstepList',
'findSymbolWithinAddrRange',
+ 'alignUp',
);
our ($parsedSymbolFile, %symbolAddress, %symbolTOC,
@@ -748,4 +749,22 @@ sub getIstepList
return @isteplist;
}
+# @sub alignUp
+#
+# Align an input to boundary greater than or equal to input.
+#
+# @param Input to align.
+# @param Boundary on which to align.
+#
+sub alignUp
+{
+ my $input = shift;
+ my $boundary = shift;
+
+ my $output = $input;
+ $output += ($boundary - ($input % $boundary)) % $boundary;
+
+ return $output;
+}
+
__END__
OpenPOWER on IntegriCloud