Skip to content

Commit

Permalink
Change Bootloader data alignments
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
mgloff authored and dcrowell77 committed Jun 30, 2017
1 parent f70e253 commit 178ec2a
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 22 deletions.
54 changes: 41 additions & 13 deletions src/build/debug/Hostboot/BlData.pm
Original file line number Diff line number Diff line change
Expand Up @@ -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: ";
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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'."]
);
}
25 changes: 18 additions & 7 deletions src/build/debug/Hostboot/BlTrace.pm
Original file line number Diff line number Diff line change
Expand Up @@ -129,23 +129,30 @@ 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);

::userDisplay "\n------------Bootloader Trace------------";
::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);
Expand All @@ -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'."]
);
}
21 changes: 20 additions & 1 deletion src/build/debug/Hostboot/_DebugFramework.pm
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
#
# OpenPOWER HostBoot Project
#
# Contributors Listed Below - COPYRIGHT 2011,2016
# Contributors Listed Below - COPYRIGHT 2011,2017
# [+] International Business Machines Corp.
#
#
Expand Down Expand Up @@ -55,6 +55,7 @@ our @EXPORT = ( 'setBootloader', 'clearBootloader', 'callToolModule',
'translateHRMOR',
'getIstepList',
'findSymbolWithinAddrRange',
'alignUp',
);

our ($parsedSymbolFile, %symbolAddress, %symbolTOC,
Expand Down Expand Up @@ -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__
13 changes: 12 additions & 1 deletion src/include/bootloader/bootloader_data.H
Original file line number Diff line number Diff line change
Expand Up @@ -73,16 +73,27 @@ namespace Bootloader{

// Instance of the TI Data Area
HB_TI_DataArea bl_TIDataArea;
static_assert( sizeof(HB_TI_DataArea) == 48, "HB_TI_DataArea "
"size changed. Check bootloader_data.H alignment. "
"Fix BlData.pm processing.");

// Buffer to save HBB PNOR section data
PNOR::SectionData_t bl_hbbSection;
uint8_t bl_reserved3[(64 - sizeof(PNOR::SectionData_t)) % 16];
static_assert( sizeof(PNOR::SectionData_t) == 26, "SectionData_t "
"size changed. Check bootloader_data.H alignment. "
"Fix BlData.pm processing.");

// Bool indicating if the secureROM is valid. Toggles verification.
bool secureRomValid;
uint8_t bl_reserved3[15];
uint8_t bl_reserved4[15];

// Object that will be stored where the SBE HB structure indicates
BlToHbData blToHbData;
uint8_t bl_reserved5[(512 - sizeof(BlToHbData)) % 16];
static_assert( sizeof(BlToHbData) == 91, "BlToHbData "
"size changed. Check bootloader_data.H alignment. "
"Fix BlData.pm processing.");
} blData_t;

/**
Expand Down

0 comments on commit 178ec2a

Please sign in to comment.