Skip to content

Commit

Permalink
Adds endian_swap to fapi2
Browse files Browse the repository at this point in the history
Change-Id: Ie076098cd05ea0ae768d8da142df1b933ab7eb07
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/65525
Dev-Ready: STEPHEN GLANCY <sglancy@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: HWSV CI <hwsv-ci+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: Louis Stermole <stermole@us.ibm.com>
Reviewed-by: ANDRE A. MARIN <aamarin@us.ibm.com>
Reviewed-by: Matt K. Light <mklight@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: Jennifer A. Stofer <stofer@us.ibm.com>
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/65529
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Christian R. Geddes <crgeddes@us.ibm.com>
  • Loading branch information
sglancy6 authored and crgeddes committed Sep 18, 2018
1 parent 263f34b commit 4f35730
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@
#include <lib/shared/mss_kind.H>
#include <lib/phy/dp16.H>
#include <lib/mss_attribute_accessors_manual.H>
#include <endian.h>

namespace mss
{
Expand Down Expand Up @@ -826,7 +825,7 @@ fapi2::ReturnCode eff_dimm::dram_mfg_id()
FAPI_TRY( iv_spd_decoder.dram_manufacturer_id_code(l_decoder_val), "Failed getting dram id code from SPD %s",
mss::c_str(iv_dimm) );

endian_swap(l_decoder_val);
fapi2::endian_swap(l_decoder_val);

switch (l_decoder_val)
{
Expand Down
21 changes: 0 additions & 21 deletions src/import/chips/p9/procedures/hwp/memory/lib/utils/swizzle.H
Original file line number Diff line number Diff line change
Expand Up @@ -41,27 +41,6 @@
namespace mss
{

///
/// @brief Endian swapping
/// @tparam T input type
/// @param[in,out] io_input integral input
/// @note https://stackoverflow.com/questions/105252/how-do-i-convert-between-big-endian-and-little-endian-values-in-c
///
template < typename T >
void endian_swap(T& io_input)
{
constexpr size_t MIN_BYTES = 2;
static_assert(sizeof(T) >= MIN_BYTES, "Byte swapping requires at least 2 bytes of data");

uint8_t* l_varArray = reinterpret_cast<uint8_t*>(&io_input);

for(size_t i = 0; i < sizeof(io_input) / 2; i++)
{
const size_t BYTE_SWAP_INDEX = sizeof(io_input) - 1 - i;
std::swap(l_varArray[BYTE_SWAP_INDEX], l_varArray[i]);
}
}

///
/// @brief Swap two bits in a buffer
/// @tparam TB the bit in the buffer to move to SB
Expand Down
27 changes: 27 additions & 0 deletions src/import/hwpf/fapi2/include/utils.H
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,33 @@

namespace fapi2
{

///
/// @brief Endian swapping
/// @tparam T input type
/// @param[in,out] io_input integral input
/// @note https://stackoverflow.com/questions/105252/how-do-i-convert-between-big-endian-and-little-endian-values-in-c
/// This function does not take into account the system's endianness, but just does the endian swap
///
template < typename T >
void endian_swap(T& io_input)
{
constexpr size_t MIN_BYTES = 2;
static_assert(sizeof(T) >= MIN_BYTES, "Byte swapping requires at least 2 bytes of data");

uint8_t* l_varArray = reinterpret_cast<uint8_t*>(&io_input);

for(size_t i = 0; i < sizeof(io_input) / 2; i++)
{
const size_t BYTE_SWAP_INDEX = sizeof(io_input) - 1 - i;

// Rolling our own swap as certain downstream libraries do not have std::swap enabled
const auto l_temp = l_varArray[BYTE_SWAP_INDEX];
l_varArray[BYTE_SWAP_INDEX] = l_varArray[i];
l_varArray[i] = l_temp;
}
}

#ifndef __PPE__
///
/// @brief Enable/Disable special wakeup on processor chip core(s)
Expand Down

0 comments on commit 4f35730

Please sign in to comment.