diff options
author | Swathi Madhuri Bhattiprolu <bhmadhur@in.ibm.com> | 2017-06-13 01:11:40 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2017-06-27 09:31:31 -0400 |
commit | 81acff67f91941645a84825f4f77943db16a0692 (patch) | |
tree | f23d638a71e003f8f23aab6b2fd870c28f007466 /src/usr/targeting | |
parent | 2374128170d355578a8d5141a19dfe6be7f8bd8e (diff) | |
download | talos-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/targeting')
-rw-r--r-- | src/usr/targeting/common/Targets.pm | 361 | ||||
-rw-r--r-- | src/usr/targeting/common/entitypath.C | 2 | ||||
-rwxr-xr-x[-rw-r--r--] | src/usr/targeting/common/processMrw.pl | 21 | ||||
-rw-r--r-- | src/usr/targeting/common/xmltohb/attribute_types.xml | 43 | ||||
-rw-r--r-- | src/usr/targeting/common/xmltohb/attribute_types_openpower.xml | 20 | ||||
-rwxr-xr-x | src/usr/targeting/common/xmltohb/target_types.xml | 35 | ||||
-rw-r--r--[-rwxr-xr-x] | src/usr/targeting/common/xmltohb/target_types_hb.xml | 6 | ||||
-rw-r--r-- | src/usr/targeting/common/xmltohb/target_types_openpower.xml | 5 | ||||
-rwxr-xr-x | src/usr/targeting/common/xmltohb/xmltohb.pl | 8 |
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}}) |