From 475bc8d37b58095febf9ef440874542e107c9003 Mon Sep 17 00:00:00 2001 From: Thi Tran Date: Wed, 4 Oct 2017 07:01:51 -0500 Subject: [PATCH] Cumulus: support MCFGPA_HOLE0_UPPER_ADDRESS_AT_END_OF_RANGE bit setting Change-Id: Iab5fb30bdbb2d27e98f15d64081e52d4326dde50 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/47140 Tested-by: FSP CI Jenkins Tested-by: Jenkins Server Reviewed-by: LENNARD G. STREAT Tested-by: Hostboot CI Reviewed-by: Joseph J. McGill Reviewed-by: Jennifer A. Stofer Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/47141 Tested-by: Jenkins OP Build CI Tested-by: Jenkins OP HW Reviewed-by: Daniel M. Crowell --- .../procedures/hwp/nest/p9_mss_setup_bars.C | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/import/chips/p9/procedures/hwp/nest/p9_mss_setup_bars.C b/src/import/chips/p9/procedures/hwp/nest/p9_mss_setup_bars.C index c2dbbd1867b..a5ccc13c598 100644 --- a/src/import/chips/p9/procedures/hwp/nest/p9_mss_setup_bars.C +++ b/src/import/chips/p9/procedures/hwp/nest/p9_mss_setup_bars.C @@ -1065,6 +1065,35 @@ fapi_try_exit: return fapi2::current_err; } +/// +/// @brief Set MCFGPA MEMORY HOLE UPPER_ADDRESS_AT_END_OF_RANGE bit +/// +/// @param[in] i_target MC target (MCS or MI) +/// @param[in/out] io_data Data buffer +/// +/// @return FAPI2_RC_SUCCESS if success, else error code. +/// +template +void setUpperAddrEndOfRangeBit(const fapi2::Target& i_target, + fapi2::buffer& io_scomData); + +/// MC = MCS (Nimbus) +template<> +void setUpperAddrEndOfRangeBit(const fapi2::Target& i_target, + fapi2::buffer& io_scomData) +{ + // This bit is not used in Nimbus + return; +} + +/// MC = MI (Cumulus) +template<> +void setUpperAddrEndOfRangeBit(const fapi2::Target& i_target, + fapi2::buffer& io_scomData) +{ + io_scomData.setBit(); + return; +} /// /// @brief Write BAR data to a memory controller @@ -1201,6 +1230,9 @@ fapi2::ReturnCode writeMCBarData( // MCFGPA HOLE0 valid (bit 0) l_scomData.setBit(); + // MCFGPA_HOLE0_UPPER_ADDRESS_AT_END_OF_RANGE + setUpperAddrEndOfRangeBit(l_target, l_scomData); + // Hole 0 lower addr // 0b0000000001 = 4GB l_scomData.insertFromRight(); + // MCFGPA_HOLE1_UPPER_ADDRESS_AT_END_OF_RANGE + setUpperAddrEndOfRangeBit(l_target, l_scomData); + // Hole 1 lower addr // 0b0000000001 = 4GB l_scomData.insertFromRight(); + // MCFGPA_HOLE0_UPPER_ADDRESS_AT_END_OF_RANGE + setUpperAddrEndOfRangeBit(l_target, l_scomData); + // Hole 0 lower addr // 0b0000000001 = 4GB l_scomData.insertFromRight(); + // MCFGPA_HOLE1_UPPER_ADDRESS_AT_END_OF_RANGE + setUpperAddrEndOfRangeBit(l_target, l_scomData); + // Hole 1 lower addr l_scomData.insertFromRight(