summaryrefslogtreecommitdiffstats
path: root/src/usr
diff options
context:
space:
mode:
authorSwathi Madhuri Bhattiprolu <bhmadhur@in.ibm.com>2017-06-13 01:11:40 -0500
committerDaniel M. Crowell <dcrowell@us.ibm.com>2017-06-27 09:31:31 -0400
commit81acff67f91941645a84825f4f77943db16a0692 (patch)
treef23d638a71e003f8f23aab6b2fd870c28f007466 /src/usr
parent2374128170d355578a8d5141a19dfe6be7f8bd8e (diff)
downloadtalos-hostboot-81acff67f91941645a84825f4f77943db16a0692.tar.gz
talos-hostboot-81acff67f91941645a84825f4f77943db16a0692.zip
RTC#139064: Targeting updates for Cumulus Centaur memory sub system
Change-Id: I6bfff05eeeb78d1c20e5677d198a53b4a8309186 Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/41733 Tested-by: Jenkins Server <pfd-jenkins+hostboot@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: VENKATESH SAINATH <venkatesh.sainath@in.ibm.com> Reviewed-by: Sakethan R. Kotta <sakkotta@in.ibm.com> Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr')
-rw-r--r--src/usr/targeting/common/Targets.pm361
-rw-r--r--src/usr/targeting/common/entitypath.C2
-rwxr-xr-x[-rw-r--r--]src/usr/targeting/common/processMrw.pl21
-rw-r--r--src/usr/targeting/common/xmltohb/attribute_types.xml43
-rw-r--r--src/usr/targeting/common/xmltohb/attribute_types_openpower.xml20
-rwxr-xr-xsrc/usr/targeting/common/xmltohb/target_types.xml35
-rw-r--r--[-rwxr-xr-x]src/usr/targeting/common/xmltohb/target_types_hb.xml6
-rw-r--r--src/usr/targeting/common/xmltohb/target_types_openpower.xml5
-rwxr-xr-xsrc/usr/targeting/common/xmltohb/xmltohb.pl8
9 files changed, 322 insertions, 179 deletions
diff --git a/src/usr/targeting/common/Targets.pm b/src/usr/targeting/common/Targets.pm
index 2e732a2ab..a3ea5fa5f 100644
--- a/src/usr/targeting/common/Targets.pm
+++ b/src/usr/targeting/common/Targets.pm
@@ -42,7 +42,14 @@ use constant
PERVASIVE_PARENT_PEC_OFFSET => 13,
PERVASIVE_PARENT_PHB_OFFSET => 13,
PERVASIVE_PARENT_NPU_OFFSET => 5,
+ PERVASIVE_PARENT_MC_OFFSET => 7,
+ PERVASIVE_PARENT_MI_OFFSET => 7,
+ PERVASIVE_PARENT_DMI_OFFSET => 7,
NUM_PROCS_PER_GROUP => 4,
+ DIMMS_PER_PROC => 64, # 8 DMI x 8 DIMMS per Centaur
+ DIMMS_PER_DMI => 8, # 8 dimms per dmi
+ DIMMS_PER_MBA => 4, # 4 dimms per mba
+ DIMMS_PER_PORT => 2, # 2 dimms per port
};
my %maxInstance = (
@@ -65,7 +72,9 @@ my %maxInstance = (
"SBE" => 1,
"OBUS_BRICK" => 12,
"NPU" => 1,
+ "MC" => 2,
"MI" => 4,
+ "DMI" => 8,
"OCC" => 1,
);
sub new
@@ -91,6 +100,9 @@ sub new
TOPOLOGY => undef,
report_log => "",
vpd_num => 0,
+ MAX_MC => 0,
+ MAX_MI => 0,
+ MAX_DMI => 0,
DMI_FSI_MAP => {
'0' => '3',
'1' => '2',
@@ -494,8 +506,9 @@ sub buildAffinity
my $sys_phys = "";
my $node_phys = "";
my $node_aff = "";
- my $sys_pos = -1;
+ my $sys_pos = 0; # There is always a single system target
my $mcbist = -1;
+ my $num_mc = 0 ;
$self->{membuf_inst_num}=0;
@@ -518,7 +531,6 @@ sub buildAffinity
my $type = $self->getType($target);
my $type_id = $self->getEnumValue("TYPE", $type);
my $pos = $self->{data}->{TARGETS}{$target}{TARGET}{position};
- $sys_pos = $pos if ($type eq "SYS");
if ($type_id eq "") { $type_id = 0; }
@@ -531,8 +543,8 @@ sub buildAffinity
#SYS target has PHYS_PATH and AFFINITY_PATH defined in the XML
#Also, there is no HUID for SYS
$self->setAttribute($target,"FAPI_NAME",getFapiName($type));
- $self->setAttribute($target,"FAPI_POS", $pos);
- $self->setAttribute($target,"ORDINAL_ID", $pos);
+ $self->setAttribute($target,"FAPI_POS", $sys_pos);
+ $self->setAttribute($target,"ORDINAL_ID", $sys_pos);
$sys_phys = $self->getAttribute($target, "PHYS_PATH");
$sys_phys = substr($sys_phys, 9);
}
@@ -553,6 +565,7 @@ sub buildAffinity
$self->setAttribute($target, "PHYS_PATH", $node_phys);
$self->setAttribute($target, "AFFINITY_PATH", $node_aff);
$self->setAttribute($target, "ORDINAL_ID", $pos);
+
}
elsif ($type eq "TPM")
{
@@ -582,10 +595,13 @@ sub buildAffinity
my $ddrs = $self->findConnections($target,"DDR4","");
$self->processDimms($ddrs, $sys_pos, $node_phys, $node, $proc);
}
+
elsif ($type eq "PROC")
{
$proc++;
my $num_mcs = 0;
+ my $num_mi = 0;
+ my $num_dmi = 0;
### count number of MCSs
foreach my $unit (@{ $self->{data}->{TARGETS}{$target}{CHILDREN} })
{
@@ -594,11 +610,29 @@ sub buildAffinity
{
$num_mcs+=2; # 2 MCS's per MCBIST
}
+ if ($unit_type eq "MC")
+ {
+ $num_mc++;
+ $num_mi += 2; # 2 MI's per MC
+ $num_dmi+=4; # 2DMI's per MI & 4 DMI per MC
+ }
}
if ($num_mcs > $self->{MAX_MCS})
{
$self->{MAX_MCS} = $num_mcs;
}
+ if ($num_mc > $self->{MAX_MC})
+ {
+ $self->{MAX_MC} = $num_mc;
+ }
+ if ($num_mi > $self->{MAX_MI})
+ {
+ $self->{MAX_MI} = $num_mi;
+ }
+ if ($num_dmi > $self->{MAX_DMI})
+ {
+ $self->{MAX_DMI} = $num_dmi;
+ }
$self->{NUM_PROCS_PER_NODE} = $proc + 1;
@@ -629,6 +663,9 @@ sub buildAffinity
$self->getAttribute($socket,"FABRIC_CHIP_ID"));
$self->iterateOverChiplets($target, $sys_pos, $node, $proc);
+
+ $self->processMc($target, $sys_pos, $node, $proc, $parent_affinity,
+ $parent_physical, $node_phys );
}
}
}
@@ -818,7 +855,6 @@ sub setCommonAttrForChiplet
my $fapi_name = getFapiName($tgt_type, $node, $proc, $pos);
-
#unique offset per system
my $offset = ($proc * $maxInstance{$tgt_type}) + $pos;
$self->{huid_idx}->{$tgt_type} = $offset;
@@ -945,6 +981,21 @@ sub getPervasiveForUnit
$unitToPervasive{"MCA$mca"} =
PERVASIVE_PARENT_MCA_OFFSET + ($mca > 3);
}
+ for my $mc (0..$maxInstance{"MC"}-1)
+ {
+ $unitToPervasive{"MC$mc"} =
+ PERVASIVE_PARENT_MC_OFFSET + $mc;
+ }
+ for my $mi (0..$maxInstance{"MI"}-1)
+ {
+ $unitToPervasive{"MI$mi"} =
+ PERVASIVE_PARENT_MI_OFFSET + ($mi > 1);
+ }
+ for my $dmi (0..$maxInstance{"DMI"}-1)
+ {
+ $unitToPervasive{"DMI$dmi"} =
+ PERVASIVE_PARENT_DMI_OFFSET + ($dmi > 3);
+ }
for my $pec (0..$maxInstance{"PEC"}-1)
{
$unitToPervasive{"PEC$pec"} =
@@ -1066,157 +1117,187 @@ sub processDimms
}
-sub processMcs
+sub processMc
{
-#@TODO RTC:163874
-#Most of the nimmbus functionality is already in incorporated in other
-#functions. Leaving this in as we may need this code for centaur/cumulus.
-=begin
- my $self = shift;
- my $unit = shift;
- my $node = shift;
- my $proc = shift;
- my $mcbist = shift;
+
+ my $self = shift;
+ my $target = shift;
+ my $sys = shift;
+ my $node = shift;
+ my $proc = shift;
my $parent_affinity = shift;
my $parent_physical = shift;
my $node_phys = shift;
- my $mcs = $self->getAttribute($unit, "CHIP_UNIT");
- my $membufnum = $proc * $self->{MAX_MCS} + $mcs;
- $self->setAttribute($unit, "AFFINITY_PATH",$parent_affinity . "/mcs-$mcs");
- $self->setAttribute($unit, "PHYS_PATH", $parent_physical . "/mcs-$mcs");
- $self->setAttribute($unit, "MCS_NUM", $mcs);
- $self->setHuid($unit, 0, $node);
- $self->{targeting}{SYS}[0]{NODES}[$node]{MCBISTS}{$mcbist}{MCSS}[$mcs]{KEY}
- = $unit;
-
-# $self->setAttribute($unit, "EI_BUS_TX_LANE_INVERT","0");
-# $self->setAttribute($unit, "EI_BUS_TX_MSBSWAP","0");
-# $self->setAttribute($unit, "DMI_REFCLOCK_SWIZZLE","0");
-
- ## Find connected membufs
- my $membuf_dmi = $self->{data}->{TARGETS}{$unit}{CONNECTION}{DEST}[0];
- if (defined($membuf_dmi))
- {
- ## found membuf connected
- my $membuf =
- $self->{data}->{TARGETS}{$membuf_dmi}
- {PARENT}; ## get parent of dmi unit which is membuf
- my $dmi_bus = $self->{data}->{TARGETS}{$unit}{CONNECTION}{BUS}[0];
- $self->setAttribute($membuf, "POSITION",$membufnum);
- $self->setAttribute($membuf, "AFFINITY_PATH",
- $parent_affinity . "/mcs-$mcs/membuf-$membufnum");
- $self->setAttribute($membuf, "PHYS_PATH",
- $node_phys . "/membuf-$membufnum");
-
- ## copy DMI bus attributes to membuf
- $self->setAttribute($unit, "EI_BUS_TX_LANE_INVERT",
- $dmi_bus->{bus_attribute}->{PROC_TX_LANE_INVERT}->{default});
- $self->setAttribute($unit, "EI_BUS_TX_MSBSWAP",
- $dmi_bus->{bus_attribute}->{PROC_TX_MSBSWAP}->{default});
- $self->setAttribute($membuf, "EI_BUS_TX_LANE_INVERT",
- $dmi_bus->{bus_attribute}->{MEMBUF_TX_LANE_INVERT}->{default});
- $self->setAttribute($membuf, "EI_BUS_TX_MSBSWAP",
- $dmi_bus->{bus_attribute}->{MEMBUF_TX_MSBSWAP}->{default});
-
- ## auto setup FSI assuming schematic symbol. If FSI busses are
- ## defined in serverwiz2, this will be overridden
- ## in the schematic symbol, the fsi port num matches dmi ref clk num
-
- my $fsi_port = $self->{DMI_FSI_MAP}->{$mcs};
- my $proc_key =
- $self->{targeting}->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{KEY};
- my $proc_path = $self->getAttribute($proc_key,"PHYS_PATH");
- $self->setFsiAttributes($membuf,"FSICM",0,$proc_path,$fsi_port,0);
- $self->setAttribute($unit, "DMI_REFCLOCK_SWIZZLE",$fsi_port);
- my $dmi_swizzle =
- $self->getBusAttribute($unit,0,"DMI_REFCLOCK_SWIZZLE");
- if ($dmi_swizzle ne "")
- {
- $self->setAttribute($unit, "DMI_REFCLOCK_SWIZZLE",$dmi_swizzle);
- }
+ foreach my $proc_child (@{ $self->getTargetChildren($target) })
+ {
+ my $tgt_type = $self->getType($proc_child);
- $self->setHuid($membuf, 0, $node);
- $self->{targeting}
- ->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{MCSS}[$mcs] {MEMBUFS}[0]{KEY} =
- $membuf;
+ if($tgt_type eq "MC")
+ {
+ my $mc = $proc_child;
+ my $mc_num = $self->getAttribute($mc, "CHIP_UNIT");
- $self->setAttribute($membuf, "ENTITY_INSTANCE",
- $self->{membuf_inst_num});
- $self->{membuf_inst_num}++;
- ## get the mbas
- foreach my $child (@{ $self->{data}->{TARGETS}{$membuf}{CHILDREN} })
- {
- ## need to not hardcard the subunits
- if ($self->getType($child) eq "L4")
+ foreach my $mi (@{ $self->getTargetChildren($mc) })
{
- $self->{targeting}
- ->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{MCSS}[$mcs]{MEMBUFS}[0]
- {L4S}[0] {KEY} = $child;
- $self->setAttribute($child, "AFFINITY_PATH",
- $parent_affinity . "/mcs-$mcs/membuf-$membufnum/l4-0");
- $self->setAttribute($child, "PHYS_PATH",
- $node_phys . "/membuf-$membufnum/l4-0");
- $self->setHuid($child, 0, $node);
- }
+ my $mi_num = $self->getAttribute($mi, "CHIP_UNIT");
-
- if ($self->getType($child) eq "MCA")
- {
- my $mba = $self->getAttribute($child,"MBA_NUM");
- $self->setAttribute($child, "AFFINITY_PATH",
- $parent_affinity . "/mcs-$mcs/membuf-$membufnum/mba-$mba");
- $self->setAttribute($child, "PHYS_PATH",
- $node_phys . "/membuf-$membufnum/mba-$mba");
- $self->setHuid($child, 0, $node);
- $self->{targeting}
- ->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{MCSS}[$mcs]{MEMBUFS}[0]
- {MBAS}[$mba]{KEY} = $child;
-
- ## Trace the DDR busses to find connected DIMM
- my $ddrs = $self->findConnections($child,"DDR4","");
- if ($ddrs ne "")
+ foreach my $dmi (@{ $self->getTargetChildren($mi) })
{
+ my $dmi_num = $self->getAttribute($dmi, "CHIP_UNIT");
+
+ my $membufnum = $proc * $self->{MAX_DMI} + $dmi_num;
- my $affinitypos=0;
- foreach my $dimms (@{$ddrs->{CONN}})
+ my $aff_path = $self->getAttribute($dmi, "AFFINITY_PATH");
+ my $phys_path = $self->getAttribute($dmi, "PHYS_PATH");
+
+ ## Find connected membufs
+ my $membuf_dmi = $self->{data}->{TARGETS}{$dmi}{CONNECTION}{DEST}[0];
+
+ if (defined($membuf_dmi))
{
- my $ddr = $dimms->{SOURCE};
- my $port_num = $self->getAttribute($ddr,"MBA_PORT");
- my $dimm_num = $self->getAttribute($ddr,"MBA_DIMM");
- my $dimm=$dimms->{DEST_PARENT};
- $self->setAttribute($dimm,"MBA_PORT",$port_num);
- $self->setAttribute($dimm,"MBA_DIMM",$dimm_num);
-
- my $aff_pos=16*$proc+$mcs*$self->{MAX_MCS}+4*$mba+
- 2*$port_num+$dimm_num;
- $self->setAttribute($dimm, "AFFINITY_PATH",
- $parent_affinity
- . "/mcs-$mcs/membuf-$membufnum/mba-$mba/dimm-$affinitypos"
- );
- $self->setAttribute($dimm, "PHYS_PATH",
- $node_phys . "/dimm-" . $self->{dimm_tpos});
- $self->setAttribute($dimm, "POSITION",
- $aff_pos);
- $self->setAttribute($dimm, "VPD_REC_NUM",
- $aff_pos);
- $self->setHuid($dimm, 0, $node);
+ ## found membuf connected
+ my $membuf = $self->{data}->{TARGETS}{$membuf_dmi}{PARENT};
+ ## get parent of dmi unit which is membuf
+ my $dmi_bus = $self->{data}->{TARGETS}{$dmi}{CONNECTION}{BUS}[0];
+ $self->setAttribute($membuf, "POSITION",$membufnum);
+ $self->setAttribute($membuf, "AFFINITY_PATH",
+ $aff_path . "/membuf-$membufnum");
+
+ # For Zeppelin, the membufs are on riser cards, not directly on the node.
+ # TODO RTC:175877 - PHYS_PATH attribute updates for membuf
+ $self->setAttribute($membuf, "PHYS_PATH",
+ $node_phys . "/membuf-$membufnum");
+
+ # copy DMI bus attributes to membuf
+ $self->setAttribute($dmi, "EI_BUS_TX_LANE_INVERT",
+ $dmi_bus->{bus_attribute}->{PROC_TX_LANE_INVERT}->{default});
+ $self->setAttribute($dmi, "EI_BUS_TX_MSBSWAP",
+ $dmi_bus->{bus_attribute}->{PROC_TX_MSBSWAP}->{default});
+ $self->setAttribute($membuf, "EI_BUS_TX_LANE_INVERT",
+ $dmi_bus->{bus_attribute}->{MEMBUF_TX_LANE_INVERT}->{default});
+ $self->setAttribute($membuf, "EI_BUS_TX_MSBSWAP",
+ $dmi_bus->{bus_attribute}->{MEMBUF_TX_MSBSWAP}->{default});
+
+ ## auto setup FSI assuming schematic symbol. If FSI busses are
+ ## defined in serverwiz2, this will be overridden
+ ## in the schematic symbol, the fsi port num matches dmi ref clk num
+
+ my $fsi_port = $self->{DMI_FSI_MAP}->{$dmi};
+ my $proc_key =
+ $self->{targeting}->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{KEY};
+ my $proc_path = $self->getAttribute($proc_key,"PHYS_PATH");
+ $self->setFsiAttributes($membuf,"FSICM",0,$proc_path,$fsi_port,0);
+ $self->setAttribute($dmi, "DMI_REFCLOCK_SWIZZLE",$fsi_port);
+ my $dmi_swizzle =
+ $self->getBusAttribute($dmi,0,"DMI_REFCLOCK_SWIZZLE");
+ if ($dmi_swizzle ne "")
+ {
+ $self->setAttribute($dmi, "DMI_REFCLOCK_SWIZZLE",$dmi_swizzle);
+ }
+
+ $self->setHuid($membuf, $sys, $node);
$self->{targeting}
- ->{SYS}[0]{NODES}[$node]{PROCS}[$proc] {MCSS}[$mcs]
- {MEMBUFS}[0]{MBAS}[$mba] {DIMMS}[$affinitypos]{KEY} =
- $dimm;
- $self->setAttribute($dimm, "ENTITY_INSTANCE",
- $self->{dimm_tpos});
- $self->{dimm_tpos}++;
- $affinitypos++;
+ ->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{MC}[$mc]{MI}[$mi]
+ {DMI}[$dmi] {MEMBUFS}[0]{KEY} = $membuf;
+
+ $self->setAttribute($membuf, "ENTITY_INSTANCE",
+ $self->{membuf_inst_num});
+ $self->{membuf_inst_num}++;
+ ## get the mbas
+ foreach my $membuf_child (@{ $self->{data}->{TARGETS}{$membuf}{CHILDREN} })
+ {
+ my $childType = $self->getType($membuf_child);
+
+ ## need to not hardcard the subunits
+ if ($childType eq "L4")
+ {
+ $self->{targeting}
+ ->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{MC}[$mc]{MI}[$mi]
+ {DMI}[$dmi]{MEMBUFS}[0]{L4S}[0] {KEY} = $membuf_child;
+ # For Zeppelin, the membufs are on riser cards, not directly on the node.
+ # TODO RTC:175877 - PHYS_PATH attribute updates for membuf
+ $self->setAttribute($membuf_child, "AFFINITY_PATH",
+ $aff_path . "/membuf-$membufnum/l4-0");
+ $self->setAttribute($membuf_child, "PHYS_PATH",
+ $node_phys . "/membuf-$membufnum/l4-0");
+ $self->setHuid($membuf_child, $sys, $node);
+ }
+
+
+ if ($childType eq "MBA")
+ {
+ my $mba = $self->getAttribute($membuf_child,"MBA_NUM");
+ $self->setAttribute($membuf_child, "AFFINITY_PATH",
+ $aff_path . "/membuf-$membufnum/mba-$mba");
+
+ # For Zeppelin, the membufs are on riser cards, not directly on the node.
+ # TODO RTC:175877 - PHYS_PATH attribute updates for membuf
+ $self->setAttribute($membuf_child, "PHYS_PATH",
+ $node_phys . "/membuf-$membufnum/mba-$mba");
+ $self->setHuid($membuf_child, $sys, $node);
+ $self->{targeting}
+ ->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{MC}[$mc]{MI}[$mi]
+ {DMI}[$dmi]{MEMBUFS}[0]{MBAS}[$mba]{KEY} = $membuf_child;
+
+ ## Trace the DDR busses to find connected DIMM
+ my $ddrs = $self->findConnections($membuf_child,"DDR4","");
+ if ($ddrs ne "")
+ {
+ my $affinitypos=0;
+ foreach my $dimms (@{$ddrs->{CONN}})
+ {
+ my $ddr = $dimms->{SOURCE};
+ my $port_num = $self->getAttribute($ddr,"MBA_PORT");
+ my $dimm_num = $self->getAttribute($ddr,"MBA_DIMM");
+ my $dimm=$dimms->{DEST_PARENT};
+ $self->setAttribute($dimm,"MBA_PORT",$port_num);
+ $self->setAttribute($dimm,"MBA_DIMM",$dimm_num);
+
+ my $aff_pos = DIMMS_PER_PROC*$proc+
+ DIMMS_PER_DMI*$dmi_num+
+ DIMMS_PER_MBA*$mba+
+ DIMMS_PER_PORT*$port_num+
+ $dimm_num;
+
+ $self->setAttribute($dimm, "AFFINITY_PATH",
+ $aff_path . "/membuf-$membufnum/mba-$mba/dimm-$affinitypos"
+ );
+ # For Zeppelin, the membufs are on riser cards, not directly on the node.
+ # TODO RTC:175877 - PHYS_PATH attribute updates for membuf
+ $self->setAttribute($dimm, "PHYS_PATH",
+ $node_phys . "/dimm-" . $self->{dimm_tpos});
+ $self->setAttribute($dimm, "POSITION",
+ $aff_pos);
+ $self->setAttribute($dimm, "VPD_REC_NUM",
+ $aff_pos);
+ $self->setHuid($dimm, $sys, $node);
+ $self->{targeting}
+ ->{SYS}[0]{NODES}[$node]{PROCS}[$proc] {MC}[$mc]{MI}[$mi]{DMI}[$dmi]
+ {MEMBUFS}[0]{MBAS}[$mba] {DIMMS}[$affinitypos]{KEY} =
+ $dimm;
+ $self->setAttribute($dimm, "ENTITY_INSTANCE",
+ $self->{dimm_tpos});
+ $self->{dimm_tpos}++;
+
+ $affinitypos++;
+ }
+ }
+ }
+ }
}
- }
- }
- }
- }
-=cut
+
+
+ }#dmi
+ }#mi
+
+ }#mc
+ }#membuf_child
+
}
+
+
sub setFsiAttributes
{
my $self = shift;
diff --git a/src/usr/targeting/common/entitypath.C b/src/usr/targeting/common/entitypath.C
index 913a13a7f..d2f52fcf6 100644
--- a/src/usr/targeting/common/entitypath.C
+++ b/src/usr/targeting/common/entitypath.C
@@ -407,6 +407,8 @@ const char* EntityPath::pathElementTypeAsString(
return "MCA";
case TYPE_MCBIST:
return "MCBIST";
+ case TYPE_MC:
+ return "MC";
case TYPE_MI:
return "MI";
case TYPE_DMI:
diff --git a/src/usr/targeting/common/processMrw.pl b/src/usr/targeting/common/processMrw.pl
index 15a25d571..3a8eb3df4 100644..100755
--- a/src/usr/targeting/common/processMrw.pl
+++ b/src/usr/targeting/common/processMrw.pl
@@ -110,6 +110,10 @@ foreach my $target (sort keys %{ $targetObj->getAllTargets() })
{
processApss($targetObj, $target);
}
+ elsif ($type eq "MEMBUF")
+ {
+ processMembuf($targetObj, $target);
+ }
processIpmiSensors($targetObj,$target);
}
@@ -563,6 +567,7 @@ sub processProcessor
$targetObj->setAttribute($child, "VDDR_ID", $socket_pos);
}
}
+
elsif ($child_type eq "OCC")
{
processOcc($targetObj, $child, $target);
@@ -652,10 +657,12 @@ sub processI2cSpeeds
}
my $i2cs=$targetObj->findConnections($target,"I2C","");
+
if ($i2cs ne "") {
foreach my $i2c (@{$i2cs->{CONN}}) {
my $dest_type = $targetObj->getTargetType($i2c->{DEST_PARENT});
my $parent_target =$targetObj->getTargetParent($i2c->{DEST_PARENT});
+
if ($dest_type eq "chip-spd-device") {
setEepromAttributes($targetObj,
"EEPROM_VPD_PRIMARY_INFO",$parent_target,
@@ -889,6 +896,7 @@ sub processObus
#No connections mean, we need to set the OBUS_SLOT_INDEX to -1
#to mark that they are not connected
$targetObj->log($target,"no bus connection found");
+
foreach my $obrick (@{ $targetObj->getTargetChildren($target) })
{
$targetObj->setAttribute($obrick, "OBUS_SLOT_INDEX", -1);
@@ -923,6 +931,7 @@ sub processObus
if ($match eq 0)
{
$targetObj->setAttribute($obrick, "OBUS_SLOT_INDEX", -1);
+
}
}
}
@@ -1363,6 +1372,7 @@ sub processMembufVpdAssociation
{
my $targetObj = shift;
my $target = shift;
+
my $vpds=$targetObj->findConnections($target,"I2C","VPD");
if ($vpds ne "" ) {
my $vpd = $vpds->{CONN}->[0];
@@ -1423,7 +1433,8 @@ sub processMembuf
if ($targetObj->getType($child) eq "MBA")
{
my $mba_num = $targetObj->getAttribute($child,"MBA_NUM");
- my $dimms=$targetObj->findConnections($child,"DDR3","");
+ my $dimms=$targetObj->findConnections($child,"DDR4","");
+
if ($dimms ne "")
{
foreach my $dimm (@{$dimms->{CONN}})
@@ -1450,8 +1461,10 @@ sub processMembuf
setEepromAttributes($targetObj,
"EEPROM_VPD_PRIMARY_INFO",$dimm_target,
$dimm);
+
my $field=getI2cMapField($targetObj,$dimm_target,$dimm);
my $map = $dimm_portmap{$dimm_target};
+
if ($map eq "") {
print "ERROR: $dimm_target doesn't map to a dimm/port\n";
$targetObj->myExit(3);
@@ -1463,12 +1476,12 @@ sub processMembuf
"MRW_MEM_SENSOR_CACHE_ADDR_MAP","0x".join("",@addr_map));
## Update bus speeds
- #@TODO RTC:163874 -- centaur support
- #processI2cSpeeds($targetObj,$target);
+ processI2cSpeeds($targetObj,$target);
## Do MBA port mapping
my %mba_port_map;
- my $ddrs=$targetObj->findConnections($target,"DDR3","DIMM");
+ #@TODO RTC:175881 -- Support DDR3 DIMMs on Fleetwood systems
+ my $ddrs=$targetObj->findConnections($target,"DDR4","DIMM");
if ($ddrs ne "") {
my %portmap;
foreach my $ddr (@{$ddrs->{CONN}}) {
diff --git a/src/usr/targeting/common/xmltohb/attribute_types.xml b/src/usr/targeting/common/xmltohb/attribute_types.xml
index 0a3d2f726..fcb5e24cd 100644
--- a/src/usr/targeting/common/xmltohb/attribute_types.xml
+++ b/src/usr/targeting/common/xmltohb/attribute_types.xml
@@ -358,14 +358,18 @@
<name>NPU</name>
<value>67</value>
</enumerator>
+ <enumerator>
+ <name>MC</name>
+ <value>68</value>
+ </enumerator>
<!-- add any new types here, and increment TEST_FAIL and LAST_IN_RANGE -->
<enumerator>
<name>TEST_FAIL</name>
- <value>68</value>
+ <value>69</value>
</enumerator>
<enumerator>
<name>LAST_IN_RANGE</name>
- <value>69</value>
+ <value>70</value>
</enumerator>
<default>NA</default>
</enumerationType>
@@ -1232,6 +1236,26 @@
</attribute>
<attribute>
+ <id>ISDIMM_MBVPD_INDEX</id>
+ <description>
+ Multiple centaurs can sometimes have their VPD located in one
+ physical SEEPROM. This is the index into the memory buffer VPD
+ for this centaur.
+ </description>
+ <simpleType>
+ <uint8_t>
+ <default>0</default>
+ </uint8_t>
+ </simpleType>
+ <persistency>non-volatile</persistency>
+ <readable/>
+ <hwpfToHbAttrMap>
+ <id>ATTR_ISDIMM_MBVPD_INDEX</id>
+ <macro>DIRECT</macro>
+ </hwpfToHbAttrMap>
+</attribute>
+
+<attribute>
<id>FSI_MASTER_CHIP</id>
<description>Chip which contains the FSI master logic that drives this slave when booting from the default master processor</description>
<nativeType>
@@ -12626,6 +12650,21 @@ Measured in GB</description>
</attribute>
<attribute>
+ <id>MAX_DMI_PER_PROC</id>
+ <description>
+ System attribute.
+ The max DMI units per proc available in the system.
+ </description>
+ <simpleType>
+ <uint8_t>
+ <default>8</default>
+ </uint8_t>
+ </simpleType>
+ <persistency>non-volatile</persistency>
+ <readable/>
+</attribute>
+
+<attribute>
<id>TEST_NEGATIVE_FCN</id>
<description>Attribute to test signed attribute
functionality in the system</description>
diff --git a/src/usr/targeting/common/xmltohb/attribute_types_openpower.xml b/src/usr/targeting/common/xmltohb/attribute_types_openpower.xml
index a40c2142d..1e705f111 100644
--- a/src/usr/targeting/common/xmltohb/attribute_types_openpower.xml
+++ b/src/usr/targeting/common/xmltohb/attribute_types_openpower.xml
@@ -285,26 +285,6 @@
</attribute>
<attribute>
- <id>ISDIMM_MBVPD_INDEX</id>
- <description>
- Multiple centaurs can sometimes have their VPD located in one
- physical SEEPROM. This is the index into the memory buffer VPD
- for this centaur.
- </description>
- <simpleType>
- <uint8_t>
- <default>0</default>
- </uint8_t>
- </simpleType>
- <persistency>non-volatile</persistency>
- <readable/>
- <hwpfToHbAttrMap>
- <id>ATTR_ISDIMM_MBVPD_INDEX</id>
- <macro>DIRECT</macro>
- </hwpfToHbAttrMap>
-</attribute>
-
-<attribute>
<id>IPMI_INSTANCE</id>
<description>Holds the IPMI instance number for this entity.</description>
<simpleType>
diff --git a/src/usr/targeting/common/xmltohb/target_types.xml b/src/usr/targeting/common/xmltohb/target_types.xml
index 426cf7bf5..02134ff55 100755
--- a/src/usr/targeting/common/xmltohb/target_types.xml
+++ b/src/usr/targeting/common/xmltohb/target_types.xml
@@ -143,6 +143,7 @@
<attribute><id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
<default>0x00000001</default> <!-- GARD -->
</attribute>
+
<attribute><id>VPD_REC_NUM</id></attribute>
<!-- New attributes for mss/proc_setup_bars -->
<!-- proc_setup_bars_memory_attributes.xml -->
@@ -403,12 +404,13 @@
<field><id>reserved</id><value>0</value></field>
</default>
</attribute>
- <attribute><id>EEPROM_VPD_PRIMARY_INFO</id></attribute>
+ <attribute>
+ <id>ISDIMM_MBVPD_INDEX</id>
+ </attribute>
<attribute>
<id>I2C_BUS_SPEED_ARRAY</id>
<default>0,0,0,0,0,400,0,400,400,0,0,0,0,0,0,0</default>
</attribute>
-
<attribute><id>MSS_FREQ</id></attribute>
<attribute><id>MSS_LAB_OVERRIDE_FOR_MEM_PLL</id></attribute>
<attribute><id>ECID</id></attribute>
@@ -462,7 +464,7 @@
</attribute>
<attribute><id>CDM_DOMAIN</id><default>MEM</default></attribute>
<attribute><id>FRU_ID</id></attribute>
- <attribute><id>MSS_VREF_CAL_CNTL</id></attribute>
+ <attribute><id>MSS_VREF_CAL_CNTL</id></attribute>
</targetType>
<!--Dummy card to use as a DIMM for initial I2C/EEPROM testing -->
@@ -500,10 +502,7 @@
<attribute><id>HWAS_STATE_CHANGED_SUBSCRIPTION_MASK</id>
<default>0x00000003</default> <!--GARD | MEMDIAG -->
</attribute>
-
- <attribute><id>EEPROM_VPD_PRIMARY_INFO</id></attribute>
<attribute><id>TEMP_SENSOR_I2C_CONFIG</id></attribute>
-
<attribute><id>VPD_REC_NUM</id></attribute>
<attribute><id>MSS_EFF_VPD_VERSION</id></attribute>
<attribute><id>CDM_DOMAIN</id><default>DIMM</default></attribute>
@@ -615,6 +614,7 @@
<default>43</default>
</attribute>
<attribute><id>MAX_MCS_PER_SYSTEM</id></attribute>
+ <attribute><id>MAX_DMI_PER_PROC</id></attribute>
<attribute><id>TEST_NEGATIVE_FCN</id></attribute>
<!-- End max/min config attributes -->
<attribute><id>RECONFIGURE_LOOP</id></attribute>
@@ -719,7 +719,6 @@
<attribute><id>MAX_MBA_PORTS_PER_MBA</id></attribute>
<attribute><id>MAX_DIMMS_PER_MBA_PORT</id></attribute>
<attribute><id>MAX_CHIPLETS_PER_PROC</id></attribute>
- <attribute><id>MAX_MCS_PER_SYSTEM</id></attribute>
<attribute><id>FABRIC_TO_PHYSICAL_NODE_MAP</id></attribute>
<attribute><id>RUN_MAX_MEM_PATTERNS</id></attribute>
<attribute><id>HIDDEN_ERRLOGS_ENABLE</id></attribute>
@@ -2020,6 +2019,28 @@
</attribute>
</targetType>
+<!-- MC
+ Nimbus : None
+ Cumulus: 2 per chip -->
+ <targetType>
+ <id>unit-mc-power9</id>
+ <parent>unit</parent>
+ <attribute>
+ <id>TYPE</id>
+ <default>MC</default>
+ </attribute>
+ <attribute><id>DECONFIG_GARDABLE</id><default>1</default></attribute>
+ <attribute><id>PARENT_PERVASIVE</id></attribute>
+ </targetType>
+ <targetType>
+ <id>unit-mc-cumulus</id>
+ <parent>unit-mc-power9</parent>
+ <attribute>
+ <id>MODEL</id>
+ <default>CUMULUS</default>
+ </attribute>
+ </targetType>
+
<!-- MI
Nimbus : None
Cumulus: total of 4 per chip -->
diff --git a/src/usr/targeting/common/xmltohb/target_types_hb.xml b/src/usr/targeting/common/xmltohb/target_types_hb.xml
index 2626f004d..51617b060 100755..100644
--- a/src/usr/targeting/common/xmltohb/target_types_hb.xml
+++ b/src/usr/targeting/common/xmltohb/target_types_hb.xml
@@ -175,13 +175,7 @@
<id>I2C_PAGE_MUTEX_1</id>
<default>0</default>
</attribute>
- <attribute>
- <id>GPIO_INFO</id>
- </attribute>
<attribute><id>VPD_SWITCHES</id></attribute>
- <attribute>
- <id>ISDIMM_MBVPD_INDEX</id>
- </attribute>
<attribute><id>PART_NUMBER</id></attribute>
<attribute><id>SERIAL_NUMBER</id></attribute>
<attribute>
diff --git a/src/usr/targeting/common/xmltohb/target_types_openpower.xml b/src/usr/targeting/common/xmltohb/target_types_openpower.xml
index e039b77dc..f85eb2b0b 100644
--- a/src/usr/targeting/common/xmltohb/target_types_openpower.xml
+++ b/src/usr/targeting/common/xmltohb/target_types_openpower.xml
@@ -100,11 +100,16 @@
<targetTypeExtension>
<id>chip-membuf-centaur</id>
<attribute><id>IPMI_SENSORS</id></attribute>
+ <attribute>
+ <id>GPIO_INFO</id>
+ </attribute>
+ <attribute><id>EEPROM_VPD_PRIMARY_INFO</id></attribute>
</targetTypeExtension>
<targetTypeExtension>
<id>lcard-dimm</id>
<attribute><id>IPMI_SENSORS</id></attribute>
+ <attribute><id>EEPROM_VPD_PRIMARY_INFO</id></attribute>
</targetTypeExtension>
<targetTypeExtension>
diff --git a/src/usr/targeting/common/xmltohb/xmltohb.pl b/src/usr/targeting/common/xmltohb/xmltohb.pl
index 483df2083..a31aebd9a 100755
--- a/src/usr/targeting/common/xmltohb/xmltohb.pl
+++ b/src/usr/targeting/common/xmltohb/xmltohb.pl
@@ -5451,6 +5451,14 @@ sub generateTargetingImage {
# Use all attributes including virtual for association processing
getTargetAttributes($targetInstance->{type}, $allAttributes,\%attrhash);
+ #Check for Targets with ZERO attributes before writing to PNOR.
+ my $tempNumAttributes = keys %attrhash;
+ if($tempNumAttributes == 0)
+ {
+ #skip the present target
+ next;
+ }
+
# Update hash with any per-instance overrides, but only if that
# attribute has already been defined
foreach my $attr (@{$targetInstance->{attribute}})
OpenPOWER on IntegriCloud