diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/include/usr/i2c/eepromddreasoncodes.H | 6 | ||||
-rw-r--r-- | src/usr/devtree/HBconfig | 5 | ||||
-rw-r--r-- | src/usr/hwpf/hwp/dmi_training/HBconfig | 3 | ||||
-rwxr-xr-x | src/usr/i2c/eepromdd.C | 87 | ||||
-rw-r--r-- | src/usr/vpd/cvpd.C | 1 | ||||
-rw-r--r-- | src/usr/vpd/mvpd.C | 1 |
6 files changed, 86 insertions, 17 deletions
diff --git a/src/include/usr/i2c/eepromddreasoncodes.H b/src/include/usr/i2c/eepromddreasoncodes.H index 6b76a8842..2137f807d 100644 --- a/src/include/usr/i2c/eepromddreasoncodes.H +++ b/src/include/usr/i2c/eepromddreasoncodes.H @@ -5,7 +5,9 @@ /* */ /* OpenPOWER HostBoot Project */ /* */ -/* COPYRIGHT International Business Machines Corp. 2011,2014 */ +/* Contributors Listed Below - COPYRIGHT 2011,2014 */ +/* [+] International Business Machines Corp. */ +/* */ /* */ /* Licensed under the Apache License, Version 2.0 (the "License"); */ /* you may not use this file except in compliance with the License. */ @@ -67,7 +69,7 @@ enum eepromReasonCode EEPROM_INVALID_DEVICE_TYPE = EEPROM_COMP_ID | 0x02, EEPROM_ATTR_INFO_NOT_FOUND = EEPROM_COMP_ID | 0x03, EEPROM_INVALID_CHIP = EEPROM_COMP_ID | 0x04, - EEPROM_DIMM_I2C_MASTER_PATH_ERROR = EEPROM_COMP_ID | 0x05, + EEPROM_I2C_MASTER_PATH_ERROR = EEPROM_COMP_ID | 0x05, EEPROM_TARGET_NULL = EEPROM_COMP_ID | 0x06, EEPROM_INVALID_ADDR_OFFSET_SIZE = EEPROM_COMP_ID | 0x07, EEPROM_OVERFLOW_ERROR = EEPROM_COMP_ID | 0x08, diff --git a/src/usr/devtree/HBconfig b/src/usr/devtree/HBconfig index 9b103c80a..3ce7d2c19 100644 --- a/src/usr/devtree/HBconfig +++ b/src/usr/devtree/HBconfig @@ -1,6 +1,7 @@ config DISABLE_HOSTBOOT_RUNTIME - default y if !HAVE_MBVPD + default n help Disable the Hostboot Runtime (HBRT) - +# Was default y if !HAVE_MBVPD +# Story 116907 Enable HBRT for OpenPower diff --git a/src/usr/hwpf/hwp/dmi_training/HBconfig b/src/usr/hwpf/hwp/dmi_training/HBconfig index 75f7cee6f..4464aa10e 100644 --- a/src/usr/hwpf/hwp/dmi_training/HBconfig +++ b/src/usr/hwpf/hwp/dmi_training/HBconfig @@ -1,5 +1,4 @@ config NO_DMI_EREPAIR - default y if !HAVE_MBVPD + default n help Do not apply erepair information on the DMI bus during boot - diff --git a/src/usr/i2c/eepromdd.C b/src/usr/i2c/eepromdd.C index 41297cfaf..d8c244af6 100755 --- a/src/usr/i2c/eepromdd.C +++ b/src/usr/i2c/eepromdd.C @@ -1001,6 +1001,25 @@ errlHndl_t eepromReadAttributes ( TARGETING::Target * i_target, o_i2cInfo.devSize_KB = eepromData.maxMemorySizeKB; o_i2cInfo.writeCycleTime = eepromData.writeCycleTime; + // @todo RTC:116428 - forcing the attribute data for now + // until we can pull it from the MRW + if( TARGETING::TYPE_MEMBUF == + i_target->getAttr<TARGETING::ATTR_TYPE>() ) + { + o_i2cInfo.port = 2; + o_i2cInfo.devAddr = 0xA0; + o_i2cInfo.engine = 1; + TARGETING::EntityPath epath(TARGETING::EntityPath::PATH_PHYSICAL); + epath.addLast(TARGETING::TYPE_SYS,0); + epath.addLast(TARGETING::TYPE_NODE,0); + epath.addLast(TARGETING::TYPE_PROC,0); + o_i2cInfo.i2cMasterPath = epath; + o_i2cInfo.writePageSize = 32; + o_i2cInfo.devSize_KB = 0x40; + o_i2cInfo.writeCycleTime = 20; + eepromData.byteAddrOffset = 2; + } + // Convert attribute info to eeprom_addr_size_t enum if ( eepromData.byteAddrOffset == 0x2 ) { @@ -1094,25 +1113,48 @@ errlHndl_t eepromGetI2CMasterTarget ( TARGETING::Target * i_target, ERR_MRK"eepromGetI2CMasterTarget() - " "i2cMasterPath attribute path doesn't exist!" ); + // Compress the entity path + uint64_t l_epCompressed = 0; + for( uint32_t i = 0; i < i_i2cInfo.i2cMasterPath.size(); i++ ) + { + // Path element: type:8 instance:8 + l_epCompressed |= + i_i2cInfo.i2cMasterPath[i].type << (16*(3-i)); + l_epCompressed |= + i_i2cInfo.i2cMasterPath[i].instance << ((16*(3-i))-8); + + // Can only fit 4 path elements into 64 bits + if ( i == 3 ) + { + break; + } + } + /*@ * @errortype - * @reasoncode EEPROM_DIMM_I2C_MASTER_PATH_ERROR + * @reasoncode EEPROM_I2C_MASTER_PATH_ERROR * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE * @moduleid EEPROM_GETI2CMASTERTARGET - * @userdata1 Attribute Chip Type Enum - * @userdata2 HUID of target - * @devdesc DIMM I2C master entity path doesn't exist. + * @userdata1[00:31] Attribute Chip Type Enum + * @userdata1[32:63] HUID of target + * @userdata2 Compressed Entity Path + * @devdesc I2C master entity path doesn't exist. */ err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE, EEPROM_GETI2CMASTERTARGET, - EEPROM_DIMM_I2C_MASTER_PATH_ERROR, - i_i2cInfo.chip, - TARGETING::get_huid(i_target), + EEPROM_I2C_MASTER_PATH_ERROR, + TWO_UINT32_TO_UINT64( + i_i2cInfo.chip, + TARGETING::get_huid(i_target) ), + l_epCompressed, true /*Add HB SW Callout*/ ); err->collectTrace( EEPROM_COMP_NAME ); + ERRORLOG::ErrlUserDetailsString( + i_i2cInfo.i2cMasterPath.toString()).addToLog(err); + break; } @@ -1125,24 +1167,47 @@ errlHndl_t eepromGetI2CMasterTarget ( TARGETING::Target * i_target, ERR_MRK"eepromGetI2CMasterTarget() - I2C Master " "Path target was NULL!" ); + // Compress the entity path + uint64_t l_epCompressed = 0; + for( uint32_t i = 0; i < i_i2cInfo.i2cMasterPath.size(); i++ ) + { + // Path element: type:8 instance:8 + l_epCompressed |= + i_i2cInfo.i2cMasterPath[i].type << (16*(3-i)); + l_epCompressed |= + i_i2cInfo.i2cMasterPath[i].instance << ((16*(3-i))-8); + + // Can only fit 4 path elements into 64 bits + if ( i == 3 ) + { + break; + } + } + /*@ * @errortype * @reasoncode EEPROM_TARGET_NULL * @severity ERRORLOG::ERRL_SEV_UNRECOVERABLE * @moduleid EEPROM_GETI2CMASTERTARGET - * @userdata1 Attribute Chip Type Enum - * @userdata2 HUID of target + * @userdata1[00:31] Attribute Chip Type Enum + * @userdata1[32:63] HUID of target + * @userdata2 Compressed Entity Path * @devdesc I2C master path target is null. */ err = new ERRORLOG::ErrlEntry( ERRORLOG::ERRL_SEV_UNRECOVERABLE, EEPROM_GETI2CMASTERTARGET, EEPROM_TARGET_NULL, - i_i2cInfo.chip, - TARGETING::get_huid(i_target), + TWO_UINT32_TO_UINT64( + i_i2cInfo.chip, + TARGETING::get_huid(i_target) ), + l_epCompressed, true /*Add HB SW Callout*/ ); err->collectTrace( EEPROM_COMP_NAME ); + ERRORLOG::ErrlUserDetailsString( + i_i2cInfo.i2cMasterPath.toString()).addToLog(err); + break; } diff --git a/src/usr/vpd/cvpd.C b/src/usr/vpd/cvpd.C index 0febca385..1c4b5fb28 100644 --- a/src/usr/vpd/cvpd.C +++ b/src/usr/vpd/cvpd.C @@ -196,6 +196,7 @@ bool VPD::cvpdPresent( TARGETING::Target * i_target ) IpVpdFacade::input_args_t args; args.record = CVPD::VEIR; args.keyword = CVPD::PF ; + args.location = VPD::AUTOSELECT; size_t kwlen = 0; errlHndl_t l_errl = Singleton<CvpdFacade>::instance().read( i_target, diff --git a/src/usr/vpd/mvpd.C b/src/usr/vpd/mvpd.C index 9c3d6119f..1d794e10e 100644 --- a/src/usr/vpd/mvpd.C +++ b/src/usr/vpd/mvpd.C @@ -192,6 +192,7 @@ bool VPD::mvpdPresent( TARGETING::Target * i_target ) IpVpdFacade::input_args_t args; args.record = MVPD::CP00; args.keyword = MVPD::VD; + args.location = VPD::AUTOSELECT; size_t kwlen = 0; errlHndl_t l_errl = Singleton<MvpdFacade>::instance().read( i_target, |