summaryrefslogtreecommitdiffstats
path: root/src/import/chips/p9/procedures/hwp/pm
diff options
context:
space:
mode:
authorClaus Michael Olsen <cmolsen@us.ibm.com>2017-05-16 15:16:00 -0500
committerDean Sanner <dsanner@us.ibm.com>2017-07-14 08:28:11 -0400
commit609e5f15df6d123ec762c3174013d1a3ec953146 (patch)
treeaeecacdff2b5c8374ed9aaec566641c889644c32 /src/import/chips/p9/procedures/hwp/pm
parent1e7e41d6f38c44956764e2871d8f0a85df28b4be (diff)
downloadtalos-hostboot-609e5f15df6d123ec762c3174013d1a3ec953146.tar.gz
talos-hostboot-609e5f15df6d123ec762c3174013d1a3ec953146.zip
xip_customize: GPTR/overlays stage 1 support
Updated to poll Nimbus DD level and whether there's support for overlays in the XIP interface. Further, updated to add three extra args in xip_customize API, two of which are to support a third ring work buffer for the overlays handling. This has necessitated making changes to hcode_image_build (HIB) API as well. Note that the calling codes of xip_customize and HIB need to be updated to supply the additional args in their APIs. Note that this code stage 1 will work for Nimbus DD2 with Gptr rings in Mvpd, and no Gptr rings in the HW image. It will, however, not work if there's content in .overlays or if there's Gptr rings already in the .rings section. Thus, the stage 1 code here will work with a DD2 image (i.e., that does NOT have Gptr rings in .rings in HW image) as long as noone has put any real Gptr initfiles in for processing (which would result in ring content in .overlays). We must ensure that the stage 2 code of xip_customize gets merged on the HB side to enable processing of .overlays content before we actually add any Gptr initfiles for the .overlays section into EKB. Change-Id: I3d6ab8a9add239c92819613dcae21ef5faf0a1c5 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/40591 Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Tested-by: PPE CI <ppe-ci+hostboot@us.ibm.com> Tested-by: Hostboot CI <hostboot-ci+hostboot@us.ibm.com> Reviewed-by: Sumit Kumar <sumit_kumar@in.ibm.com> Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com> Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/40898 Reviewed-by: Dean Sanner <dsanner@us.ibm.com> Tested-by: Dean Sanner <dsanner@us.ibm.com>
Diffstat (limited to 'src/import/chips/p9/procedures/hwp/pm')
-rw-r--r--src/import/chips/p9/procedures/hwp/pm/p9_hcode_image_build.C44
-rw-r--r--src/import/chips/p9/procedures/hwp/pm/p9_hcode_image_build.H14
2 files changed, 47 insertions, 11 deletions
diff --git a/src/import/chips/p9/procedures/hwp/pm/p9_hcode_image_build.C b/src/import/chips/p9/procedures/hwp/pm/p9_hcode_image_build.C
index c6cbe0fde..3380235c3 100644
--- a/src/import/chips/p9/procedures/hwp/pm/p9_hcode_image_build.C
+++ b/src/import/chips/p9/procedures/hwp/pm/p9_hcode_image_build.C
@@ -149,16 +149,21 @@ struct RingBufData
uint32_t iv_sizeWorkBuf1;
void* iv_pWorkBuf2;
uint32_t iv_sizeWorkBuf2;
+ void* iv_pWorkBuf3;
+ uint32_t iv_sizeWorkBuf3;
RingBufData( void* i_pRingBuf1, const uint32_t i_ringSize,
void* i_pWorkBuf1, const uint32_t i_sizeWorkBuf1,
- void* i_pWorkBuf2, const uint32_t i_sizeWorkBuf2 ) :
+ void* i_pWorkBuf2, const uint32_t i_sizeWorkBuf2,
+ void* i_pWorkBuf3, const uint32_t i_sizeWorkBuf3 ) :
iv_pRingBuffer( i_pRingBuf1),
iv_ringBufSize(i_ringSize),
iv_pWorkBuf1( i_pWorkBuf1 ),
iv_sizeWorkBuf1( i_sizeWorkBuf1 ),
iv_pWorkBuf2( i_pWorkBuf2 ),
- iv_sizeWorkBuf2( i_sizeWorkBuf2 )
+ iv_sizeWorkBuf2( i_sizeWorkBuf2 ),
+ iv_pWorkBuf3( i_pWorkBuf3 ),
+ iv_sizeWorkBuf3( i_sizeWorkBuf3 )
{}
@@ -168,7 +173,9 @@ struct RingBufData
iv_pWorkBuf1( NULL ),
iv_sizeWorkBuf1( 0 ),
iv_pWorkBuf2( NULL ),
- iv_sizeWorkBuf2( 0 )
+ iv_sizeWorkBuf2( 0 ),
+ iv_pWorkBuf3( NULL ),
+ iv_sizeWorkBuf3( 0 )
{ }
};
@@ -549,7 +556,8 @@ fapi_try_exit:
fapi2::ReturnCode validateInputArguments( void* const i_pImageIn, void* i_pImageOut,
SysPhase_t i_phase, ImageType_t i_imgType,
void* i_pBuf1, uint32_t i_bufSize1, void* i_pBuf2,
- uint32_t i_bufSize2, void* i_pBuf3, uint32_t i_bufSize3 )
+ uint32_t i_bufSize2, void* i_pBuf3, uint32_t i_bufSize3,
+ void* i_pBuf4, uint32_t i_bufSize4 )
{
uint32_t l_rc = IMG_BUILD_SUCCESS;
uint32_t hwImagSize = 0;
@@ -600,6 +608,11 @@ fapi2::ReturnCode validateInputArguments( void* const i_pImageIn, void* i_pImage
.set_TEMP3_BUF_SIZE( i_bufSize3 ),
"Invalid temp buffer3 passed for hcode image build" );
+ FAPI_ASSERT( ( i_pBuf4 != NULL ),
+ fapi2::HCODE_INVALID_TEMP4_BUF()
+ .set_TEMP4_BUF_SIZE( i_bufSize4 ),
+ "Invalid temp buffer4 passed for hcode image build" );
+
FAPI_ASSERT( ( i_bufSize1 != 0 ) ,
fapi2::HCODE_INVALID_TEMP1_BUF_SIZE()
.set_TEMP1_BUF_SIZE( i_bufSize1 ),
@@ -615,6 +628,11 @@ fapi2::ReturnCode validateInputArguments( void* const i_pImageIn, void* i_pImage
.set_TEMP3_BUF_SIZE( i_bufSize3 ),
"Invalid size for temp buf3 passed for hcode image build" );
+ FAPI_ASSERT( ( i_bufSize4 != 0 ),
+ fapi2::HCODE_INVALID_TEMP4_BUF_SIZE()
+ .set_TEMP4_BUF_SIZE( i_bufSize4 ),
+ "Invalid size for temp buf4 passed for hcode image build" );
+
FAPI_ASSERT( ( i_imgType.isBuildValid() ),
fapi2::HCODE_INVALID_IMG_TYPE(),
"Invalid image type passed for hcode image build" );
@@ -1679,6 +1697,8 @@ uint32_t getPpeScanRings( void* const i_pHwImage,
(uintptr_t)(i_ringData.iv_pWorkBuf1), i_ringData.iv_sizeWorkBuf1);
FAPI_DBG("Work buf2 (buf,size)=(0x%016llX,0x%08X)",
(uintptr_t)(i_ringData.iv_pWorkBuf2), i_ringData.iv_sizeWorkBuf2);
+ FAPI_DBG("Work buf2 (buf,size)=(0x%016llX,0x%08X)",
+ (uintptr_t)(i_ringData.iv_pWorkBuf3), i_ringData.iv_sizeWorkBuf3);
FAPI_DBG("---------------=== Buffer Specs Ends --------------------");
FAPI_DBG("--------------- Buffer Initializaiton to 0 --------------------");
@@ -1686,6 +1706,7 @@ uint32_t getPpeScanRings( void* const i_pHwImage,
memset( (uint8_t*) i_ringData.iv_pRingBuffer, 0x00, i_ringData.iv_ringBufSize );
memset( (uint8_t*) i_ringData.iv_pWorkBuf1, 0x00, i_ringData.iv_sizeWorkBuf1 );
memset( (uint8_t*) i_ringData.iv_pWorkBuf2, 0x00, i_ringData.iv_sizeWorkBuf2 );
+ memset( (uint8_t*) i_ringData.iv_pWorkBuf3, 0x00, i_ringData.iv_sizeWorkBuf3 );
uint32_t l_bootMask = ENABLE_ALL_CORE;
fapi2::ReturnCode l_fapiRc = fapi2::FAPI2_RC_SUCCESS;
@@ -1694,6 +1715,7 @@ uint32_t getPpeScanRings( void* const i_pHwImage,
p9_xip_customize,
i_procTgt,
i_pHwImage,
+ i_pHwImage,
hwImageSize,
i_ringData.iv_pRingBuffer,
i_ringData.iv_ringBufSize,
@@ -1703,6 +1725,8 @@ uint32_t getPpeScanRings( void* const i_pHwImage,
i_ringData.iv_sizeWorkBuf1,
i_ringData.iv_pWorkBuf2,
i_ringData.iv_sizeWorkBuf2,
+ i_ringData.iv_pWorkBuf3,
+ i_ringData.iv_sizeWorkBuf3,
l_bootMask );
if( l_fapiRc )
@@ -3923,7 +3947,9 @@ fapi2::ReturnCode p9_hcode_image_build( CONST_FAPI2_PROC& i_procTgt,
void* const i_pBuf2,
const uint32_t i_sizeBuf2,
void* const i_pBuf3,
- const uint32_t i_sizeBuf3 )
+ const uint32_t i_sizeBuf3,
+ void* const i_pBuf4,
+ const uint32_t i_sizeBuf4 )
{
@@ -3946,7 +3972,9 @@ fapi2::ReturnCode p9_hcode_image_build( CONST_FAPI2_PROC& i_procTgt,
i_pBuf2,
i_sizeBuf2,
i_pBuf3,
- i_sizeBuf3 );
+ i_sizeBuf3,
+ i_pBuf4,
+ i_sizeBuf4 );
FAPI_TRY( validateInputArguments( i_pImageIn,
i_pHomerImage,
@@ -3957,7 +3985,9 @@ fapi2::ReturnCode p9_hcode_image_build( CONST_FAPI2_PROC& i_procTgt,
i_pBuf2,
i_sizeBuf2,
i_pBuf3,
- i_sizeBuf3 ),
+ i_sizeBuf3,
+ i_pBuf4,
+ i_sizeBuf4 ),
"Invalid arguments, escaping hcode image build" );
// HW Image is a nested XIP Image. Let us read global TOC of hardware image
diff --git a/src/import/chips/p9/procedures/hwp/pm/p9_hcode_image_build.H b/src/import/chips/p9/procedures/hwp/pm/p9_hcode_image_build.H
index 8aa661c0b..1ec980981 100644
--- a/src/import/chips/p9/procedures/hwp/pm/p9_hcode_image_build.H
+++ b/src/import/chips/p9/procedures/hwp/pm/p9_hcode_image_build.H
@@ -138,7 +138,9 @@ extern "C"
void* const i_pBuf2,
const uint32_t i_sizeBuf2,
void* const i_pBuf3,
- const uint32_t i_sizeBuf3 );
+ const uint32_t i_sizeBuf3,
+ void* const i_pBuf4,
+ const uint32_t i_sizeBuf4 );
/**
* @brief builds a STOP image using a refrence image as input.
@@ -152,8 +154,10 @@ extern "C"
* @param i_sizeBuf1 size of work buffer1. Minimum size expected HW_IMG_RING_SIZE.
* @param i_pBuf2 pointer to a work buffer2. Minimum size expected WORK_BUF_SIZE.
* @param i_sizeBuf2 size of work buffer2
- * @param i_pBuf3 pointer to a work buffer2. Minimum size expected WORK_BUF_SIZE.
- * @param i_sizeBuf3 size of work buffer2
+ * @param i_pBuf3 pointer to a work buffer3. Minimum size expected WORK_BUF_SIZE.
+ * @param i_sizeBuf3 size of work buffer3
+ * @param i_pBuf4 pointer to a work buffer4. Minimum size expected WORK_BUF_SIZE.
+ * @param i_sizeBuf4 size of work buffer4
* @note needs attribute ATTR_EC
*/
fapi2::ReturnCode p9_hcode_image_build( CONST_FAPI2_PROC& i_procTgt,
@@ -167,6 +171,8 @@ extern "C"
void* const i_pBuf2,
const uint32_t i_sizeBuf2,
void* const i_pBuf3,
- const uint32_t i_sizeBuf3 );
+ const uint32_t i_sizeBuf3,
+ void* const i_pBuf4,
+ const uint32_t i_sizeBuf4 );
} // extern C
#endif //__HCODE_IMG_BUILD_H_
OpenPOWER on IntegriCloud