Skip to content

Commit

Permalink
Base targeting support for OCMB chip and MEM_PORT chiplet
Browse files Browse the repository at this point in the history
In Axone we are introducing a new memory buffer known as the Open
Capi Memory Buffer chip. On this chip will be a MEM_PORT chiplet(s)
which will connect to the DIMM. This completes the following picture
(it is expected OMIC, MCC, and OMI have been added already)

             MI--MCC
           /         \
Proc--MC <         __ OMI--OCMB--MEM_PORT--DIMM
           \      /
             OMIC

Change-Id: I1a3e3d38978ce11fecee2ab11de83909eb440774
RTC:172970
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/63911
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: Prachi Gupta <pragupta@us.ibm.com>
Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
  • Loading branch information
crgeddes authored and wghoffa committed Aug 8, 2018
1 parent f8e8d7c commit ffcc637
Show file tree
Hide file tree
Showing 7 changed files with 200 additions and 35 deletions.
147 changes: 113 additions & 34 deletions src/include/usr/fapi2/target.H
Original file line number Diff line number Diff line change
Expand Up @@ -247,6 +247,12 @@ inline TARGETING::TYPE convertFapi2TypeToTargeting(fapi2::TargetType i_T)
case fapi2::TARGET_TYPE_MCC:
o_targetingType = TARGETING::TYPE_MCC;
break;
case fapi2::TARGET_TYPE_OCMB_CHIP:
o_targetingType = TARGETING::TYPE_OCMB_CHIP;
break;
case fapi2::TARGET_TYPE_MEM_PORT:
o_targetingType = TARGETING::TYPE_MEM_PORT;
break;
default:
FAPI_ERR("convertFapi2TypeToTargeting:: Chiplet type not supported 0x%.8X!", i_T);
assert(false);
Expand Down Expand Up @@ -356,6 +362,12 @@ inline fapi2::TargetType convertTargetingTypeToFapi2(TARGETING::TYPE i_T)
case TARGETING::TYPE_MCC:
o_targetingType = fapi2::TARGET_TYPE_MCC;
break;
case TARGETING::TYPE_OCMB_CHIP:
o_targetingType = fapi2::TARGET_TYPE_OCMB_CHIP;
break;
case TARGETING::TYPE_MEM_PORT:
o_targetingType = fapi2::TARGET_TYPE_MEM_PORT;
break;
default:
o_targetingType = fapi2::TARGET_TYPE_NONE;
break;
Expand All @@ -381,7 +393,7 @@ inline Target<K_PARENT, V> Target<T_SELF, V>::getParent(void) const

// General compound chiplet check for proc parent

const fapi2::TargetType TARGET_TYPE_PROC_CHIPLETS = fapi2::TARGET_TYPE_EX |
const fapi2::TargetType TARGET_TYPE_PROC_CHILDREN = fapi2::TARGET_TYPE_EX |
fapi2::TARGET_TYPE_MCS |
fapi2::TARGET_TYPE_XBUS |
fapi2::TARGET_TYPE_CORE |
Expand All @@ -401,10 +413,11 @@ inline Target<K_PARENT, V> Target<T_SELF, V>::getParent(void) const
fapi2::TARGET_TYPE_PPE |
fapi2::TARGET_TYPE_PERV |
fapi2::TARGET_TYPE_PEC |
fapi2::TARGET_TYPE_DIMM |
fapi2::TARGET_TYPE_PHB;

static_assert( !((K_PARENT == fapi2::TARGET_TYPE_PROC_CHIP) &&
((T_SELF & TARGET_TYPE_PROC_CHIPLETS) == fapi2::TARGET_TYPE_NONE)),
((T_SELF & TARGET_TYPE_PROC_CHILDREN) == fapi2::TARGET_TYPE_NONE)),
"fapi2::TARGET_TYPE_PROC_CHIP is not a valid parent" );

