diff options
author | Norman James <njames@us.ibm.com> | 2014-11-10 09:23:22 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2014-12-03 09:42:26 -0600 |
commit | 1033b6f27ae04e22b2daccaff459b0266cb87c03 (patch) | |
tree | 979f15801eefde6d1b2be39c169e2cce45e1482d /src/usr/hwpf/hwp/nest_chiplets | |
parent | e6b7b30e1722ea948c090bf757e04510517ff890 (diff) | |
download | talos-hostboot-1033b6f27ae04e22b2daccaff459b0266cb87c03.tar.gz talos-hostboot-1033b6f27ae04e22b2daccaff459b0266cb87c03.zip |
Added I2c slave addresses.
Addresses are pulled from MRW. If 0x0, I2c slave is disabled.
Change-Id: I02292052fedcb78d3e5fb4c624d562520079a6a7
RTC: 115636
Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/14414
Tested-by: Jenkins Server
Reviewed-by: Andrew J. Geissler <andrewg@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/hwpf/hwp/nest_chiplets')
-rw-r--r-- | src/usr/hwpf/hwp/nest_chiplets/proc_chiplet_scominit/proc_chiplet_scominit.C | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/usr/hwpf/hwp/nest_chiplets/proc_chiplet_scominit/proc_chiplet_scominit.C b/src/usr/hwpf/hwp/nest_chiplets/proc_chiplet_scominit/proc_chiplet_scominit.C index 722c2424d..d49b010f6 100644 --- a/src/usr/hwpf/hwp/nest_chiplets/proc_chiplet_scominit/proc_chiplet_scominit.C +++ b/src/usr/hwpf/hwp/nest_chiplets/proc_chiplet_scominit/proc_chiplet_scominit.C @@ -70,6 +70,7 @@ fapi::ReturnCode proc_chiplet_scominit(const fapi::Target & i_target) uint8_t master_mcs_pos = 0xFF; fapi::Target master_mcs; uint8_t enable_xbus_resonant_clocking = 0x0; + uint8_t i2c_slave_address = 0x0; ecmdDataBufferBase data(64); ecmdDataBufferBase cfam_data(32); @@ -270,6 +271,70 @@ fapi::ReturnCode proc_chiplet_scominit(const fapi::Target & i_target) PROC_CHIPLET_SCOMINIT_NX_IF, PROC_CHIPLET_SCOMINIT_CXA_IF, PROC_CHIPLET_SCOMINIT_AS_IF); } + // conditionally enable I2C Slave + rc = FAPI_ATTR_GET(ATTR_I2C_SLAVE_ADDRESS, + &i_target, + i2c_slave_address); + if (!rc.ok()) + { + FAPI_ERR("proc_chiplet_scominit: Error querying ATTR_I2C_SLAVE_ADDRESS on %s", + i_target.toEcmdString()); + break; + } + rc = fapiGetScom(i_target, + I2C_SLAVE_CONFIG_REG_0x000D0000, + data); + if (!rc.ok()) + { + FAPI_ERR("proc_chiplet_scominit: fapiGetScom error (I2C_SLAVE_CONFIG_REG_0x000D0000) on %s", + i_target.toEcmdString()); + break; + } + if (i2c_slave_address) + { + FAPI_DBG("proc_chiplet_scominit: I2C Slave enabled (%s) address = %d", + i_target.toEcmdString(),i2c_slave_address); + + //set I2C address + rc_ecmd |= data.insert(i2c_slave_address,0,7); + + // disable error state. when this is enabled and there + // is an error from I2CS it locks up the I2CS and no + // more operations are allowed unless cleared + // through FSI. Not good for a FSPless system. + rc_ecmd |= data.clearBit(23); + + // enable I2C interface + rc_ecmd |= data.setBit(21); + + } + else + { + FAPI_DBG("proc_chiplet_scominit: I2C Slave disabled (%s)", + i_target.toEcmdString()); + + // disable I2C interface when attribute = 0x0 + rc_ecmd |= data.clearBit(21); + } + + if (rc_ecmd) + { + FAPI_ERR("proc_chiplet_scominit: Error 0x%x setting I2C Slave register data buffer", + rc_ecmd); + rc.setEcmdError(rc_ecmd); + break; + } + + rc = fapiPutScom(i_target, + I2C_SLAVE_CONFIG_REG_0x000D0000, + data); + if (!rc.ok()) + { + FAPI_ERR("proc_chiplet_scominit: fapiPutScom error (I2C_SLAVE_CONFIG_REG_0x000D0000) on %s", + i_target.toEcmdString()); + break; + } + // conditionally enable resonant clocking for XBUS rc = FAPI_ATTR_GET(ATTR_CHIP_EC_FEATURE_XBUS_RESONANT_CLK_VALID, &i_target, @@ -281,6 +346,7 @@ fapi::ReturnCode proc_chiplet_scominit(const fapi::Target & i_target) break; } + if (enable_xbus_resonant_clocking) { FAPI_DBG("proc_chiplet_scominit: Enabling XBUS resonant clocking"); @@ -348,6 +414,7 @@ fapi::ReturnCode proc_chiplet_scominit(const fapi::Target & i_target) break; } + // determine set of functional MCS chiplets rc = fapiGetChildChiplets(i_target, fapi::TARGET_TYPE_MCS_CHIPLET, |