summaryrefslogtreecommitdiffstats
path: root/src/usr/scom
diff options
context:
space:
mode:
authorChristian Geddes <crgeddes@us.ibm.com>2018-10-24 16:35:26 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2018-11-15 12:18:39 -0600
commit6cf801f1c1b75b6bb67fa67d310b3b1518f66817 (patch)
tree5ffc3ef409b4189df324b4c8d6ba0ca26655509d /src/usr/scom
parent73cad1f1ae2a9f7b4876f61c5db85c35bbd08db3 (diff)
downloadtalos-hostboot-6cf801f1c1b75b6bb67fa67d310b3b1518f66817.tar.gz
talos-hostboot-6cf801f1c1b75b6bb67fa67d310b3b1518f66817.zip
Route scom operations on OCMB chips to exp_i2c_scom interface
Before we get OMI targets trained we must use i2c to access scom registers on the OCMB chip. This commit does all of the plumbing so when HWP calls getScom() on a OCMB target, the hostboot platform recognizes this as a special scom and routes it to a new i2scom DD. This device driver will truncate the scom address to 32 bits and run the exp_i2c_putscom/exp_i2c_getscom interfaces to perform the operation. Eventually we need to also support MMIO scoms to the OCMB chip, the MMIO scoms will be used after the OMI training is complete. Change-Id: I0018cc8d25f74d1253b72c3112d3e344a4248416 RTC: 196806 Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/67976 Reviewed-by: Matt Derksen <mderkse1@us.ibm.com> Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com> Reviewed-by: Ilya Smirnov <ismirno@us.ibm.com> Tested-by: Jenkins OP Build CI <op-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>
Diffstat (limited to 'src/usr/scom')
-rw-r--r--src/usr/scom/scom.C23
1 files changed, 21 insertions, 2 deletions
diff --git a/src/usr/scom/scom.C b/src/usr/scom/scom.C
index 1a4ba857f..22567fb49 100644
--- a/src/usr/scom/scom.C
+++ b/src/usr/scom/scom.C
@@ -133,6 +133,10 @@ DEVICE_REGISTER_ROUTE(DeviceFW::WILDCARD,
TARGETING::TYPE_MEMBUF,
scomMemBufPerformOp);
+DEVICE_REGISTER_ROUTE(DeviceFW::WILDCARD,
+ DeviceFW::SCOM,
+ TARGETING::TYPE_OCMB_CHIP,
+ scomPerformOp);
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
@@ -879,14 +883,18 @@ errlHndl_t doScomOp(DeviceFW::OperationType i_opType,
do{
TARGETING::ScomSwitches scomSetting;
+ // We start by assuming target = MASTER_PROCESSOR_CHIP_TARGET_SENTINEL
+ // so following that assumption default l_targetType to PROC_CHIP
+ TARGETING::ATTR_TYPE_type l_targetType = TARGETING::TYPE_PROC;
scomSetting.useXscom = true; //Default to Xscom supported.
if(TARGETING::MASTER_PROCESSOR_CHIP_TARGET_SENTINEL != i_target)
{
scomSetting =
i_target->getAttr<TARGETING::ATTR_SCOM_SWITCHES>();
- if( TARGETING::TYPE_PROC
- == i_target->getAttr<TARGETING::ATTR_TYPE>() )
+ l_targetType = i_target->getAttr<TARGETING::ATTR_TYPE>();
+
+ if( l_targetType == TARGETING::TYPE_PROC )
{
l_multicastBugError = true;
}
@@ -926,6 +934,17 @@ errlHndl_t doScomOp(DeviceFW::OperationType i_opType,
}
break;
}
+ else if(scomSetting.useI2cScom)
+ {
+ //do I2CSCOM
+ l_err = deviceOp(i_opType,
+ i_target,
+ io_buffer,
+ io_buflen,
+ DEVICE_I2CSCOM_ADDRESS(i_addr));
+ if( l_err ) { break; }
+
+ }
else if(scomSetting.useSbeScom)
{ //do SBESCOM
l_err = deviceOp(i_opType,
OpenPOWER on IntegriCloud