From 6677ffcbda04c73a7d3ed1e651e3394c8218e503 Mon Sep 17 00:00:00 2001 From: Dan Crowell Date: Mon, 6 Mar 2017 16:36:11 -0600 Subject: Propagate attribute overrides up to the HBRT code Attribute overrides are stored in a separate tank of memory from the regular attribute values. This tank will be added as an additional reserved memory section for HBRT to consume (only if overrides exist). Also fixed a couple bugs encountered while testing: - No longer crashes if an error is created inside the targeting initialization code. - Added reserved bytes to RHB definition. Change-Id: I5b10f7ad8dfcb58c550868bb83c4d843f48e1aae RTC: 169942 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/38547 Tested-by: Jenkins Server Tested-by: Jenkins OP Build CI Tested-by: FSP CI Jenkins Reviewed-by: Corey V. Swenson Reviewed-by: Martin Gloff Reviewed-by: Christian R. Geddes Reviewed-by: Daniel M. Crowell --- src/usr/testcore/rtloader/loader.H | 53 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) (limited to 'src/usr/testcore/rtloader') diff --git a/src/usr/testcore/rtloader/loader.H b/src/usr/testcore/rtloader/loader.H index 8e07cf021..8914c709b 100644 --- a/src/usr/testcore/rtloader/loader.H +++ b/src/usr/testcore/rtloader/loader.H @@ -42,6 +42,8 @@ #include #include #include +#include + trace_desc_t* g_trac_hbrt = NULL; TRAC_INIT(&g_trac_hbrt, "HBRT_TEST", 2*KILOBYTE); @@ -331,10 +333,12 @@ class RuntimeLoaderTest : public CxxTest::TestSuite static uint64_t rt_get_reserved_mem(const char* i_region, uint32_t i_instance) { - if (0 == strcmp(i_region, "ibm,hbrt-vpd-image")) + if (0 == strcmp(i_region, HBRT_RSVD_MEM__VPD_CACHE)) return rt_get_vpd(); - else if (0 == strcmp(i_region, "ibm,hbrt-target-image")) + else if (0 == strcmp(i_region, HBRT_RSVD_MEM__ATTRIBUTES)) return rt_get_targ(); + else if (0 == strcmp(i_region, HBRT_RSVD_MEM__OVERRIDES)) + return rt_get_targ_override(); else return 0; } @@ -543,6 +547,49 @@ class RuntimeLoaderTest : public CxxTest::TestSuite return cv_targ_addr; } + static uint64_t rt_get_targ_override() + { + using namespace TARGETING; + if (cv_targ_over_addr != 0) + { + return cv_targ_over_addr; + } + + // add an override to use in a later test + AttributeTank* l_tank = + &Target::theTargOverrideAttrTank(); + ATTR_SCRATCH_INT32_1_type l_val = -99; + l_tank->setAttribute(ATTR_SCRATCH_INT32_1, + TYPE_SYS, + AttributeTank::ATTR_POS_NA, + AttributeTank::ATTR_UNIT_POS_NA, + AttributeTank::ATTR_NODE_NA, + 0, sizeof(l_val), &l_val); + + // copy overrides into local buffer + size_t l_actualSize = 64*KILOBYTE; + uint8_t* l_overrideData = + reinterpret_cast(malloc(l_actualSize)); + errlHndl_t l_elog = TARGETING::AttrRP::saveOverrides( + l_overrideData, + l_actualSize ); + if(l_elog) + { + TRACFCOMP( g_trac_hbrt, ERR_MRK" Attribute Overrides exceed allocated space" ); + errlCommit( l_elog, CXXTEST_COMP_ID ); + } + else if( l_actualSize == 0 ) + { + TRACFCOMP( g_trac_hbrt, INFO_MRK" No Attribute Overrides Present" ); + } + else + { + cv_targ_over_addr = reinterpret_cast(l_overrideData); + } + + return cv_targ_over_addr; + } + static int rt_ipmi_msg(uint8_t netfn, uint8_t cmd, void *tx_buf, size_t tx_size, void *rx_buf, size_t *rx_size) @@ -574,6 +621,7 @@ class RuntimeLoaderTest : public CxxTest::TestSuite static uint64_t cv_vpd_phys_addr; static uint64_t cv_targ_addr; static uint64_t cv_targ_phys_addr; + static uint64_t cv_targ_over_addr; }; @@ -583,6 +631,7 @@ uint64_t RuntimeLoaderTest::cv_vpd_addr = 0; uint64_t RuntimeLoaderTest::cv_vpd_phys_addr = 0; uint64_t RuntimeLoaderTest::cv_targ_addr = 0; uint64_t RuntimeLoaderTest::cv_targ_phys_addr = 0; +uint64_t RuntimeLoaderTest::cv_targ_over_addr = 0; -- cgit v1.2.3