const fapi2::TargetType TARGET_TYPE_PERV_CHIPLETS = fapi2::TARGET_TYPE_EQ |
Expand Down Expand Up @@ -432,11 +445,27 @@ inline Target<K_PARENT, V> Target<T_SELF, V>::getParent(void) const
// Specific parent checks for each TargetType

// valid parents for DIMM
// DIMM -> MEMPORT
// DIMM -> OCMB
// DIMM -> OMI
// DIMM -> OMIC
// DIMM -> MCC
// DIMM -> MI
// DIMM -> MC
// DIMM -> PROC_CHIP
// DIMM -> MCA
// DIMM -> MBA
static_assert(!((T_SELF == fapi2::TARGET_TYPE_DIMM) &&
(K_PARENT != fapi2::TARGET_TYPE_MCA) &&
(K_PARENT != fapi2::TARGET_TYPE_MBA)),
static_assert(!((T_SELF == fapi2::TARGET_TYPE_DIMM) &&
(K_PARENT != fapi2::TARGET_TYPE_MCA) &&
(K_PARENT != fapi2::TARGET_TYPE_MBA) &&
(K_PARENT != fapi2::TARGET_TYPE_OCMB_CHIP) &&
(K_PARENT != fapi2::TARGET_TYPE_SYSTEM) &&
(K_PARENT != fapi2::TARGET_TYPE_OMI) &&
(K_PARENT != fapi2::TARGET_TYPE_MCC) &&
(K_PARENT != fapi2::TARGET_TYPE_MI) &&
(K_PARENT != fapi2::TARGET_TYPE_MC) &&
(K_PARENT != fapi2::TARGET_TYPE_OMIC) &&
(K_PARENT != fapi2::TARGET_TYPE_PROC_CHIP)),
"improper parent of fapi2::TARGET_TYPE_DIMM");

// valid parents for PROC
Expand All @@ -449,15 +478,53 @@ inline Target<K_PARENT, V> Target<T_SELF, V>::getParent(void) const
// MEMBUF -> SYSTEM
// MEMBUF -> DMI
static_assert(!((T_SELF == fapi2::TARGET_TYPE_MEMBUF_CHIP) &&
(K_PARENT != fapi2::TARGET_TYPE_SYSTEM) &&
(K_PARENT != fapi2::TARGET_TYPE_SYSTEM) &&
(K_PARENT != fapi2::TARGET_TYPE_DMI)),
"improper parent of fapi2::TARGET_TYPE_MEMBUF_CHIP");

// valid parents for OCMB
// OCMB -> SYSTEM
// OCMB -> OMI
// OCMB -> MCC
// OCMB -> MI
// OCMB -> MC
// OCMB -> OMIC
// OCMB -> PROC_CHIP
static_assert(!((T_SELF == fapi2::TARGET_TYPE_OCMB_CHIP) &&
(K_PARENT != fapi2::TARGET_TYPE_SYSTEM) &&
(K_PARENT != fapi2::TARGET_TYPE_OMI) &&
(K_PARENT != fapi2::TARGET_TYPE_MCC) &&
(K_PARENT != fapi2::TARGET_TYPE_MI) &&
(K_PARENT != fapi2::TARGET_TYPE_MC) &&
(K_PARENT != fapi2::TARGET_TYPE_OMIC) &&
(K_PARENT != fapi2::TARGET_TYPE_PROC_CHIP)),
"improper parent of fapi2::TARGET_TYPE_OCMB_CHIP");

// valid parents for MEM_PORT
// MEM_PORT -> SYSTEM
// MEM_PORT -> OCMB_CHIP
// MEM_PORT -> OMI
// MEM_PORT -> MCC
// MEM_PORT -> MI
// MEM_PORT -> MC
// MEM_PORT -> OMIC
// MEM_PORT -> PROC_CHIP
static_assert(!((T_SELF == fapi2::TARGET_TYPE_MEM_PORT) &&
(K_PARENT != fapi2::TARGET_TYPE_SYSTEM) &&
(K_PARENT != fapi2::TARGET_TYPE_OCMB_CHIP) &&
(K_PARENT != fapi2::TARGET_TYPE_OMI) &&
(K_PARENT != fapi2::TARGET_TYPE_MCC) &&
(K_PARENT != fapi2::TARGET_TYPE_MI) &&
(K_PARENT != fapi2::TARGET_TYPE_MC) &&
(K_PARENT != fapi2::TARGET_TYPE_OMIC) &&
(K_PARENT != fapi2::TARGET_TYPE_PROC_CHIP)),
"improper parent of fapi2::TARGET_TYPE_MEM_PORT");

// valid parents for EX
// EX -> EQ
// EX -> PROC
static_assert(!((T_SELF == fapi2::TARGET_TYPE_EX) &&
(K_PARENT != fapi2::TARGET_TYPE_EQ) &&
static_assert(!((T_SELF == fapi2::TARGET_TYPE_EX) &&
(K_PARENT != fapi2::TARGET_TYPE_EQ) &&
(K_PARENT != fapi2::TARGET_TYPE_PROC_CHIP)),
"improper parent of fapi2::TARGET_TYPE_EX");

Expand Down Expand Up @@ -488,17 +555,17 @@ inline Target<K_PARENT, V> Target<T_SELF, V>::getParent(void) const
// CORE -> EQ
// CORE -> PERV
// CORE -> PROC
static_assert(!((T_SELF == fapi2::TARGET_TYPE_CORE) &&
(K_PARENT != fapi2::TARGET_TYPE_EX) &&
(K_PARENT != fapi2::TARGET_TYPE_EQ) &&
static_assert(!((T_SELF == fapi2::TARGET_TYPE_CORE) &&
(K_PARENT != fapi2::TARGET_TYPE_EX) &&
(K_PARENT != fapi2::TARGET_TYPE_EQ) &&
(K_PARENT != fapi2::TARGET_TYPE_PERV) &&
(K_PARENT != fapi2::TARGET_TYPE_PROC_CHIP)),
"improper parent of fapi2::TARGET_TYPE_CORE");

// valid parents for EQ
// EQ -> PROC
// EQ -> PERV
static_assert(!((T_SELF == fapi2::TARGET_TYPE_EQ) &&
static_assert(!((T_SELF == fapi2::TARGET_TYPE_EQ) &&
(K_PARENT != fapi2::TARGET_TYPE_PERV) &&
(K_PARENT != fapi2::TARGET_TYPE_PROC_CHIP)),
"improper parent of fapi2::TARGET_TYPE_EQ");
Expand All @@ -508,10 +575,10 @@ inline Target<K_PARENT, V> Target<T_SELF, V>::getParent(void) const
// MCA -> MCBIST
// MCA -> PERV
// MCA -> PROC
static_assert(!((T_SELF == fapi2::TARGET_TYPE_MCA) &&
(K_PARENT != fapi2::TARGET_TYPE_MCS) &&
static_assert(!((T_SELF == fapi2::TARGET_TYPE_MCA) &&
(K_PARENT != fapi2::TARGET_TYPE_MCS) &&
(K_PARENT != fapi2::TARGET_TYPE_MCBIST) &&
(K_PARENT != fapi2::TARGET_TYPE_PERV) &&
(K_PARENT != fapi2::TARGET_TYPE_PERV) &&
(K_PARENT != fapi2::TARGET_TYPE_PROC_CHIP)),
"improper parent of fapi2::TARGET_TYPE_MCA");

Expand All @@ -526,7 +593,7 @@ inline Target<K_PARENT, V> Target<T_SELF, V>::getParent(void) const
// valid parents for MC
// MC -> PERV
// MC -> PROC
static_assert(!((T_SELF == fapi2::TARGET_TYPE_MC) &&
static_assert(!((T_SELF == fapi2::TARGET_TYPE_MC) &&
(K_PARENT != fapi2::TARGET_TYPE_PERV) &&
(K_PARENT != fapi2::TARGET_TYPE_PROC_CHIP)),
"improper parent of fapi2::TARGET_TYPE_MC");
Expand All @@ -535,8 +602,8 @@ inline Target<K_PARENT, V> Target<T_SELF, V>::getParent(void) const
// MI -> MC
// MI -> PERV
// MI -> PROC
static_assert(!((T_SELF == fapi2::TARGET_TYPE_MI) &&
(K_PARENT != fapi2::TARGET_TYPE_MC) &&
static_assert(!((T_SELF == fapi2::TARGET_TYPE_MI) &&
(K_PARENT != fapi2::TARGET_TYPE_MC) &&
(K_PARENT != fapi2::TARGET_TYPE_PERV) &&
(K_PARENT != fapi2::TARGET_TYPE_PROC_CHIP)),
"improper parent of fapi2::TARGET_TYPE_MI");
Expand All @@ -546,10 +613,10 @@ inline Target<K_PARENT, V> Target<T_SELF, V>::getParent(void) const
// MCC -> MI
// MCC -> MC
// MCC -> PROC
static_assert(!((T_SELF == fapi2::TARGET_TYPE_MCC) &&
static_assert(!((T_SELF == fapi2::TARGET_TYPE_MCC) &&
(K_PARENT != fapi2::TARGET_TYPE_PERV) &&
(K_PARENT != fapi2::TARGET_TYPE_MI) &&
(K_PARENT != fapi2::TARGET_TYPE_MC) &&
(K_PARENT != fapi2::TARGET_TYPE_MI) &&
(K_PARENT != fapi2::TARGET_TYPE_MC) &&
(K_PARENT != fapi2::TARGET_TYPE_PROC_CHIP)),
"improper parent of fapi2::TARGET_TYPE_MI");

Expand All @@ -560,11 +627,11 @@ inline Target<K_PARENT, V> Target<T_SELF, V>::getParent(void) const
// OMI -> MC
// OMI -> OMIC
// OMI -> PROC
static_assert(!((T_SELF == fapi2::TARGET_TYPE_OMI) &&
static_assert(!((T_SELF == fapi2::TARGET_TYPE_OMI) &&
(K_PARENT != fapi2::TARGET_TYPE_PERV) &&
(K_PARENT != fapi2::TARGET_TYPE_MCC) &&
(K_PARENT != fapi2::TARGET_TYPE_MI) &&
(K_PARENT != fapi2::TARGET_TYPE_MC) &&
(K_PARENT != fapi2::TARGET_TYPE_MCC) &&
(K_PARENT != fapi2::TARGET_TYPE_MI) &&
(K_PARENT != fapi2::TARGET_TYPE_MC) &&
(K_PARENT != fapi2::TARGET_TYPE_OMIC) &&
(K_PARENT != fapi2::TARGET_TYPE_PROC_CHIP)),
"improper parent of fapi2::TARGET_TYPE_MI");
Expand All @@ -573,9 +640,9 @@ inline Target<K_PARENT, V> Target<T_SELF, V>::getParent(void) const
// OMIC -> PERV
// OMIC -> MC
// OMIC -> PROC
static_assert(!((T_SELF == fapi2::TARGET_TYPE_OMIC) &&
static_assert(!((T_SELF == fapi2::TARGET_TYPE_MI) &&
(K_PARENT != fapi2::TARGET_TYPE_PERV) &&
(K_PARENT != fapi2::TARGET_TYPE_MC) &&
(K_PARENT != fapi2::TARGET_TYPE_MC) &&
(K_PARENT != fapi2::TARGET_TYPE_PROC_CHIP)),
"improper parent of fapi2::TARGET_TYPE_OMIC");

Expand All @@ -584,9 +651,9 @@ inline Target<K_PARENT, V> Target<T_SELF, V>::getParent(void) const
// DMI -> MC
// DMI -> PERV
// DMI -> PROC
static_assert(!((T_SELF == fapi2::TARGET_TYPE_DMI) &&
(K_PARENT != fapi2::TARGET_TYPE_MI) &&
(K_PARENT != fapi2::TARGET_TYPE_MC) &&
static_assert(!((T_SELF == fapi2::TARGET_TYPE_DMI) &&
(K_PARENT != fapi2::TARGET_TYPE_MI) &&
(K_PARENT != fapi2::TARGET_TYPE_MC) &&
(K_PARENT != fapi2::TARGET_TYPE_PERV) &&
(K_PARENT != fapi2::TARGET_TYPE_PROC_CHIP)),
"improper parent of fapi2::TARGET_TYPE_DMI");
Expand Down Expand Up @@ -636,7 +703,7 @@ inline Target<K_PARENT, V> Target<T_SELF, V>::getParent(void) const
// valid parents for OBUS
// OBUS -> PERV
// OBUS -> PROC
static_assert(!((T_SELF == fapi2::TARGET_TYPE_OBUS) &&
static_assert(!((T_SELF == fapi2::TARGET_TYPE_OBUS) &&
(K_PARENT != fapi2::TARGET_TYPE_PERV) &&
(K_PARENT != fapi2::TARGET_TYPE_PROC_CHIP)),
"improper parent of fapi2::TARGET_TYPE_OBUS");
Expand All @@ -654,7 +721,7 @@ inline Target<K_PARENT, V> Target<T_SELF, V>::getParent(void) const
// valid parents for CAPP
// CAPP -> PERV
// CAPP -> PROC
static_assert(!((T_SELF == fapi2::TARGET_TYPE_CAPP) &&
static_assert(!((T_SELF == fapi2::TARGET_TYPE_CAPP) &&
(K_PARENT != fapi2::TARGET_TYPE_PERV) &&
(K_PARENT != fapi2::TARGET_TYPE_PROC_CHIP)),
"improper parent of fapi2::TARGET_TYPE_CAPP");
Expand Down Expand Up @@ -724,7 +791,6 @@ inline std::vector<Target<K_CHILD, V> >
// invalid children for proc
INVALID_CHILD(fapi2::TARGET_TYPE_PROC_CHIP, fapi2::TARGET_TYPE_NONE)
INVALID_CHILD(fapi2::TARGET_TYPE_PROC_CHIP, fapi2::TARGET_TYPE_SYSTEM)
INVALID_CHILD(fapi2::TARGET_TYPE_PROC_CHIP, fapi2::TARGET_TYPE_DIMM)
INVALID_CHILD(fapi2::TARGET_TYPE_PROC_CHIP, fapi2::TARGET_TYPE_PROC_CHIP)
INVALID_CHILD(fapi2::TARGET_TYPE_PROC_CHIP, fapi2::TARGET_TYPE_MEMBUF_CHIP)
INVALID_CHILD(fapi2::TARGET_TYPE_PROC_CHIP, fapi2::TARGET_TYPE_MBA)
Expand Down Expand Up @@ -857,7 +923,20 @@ inline std::vector<Target<K_CHILD, V> >
(K_CHILD != fapi2::TARGET_TYPE_OMI)),
"improper child of fapi2::TARGET_TYPE_OMIC");

// TODO RTC:172970 When OCMB is added we need to add getchild support for OMI targets
// valid children for OCMB
// OCMB -> MEM_PORT
// OCMB -> DIMM
static_assert(!((T_SELF == fapi2::TARGET_TYPE_OCMB_CHIP) &&
(K_CHILD != fapi2::TARGET_TYPE_MEM_PORT) &&
(K_CHILD != fapi2::TARGET_TYPE_DIMM)),
"improper child of fapi2::TARGET_TYPE_OCMB_CHIP");

// valid children for MEM_PORT
// MEM_PORT -> DIMM
static_assert(!((T_SELF == fapi2::TARGET_TYPE_MEM_PORT) &&
(K_CHILD != fapi2::TARGET_TYPE_DIMM)),
"improper child of fapi2::TARGET_TYPE_MEM_PORT");


// valid children for DMI
// DMI -> MEMBUF
Expand Down
6 changes: 6 additions & 0 deletions src/usr/fapi2/plat_attr_override_sync.C
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,12 @@ void directOverride()
case fapi2::TARGET_TYPE_MCC:
l_targetType = TARGETING::TYPE_MCC;
break;
case fapi2::TARGET_TYPE_OCMB_CHIP:
l_targetType = TARGETING::TYPE_OCMB_CHIP;
break;
case fapi2::TARGET_TYPE_MEM_PORT:
l_targetType = TARGETING::TYPE_MEM_PORT;
break;
default:
l_targetType = TARGETING::TYPE_NA;
}
Expand Down
15 changes: 15 additions & 0 deletions src/usr/fapi2/plat_utils.C
Original file line number Diff line number Diff line change
Expand Up @@ -703,6 +703,14 @@ void xlateTargetType(const fapi2::TargetType i_targetType,
o_class = TARGETING::CLASS_UNIT;
o_type = TARGETING::TYPE_MCC;
break;
case fapi2::TARGET_TYPE_OCMB_CHIP:
o_class = TARGETING::CLASS_CHIP;
o_type = TARGETING::TYPE_OCMB_CHIP;
break;
case fapi2::TARGET_TYPE_MEM_PORT:
o_class = TARGETING::CLASS_UNIT;
o_type = TARGETING::TYPE_MEM_PORT;
break;
default:
o_class = TARGETING::CLASS_NA;
o_type = TARGETING::TYPE_NA;
Expand Down Expand Up @@ -752,6 +760,13 @@ bool isPhysParentChild(const TargetType i_parentType,
l_result = true;
}
}
else if (i_parentType == TARGET_TYPE_OCMB_CHIP)
{
if ( (i_childType & (TARGET_TYPE_MEM_PORT)) != 0 )
{
l_result = true;
}
}
return l_result;
}

Expand Down
2 changes: 2 additions & 0 deletions src/usr/targeting/attroverride/attrTextToBinaryBlob.C
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,8 @@ TargStrToType CHIP_UNIT_TYPE_TARG_STR_TO_TYPE [] =
{"omi" , fapi2::TARGET_TYPE_OMI , TARGETING::TYPE_OMI},
{"omic" , fapi2::TARGET_TYPE_OMIC , TARGETING::TYPE_OMIC},
{"mcc" , fapi2::TARGET_TYPE_MCC , TARGETING::TYPE_MCC},
{"ocmb" , fapi2::TARGET_TYPE_OCMB_CHIP , TARGETING::TYPE_OCMB_CHIP},
{"memport" , fapi2::TARGET_TYPE_MEM_PORT , TARGETING::TYPE_MEM_PORT},
{"LAST" , 0 , 0}
};

Expand Down
4 changes: 4 additions & 0 deletions src/usr/targeting/common/entitypath.C
Original file line number Diff line number Diff line change
Expand Up @@ -477,6 +477,10 @@ const char* EntityPath::pathElementTypeAsString(
return "OMIC";
case TYPE_MCC:
return "MCC";
case TYPE_OCMB_CHIP:
return "OCBM_CHIP";
case TYPE_MEM_PORT:
return "MEM_PORT";
// case TYPE_FSI_LINK:
// return "FSI-link";
// case TYPE_CFAM:
Expand Down
12 changes: 11 additions & 1 deletion src/usr/targeting/common/xmltohb/attribute_types.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5090,8 +5090,15 @@
<value>74</value>
</enumerator>
<enumerator>
<name>LAST_IN_RANGE</name>
<name>OCMB_CHIP</name>
<value>75</value>
</enumerator> <enumerator>
<name>MEM_PORT</name>
<value>76</value>
</enumerator>
<enumerator>
<name>LAST_IN_RANGE</name>
<value>77</value>
</enumerator>
<id>TYPE</id>
</enumerationType>
Expand Down Expand Up @@ -5129,6 +5136,9 @@
<name>CENTAUR</name>
<value>48</value>
</enumerator>
<enumerator>
<name>EXPLORER</name>
</enumerator>
<enumerator>
<name>JEDEC</name>
<value>80</value>
Expand Down

0 comments on commit ffcc637

Please sign in to comment.