diff options
author | Jim Yuan <jim.yuan@supermicro.com> | 2018-05-16 11:34:57 -0700 |
---|---|---|
committer | William G. Hoffa <wghoffa@us.ibm.com> | 2018-05-17 11:32:51 -0400 |
commit | 01be61c03770d4f837febb9debdfb7318d0b6f3c (patch) | |
tree | 334b7cb6ab107cb7e1eedda285e68fef1a4315aa | |
parent | 1b819687e056317f525995454775bd8e4837ec8e (diff) | |
download | talos-hostboot-01be61c03770d4f837febb9debdfb7318d0b6f3c.tar.gz talos-hostboot-01be61c03770d4f837febb9debdfb7318d0b6f3c.zip |
Fix FRU board mfg date and time.
VPD data is in BCD format and needs translation.
Resolves #138
Signed-off-by: Jim Yuan <jim.yuan@supermicro.com>
Change-Id: Ib3de6a7cc75876bc04930643c02bfc7734723db5
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/58945
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
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: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
-rw-r--r-- | src/usr/ipmi/ipmifruinv.C | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/src/usr/ipmi/ipmifruinv.C b/src/usr/ipmi/ipmifruinv.C index bbdb0f95e..b8f012709 100644 --- a/src/usr/ipmi/ipmifruinv.C +++ b/src/usr/ipmi/ipmifruinv.C @@ -5,8 +5,9 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* Contributors Listed Below - COPYRIGHT 2014,2017 */ +/* Contributors Listed Below - COPYRIGHT 2014,2018 */ /* [+] International Business Machines Corp. */ +/* [+] Jim Yuan */ /* */ /* */ /* Licensed under the Apache License, Version 2.0 (the "License"); */ @@ -379,6 +380,11 @@ void IpmiFruInv::setAreaSize(std::vector<uint8_t> &io_data, uint8_t i_offset) return; } +static inline uint8_t bcd2_to_int(uint8_t bcd) +{ + return ((bcd >> 4) & 0xF) * 10 + (bcd & 0xF); +} + // Function to compute the correct data for the Mfg date/time section. // IPMI expects the time to be in seconds from 01/01/1996. errlHndl_t IpmiFruInv::formatMfgData(std::vector<uint8_t> i_mfgDateData, @@ -426,12 +432,13 @@ errlHndl_t IpmiFruInv::formatMfgData(std::vector<uint8_t> i_mfgDateData, // into a uint64 representing number of minute since 1/1/96 // The vpd data is expected to be in this format VVCCYYmmDDHHMMSS - uint8_t century = i_mfgDateData.at(1); - uint8_t year = i_mfgDateData.at(2); - uint8_t month = i_mfgDateData.at(3); - uint8_t day = i_mfgDateData.at(4); - uint8_t hour = i_mfgDateData.at(5); - uint8_t minute = i_mfgDateData.at(6); + // Note that it is Binary Coded Decimal(BCD). Need to translate to int. + uint8_t century = bcd2_to_int(i_mfgDateData.at(1)); + uint8_t year = bcd2_to_int(i_mfgDateData.at(2)); + uint8_t month = bcd2_to_int(i_mfgDateData.at(3)); + uint8_t day = bcd2_to_int(i_mfgDateData.at(4)); + uint8_t hour = bcd2_to_int(i_mfgDateData.at(5)); + uint8_t minute = bcd2_to_int(i_mfgDateData.at(6)); // Subtract year uint8_t numOfYears = (century*100 + year) - 1996; |