summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJim Yuan <jim.yuan@supermicro.com>2018-05-16 11:34:57 -0700
committerWilliam G. Hoffa <wghoffa@us.ibm.com>2018-05-17 11:32:51 -0400
commit01be61c03770d4f837febb9debdfb7318d0b6f3c (patch)
tree334b7cb6ab107cb7e1eedda285e68fef1a4315aa
parent1b819687e056317f525995454775bd8e4837ec8e (diff)
downloadtalos-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.C21
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;
OpenPOWER on IntegriCloud