diff options
author | Marty Gloff <mgloff@us.ibm.com> | 2017-06-19 11:54:55 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2017-06-30 10:18:59 -0400 |
commit | 178ec2a3c04b60d6abba4a6a9d344c9fb6f61027 (patch) | |
tree | 465293af14f04aff634cd58288334ab79e0ed8a3 /src | |
parent | f70e2531c2b0bafc08151294d904991f0e376493 (diff) | |
download | blackbird-hostboot-178ec2a3c04b60d6abba4a6a9d344c9fb6f61027.tar.gz blackbird-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')
-rw-r--r-- | src/build/debug/Hostboot/BlData.pm | 54 | ||||
-rw-r--r-- | src/build/debug/Hostboot/BlTrace.pm | 25 | ||||
-rwxr-xr-x | src/build/debug/Hostboot/_DebugFramework.pm | 21 | ||||
-rw-r--r-- | src/include/bootloader/bootloader_data.H | 13 |
4 files changed, 91 insertions, 22 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__ diff --git a/src/include/bootloader/bootloader_data.H b/src/include/bootloader/bootloader_data.H index 345de9e26..a6f4654e1 100644 --- a/src/include/bootloader/bootloader_data.H +++ b/src/include/bootloader/bootloader_data.H @@ -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; /** |