blob: 8ca8e7a71c459f33e98fe768ba2e5bbf9733646a [file] [log] [blame]
From 7ad7fc3bf87ae43c917dda3d8fc6e81747f7816c Mon Sep 17 00:00:00 2001
From: Prachi Gupta <pragupta@us.ibm.com>
Date: Mon, 26 Sep 2016 10:04:58 -0500
Subject: [PATCH 1/2] processMRW updates for witherspoon
Change-Id: Idf410eedf5214de5c106c5d5fa6503458c17f115
RTC:143114
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/30511
Reviewed-by: William G. Hoffa <wghoffa@us.ibm.com>
Tested-by: Jenkins Server <pfd-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>
---
src/usr/targeting/common/Targets.pm | 741 ++++++++++++++++-----
src/usr/targeting/common/processMrw.pl | 176 +++--
.../targeting/common/xmltohb/attribute_types.xml | 2 +-
src/usr/targeting/common/xmltohb/target_types.xml | 6 +
4 files changed, 685 insertions(+), 240 deletions(-)
diff --git a/src/usr/targeting/common/Targets.pm b/src/usr/targeting/common/Targets.pm
index 32a789e..fc18675 100644
--- a/src/usr/targeting/common/Targets.pm
+++ b/src/usr/targeting/common/Targets.pm
@@ -28,6 +28,40 @@ use strict;
use XML::Simple;
use XML::Parser;
use Data::Dumper;
+use feature "state";
+
+use constant
+{
+ MAX_PROC_PER_NODE => 8,
+ MAX_CORE_PER_PROC => 24,
+ MAX_EX_PER_PROC => 12,
+ MAX_EQ_PER_PROC => 6,
+ MAX_ABUS_PER_PROC => 3,
+ MAX_XBUS_PER_PROC => 3,
+ MAX_MCS_PER_PROC => 4,
+ MAX_MCA_PER_PROC => 8,
+ MAX_MCBIST_PER_PROC => 2,
+ MAX_PEC_PER_PROC => 3, # PEC is same as PBCQ
+ MAX_PHB_PER_PROC => 6, # PHB is same as PCIE
+ MAX_MBA_PER_MEMBUF => 2,
+ MAX_OBUS_PER_PROC => 4,
+ MAX_PPE_PER_PROC => 51, #Only 21, but they are sparsely populated
+ MAX_PERV_PER_PROC => 56, #Only 42, but they are sparsely populated
+ MAX_CAPP_PER_PROC => 2,
+ MAX_SBE_PER_PROC => 1,
+ MAX_NV_PER_PROC => 1, # FW only for GARD purposes
+ MAX_MI_PER_PROC => 4,
+ PERVASIVE_PARENT_CORE_OFFSET => 32,
+ PERVASIVE_PARENT_EQ_OFFSET => 16,
+ PERVASIVE_PARENT_XBUS_OFFSET => 6,
+ PERVASIVE_PARENT_OBUS_OFFSET => 9,
+ PERVASIVE_PARENT_MCBIST_OFFSET => 7,
+ PERVASIVE_PARENT_MCS_OFFSET => 7,
+ PERVASIVE_PARENT_MCA_OFFSET => 7,
+ PERVASIVE_PARENT_PEC_OFFSET => 13,
+ PERVASIVE_PARENT_PHB_OFFSET => 13,
+ PERVASIVE_PARENT_NV_OFFSET => 5,
+};
sub new
{
@@ -152,11 +186,19 @@ sub printTarget
my $target = shift;
my $target_ptr = $self->getTarget($target);
+
+ if ($target eq "")
+ {
+ return;
+ }
+
print $fh "<targetInstance>\n";
my $target_id = $self->getAttribute($target, "PHYS_PATH");
$target_id = substr($target_id, 9);
$target_id =~ s/\///g;
$target_id =~ s/\-//g;
+
+
print $fh "\t<id>" . $target_id . "</id>\n";
print $fh "\t<type>" . $self->getTargetType($target) . "</type>\n";
@@ -179,35 +221,142 @@ sub printAttribute
# TODO RTC: TBD
# temporary until we converge attribute types
my %filter;
- $filter{MRW_TYPE} = 1;
- $filter{INSTANCE_PATH} = 1;
- $filter{SYSTEM_NAME} = 1;
- $filter{BUS_TYPE} = 1;
- $filter{DIRECTION} = 1;
- $filter{ENABLE_CAPI} = 1;
- $filter{PCIE_CONFIG_NUM} = 1;
- $filter{PCIE_LANE_MASK} = 1;
- $filter{PCIE_LANE_SET} = 1;
- $filter{PCIE_NUM_LANES} = 1;
- $filter{PHB_NUM} = 1;
- $filter{IOP_NUM} = 1;
- $filter{LOCATION_CODE} = 1;
- $filter{MCS_NUM} = 1;
- $filter{SCHEMATIC_INTERFACE} = 1;
- $filter{ENTITY_ID} = 1;
- $filter{CLASS} = 1;
- $filter{MODEL} = 1;
- $filter{TYPE} = 1;
- $filter{CDM_POLICIES} = 1;
- $filter{CDM_POLICIES_BITMASK} = 1;
- $filter{ENTITY_ID_LOOKUP} = 1;
- $filter{ENTITY_INSTANCE} = 1;
- $filter{MBA_NUM} = 1;
- $filter{IPMI_NAME} = 1;
- $filter{INSTANCE_ID} = 1;
- $filter{IO_CONFIG_SELECT} = 1;
- $filter{FRU_NAME} = 1;
-
+ $filter{MRW_TYPE} = 1;
+ $filter{SYSTEM_NAME} = 1;
+ $filter{BUS_TYPE} = 1;
+ $filter{DIRECTION} = 1;
+ $filter{ENABLE_CAPI} = 1;
+ $filter{PCIE_CONFIG_NUM} = 1;
+ $filter{PCIE_LANE_MASK} = 1;
+ $filter{PCIE_LANE_SET} = 1;
+ $filter{PCIE_NUM_LANES} = 1;
+ $filter{PHB_NUM} = 1;
+ $filter{IOP_NUM} = 1;
+ $filter{LOCATION_CODE} = 1;
+ $filter{LOCATION_CODE_TYPE} = 1;
+ $filter{MCS_NUM} = 1;
+ $filter{SCHEMATIC_INTERFACE} = 1;
+ $filter{ENTITY_ID} = 1;
+ $filter{CLASS} = 1;
+ $filter{MODEL} = 1;
+ $filter{TYPE} = 1;
+ $filter{CDM_POLICIES} = 1;
+ $filter{CDM_POLICIES_BITMASK} = 1;
+ $filter{ENTITY_ID_LOOKUP} = 1;
+ $filter{ENTITY_INSTANCE} = 1;
+ $filter{MBA_NUM} = 1;
+ $filter{IPMI_NAME} = 1;
+ $filter{INSTANCE_ID} = 1;
+ $filter{INSTANCE_PATH} = 1;
+ $filter{IO_CONFIG_SELECT} = 1;
+ $filter{FRU_NAME} = 1;
+ $filter{TPM_BACKUP_INFO} = 1;
+ $filter{TPM_PRIMARY_INFO} = 1;
+ $filter{ALL_MCS_IN_INTERLEAVING_GROUP} = 1;
+ $filter{AVERAGE_IPL_TIME} = 1;
+ $filter{CHECK_SCRIPT} = 1;
+ $filter{DMI_DFE_OVERRIDE} = 1;
+ $filter{FREQ_A} = 1;
+ $filter{FREQ_NEST_HFT} = 1;
+ $filter{FREQ_PB} = 1;
+ $filter{FREQ_PB_HFT} = 1;
+ $filter{FREQ_PCIE} = 1;
+ $filter{FREQ_X} = 1;
+ $filter{FREQ_X_HFT} = 1;
+ $filter{LED_ON_DEFAULT_GPIO_VALUE} = 1;
+ $filter{LED_STRATEGY} = 1;
+ $filter{MSS_MCA_HASH_MODE} = 1;
+ $filter{MRW_ENHANCED_GROUPING_NO_MIRRORING} = 1;
+ $filter{MRW_MEM_MIRRORING_ALLOWED} = 1;
+ $filter{MRW_MEM_MIRRORING_ENABLE_DEFAULT} = 1;
+ $filter{MRW_MEM_POWER_CONTROL_USAGE} = 1;
+ $filter{MRW_VMEM_REGULATOR_MEMORY_POWER_LIMIT_PER_DIMM} = 1;
+ $filter{MRW_VMEM_REGULATOR_MEMORY_POWER_LIMIT_PER_DIMM_DDR4} = 1;
+ $filter{MRW_VMEM_REGULATOR_POWER_LIMIT_PER_DIMM_ADJ_ENABLE} = 1;
+ $filter{MSS_VOLT_VDDR_OFFSET_DISABLE} = 1;
+ $filter{OCC_LOAD_TIMEOUT} = 1;
+ $filter{OCC_RESET_TIMEOUT} = 1;
+ $filter{PCIE_DEFAULT_HDDW_SLOT_COUNT} = 1;
+ $filter{PCIE_MIN_HDDW_SLOT_COUNT} = 1;
+ $filter{PCIE_MAX_HDDW_SLOT_COUNT} = 1;
+ $filter{REDUNDANT_FSPS} = 1;
+ $filter{SYSTEM_MTM} = 1;
+ $filter{PM_EXTERNAL_VRM_STEPSIZE} = 1;
+ $filter{PM_EXTERNAL_VRM_STEPDELAY} = 1;
+ $filter{PM_SPIPSS_FREQUENCY} = 1;
+ $filter{PM_SYSTEM_IVRMS_ENABLED} = 1;
+ $filter{NUMERIC_POD_TYPE_TEST} = 1;
+ $filter{CARD_TYPE} = 1;
+ $filter{PROC_PCIE_DSMP_CAPABLE} = 1;
+ $filter{PROC_PCIE_IOP_CONFIG} = 1;
+ $filter{PROC_PCIE_IOP_G2_PLL_CONTROL0} = 1;
+ $filter{PROC_PCIE_IOP_G3_PLL_CONTROL0} = 1;
+ $filter{PROC_PCIE_IOP_PCS_CONTROL0} = 1;
+ $filter{PROC_PCIE_IOP_PCS_CONTROL1} = 1;
+ $filter{PROC_PCIE_IOP_PLL_GLOBAL_CONTROL0} = 1;
+ $filter{PROC_PCIE_IOP_PLL_GLOBAL_CONTROL1} = 1;
+ $filter{PROC_PCIE_IOP_REVERSAL} = 1;
+ $filter{PROC_PCIE_IOP_REVERSAL_BIFURCATED} = 1;
+ $filter{PROC_PCIE_IOP_REVERSAL_NON_BIFURCATED} = 1;
+ $filter{PROC_PCIE_IOP_RX_PEAK} = 1;
+ $filter{PROC_PCIE_IOP_RX_SDL} = 1;
+ $filter{PROC_PCIE_IOP_RX_VGA_CONTROL2} = 1;
+ $filter{PROC_PCIE_IOP_TX_BWLOSS1} = 1;
+ $filter{PROC_PCIE_IOP_TX_FFE_GEN1} = 1;
+ $filter{PROC_PCIE_IOP_TX_FFE_GEN2} = 1;
+ $filter{PROC_PCIE_IOP_TX_FIFO_OFFSET} = 1;
+ $filter{PROC_PCIE_IOP_TX_RCVRDETCNTL} = 1;
+ $filter{PROC_PCIE_IOP_ZCAL_CONTROL} = 1;
+ $filter{NPU_MMIO_BAR_SIZE} = 1;
+ $filter{NPU_MMIO_BAR_BASE_ADDR} = 1;
+ $filter{PROC_PCIE_REFCLOCK_ENABLE} = 1;
+ $filter{PSI_HB_ESP_ADDR} = 1;
+ $filter{TPM_INFO} = 1;
+ $filter{STANDBY_PLUGGABLE} = 1;
+ $filter{CPM_INFLECTION_POINTS} = 1;
+ $filter{PROC_FABRIC_X_ATTACHED_CHIP_CNFG} = 1;
+ $filter{PROC_PCIE_HOTPLUG_DISABLE_ACTIONS} = 1;
+ $filter{SYSTEM_RESCLK_VALUE} = 1;
+ $filter{HWAS_STATE} = 1;
+ $filter{PROC_MIRROR_SIZES} = 1;
+ $filter{PROC_FABRIC_X_ADDR_DIS} = 1;
+ $filter{PROC_PCIE_HOTPLUG_ENABLE_ACTIONS} = 1;
+ $filter{PROC_FABRIC_A_ATTACHED_LINK_ID} = 1;
+ $filter{PROC_MEM_BASES} = 1;
+ $filter{UNIT_TEST_MCA_MEMORY_SIZES} = 1;
+ $filter{SYSTEM_RESCLK_L3_VALUE} = 1;
+ $filter{PROC_CHTM_BAR_SIZES} = 1;
+ $filter{SYSTEM_RESCLK_FREQ_REGIONS} = 1;
+ $filter{PROC_MIRROR_SIZES_ACK} = 1;
+ $filter{PROC_FABRIC_X_ATTACHED_LINK_ID} = 1;
+ $filter{PROC_FABRIC_A_ATTACHED_LINK_ID} = 1;
+ $filter{PROC_FABRIC_A_ATTACHED_CHIP_ID} = 1;
+ $filter{PROC_MEM_SIZES} = 1;
+ $filter{PROC_FABRIC_OPTICS_CONFIG_MODE} = 1;
+ $filter{PROC_PCIE_LANE_EQUALIZATION} = 1;
+ $filter{HOT_PLUG_POWER_CONTROLLER_INFO} = 1;
+ $filter{PROC_MEM_BASES_ACK} = 1;
+ $filter{PROC_FABRIC_A_ATTACHED_CHIP_CNFG} = 1;
+ $filter{CHTM_TRACE_TYPE} = 1;
+ $filter{PROC_PCIE_NOT_F_LINK} = 1;
+ $filter{PROC_FABRIC_X_ATTACHED_CHIP_ID} = 1;
+ $filter{PROC_FABRIC_A_ADDR_DIS} = 1;
+ $filter{MSS_MCS_GROUP_32} = 1;
+ $filter{PROC_MIRROR_BASES_ACK} = 1;
+ $filter{DELETE_AFFINITY_PATH} = 1;
+ $filter{PROC_MIRROR_BASES} = 1;
+ $filter{PROC_FABRIC_A_LINK_DELAY} = 1;
+ $filter{PROC_MEM_SIZES_ACK} = 1;
+ $filter{SYSTEM_RESCLK_FREQ_REGION_INDEX} = 1;
+ $filter{PROC_FABRIC_X_LINK_DELAY} = 1;
+ $filter{PROC_CHTM_BAR_BASE_ADDR} = 1;
+ $filter{TOD_CPU_DATA} = 1;
+ $filter{MSS_VOLT} = 1;
+ $filter{EFF_READ_DBI} = 1;
+ $filter{RU_TYPE} = 1;
+ $filter{STANDBY_PLUGGABLE} = 1;
+ $filter{MANUFACTURER} = 1;
+ $filter{HWAS_STATE_CHANGED_SUBSCRIPTION_MASK} = 1;
if ($filter{$attribute} == 1)
{
return;
@@ -313,6 +462,7 @@ sub buildHierarchy
{
$baseptr = $self->{xml}->{'targetInstances'}->{'targetInstance'};
}
+
if ($target eq "")
{
## find system target
@@ -453,189 +603,441 @@ sub buildHierarchy
## HOSTBOOT expected hierarchy: sys/node/proc/<unit>
## sys/node/proc/mcs/membuf/<unit>
## sys/node/proc/mcs/membuf/mba/dimm
+## This function also sets the common attributes for all the targets
+## Common attributes include:
+## - FAPI_NAME
+## - PHYS_PATH
+## - AFFINITY_PATH
+## - ORDINAL_ID
+## - HUID
sub buildAffinity
{
my $self = shift;
- my $node = -1;
- my $tpm = -1;
- my $proc = -1;
- my $node_phys = "";
- my $node_aff = "";
- my $core_num = 0;
+ my $node = -1;
+ my $proc = -1;
+ my $tpm = -1;
+ my $sys_phys = "";
+ my $node_phys = "";
+ my $node_aff = "";
+ my $sys_pos = -1;
+ my $mcbist = -1;
+
$self->{membuf_inst_num}=0;
+
foreach my $target (sort keys %{ $self->{data}->{TARGETS} })
{
my $target_ptr = $self->{data}->{TARGETS}{$target};
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; }
if ($type eq "SYS")
{
$proc = -1;
$node = -1;
-
$self->{targeting}{SYS}[0]{KEY} = $target;
- $self->setAttribute($target, "AFFINITY_PATH",
- "affinity:".$self->{TOP_LEVEL});
- $self->setAttribute($target, "PHYS_PATH",
- "physical:".$self->{TOP_LEVEL});
- $self->setAttribute($target, "ENTITY_INSTANCE","0");
+
+ #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);
+ $sys_phys = $self->getAttribute($target, "PHYS_PATH");
+ $sys_phys = substr($sys_phys, 9);
}
elsif ($type eq "NODE")
{
- $core_num = 0;
- $proc = -1;
- $self->{dimm_tpos} = 0;
- $self->{membuf_inst_num}=0;
+ $proc = -1;
+ $self->{membuf_inst_num} = 0;
$node++;
- $node_phys = "physical:".$self->{TOP_LEVEL}."/node-$node";
- $node_aff = "affinity:".$self->{TOP_LEVEL}."/node-$node";
+
+ $node_phys = "physical:".$sys_phys."/node-$node";
+ $node_aff = "affinity:".$sys_phys."/node-$node";
+
$self->{targeting}{SYS}[0]{NODES}[$node]{KEY} = $target;
- $self->setAttribute($target, "AFFINITY_PATH",
- "affinity:".$self->{TOP_LEVEL}."/node-$node");
- $self->setAttribute($target, "PHYS_PATH",
- "physical:".$self->{TOP_LEVEL}."/node-$node");
- $self->setHuid($target, 0, $node);
- $self->setAttribute($target, "ENTITY_INSTANCE",$node);
+
+ $self->setHuid($target, $sys_pos, $node);
+ $self->setAttribute($target, "FAPI_NAME",getFapiName($type));
+ $self->setAttribute($target, "FAPI_POS", $pos);
+ $self->setAttribute($target, "PHYS_PATH", $node_phys);
+ $self->setAttribute($target, "AFFINITY_PATH", $node_aff);
+ $self->setAttribute($target, "ORDINAL_ID", $pos);
}
elsif ($type eq "TPM")
{
$tpm++;
+
$self->{targeting}{SYS}[0]{NODES}[$node]{TPMS}[$tpm]{KEY} = $target;
- $self->setAttribute($target, "AFFINITY_PATH",
- "affinity:".$self->{TOP_LEVEL}.
- "/node-$node/tpm-$tpm");
- $self->setAttribute($target, "PHYS_PATH",
- "physical:".$self->{TOP_LEVEL}.
- "/node-$node/tpm-$tpm");
- $self->setHuid($target, 0, $tpm);
- $self->setAttribute($target, "ENTITY_INSTANCE",$tpm);
+
+ my $tpm_phys = $node_phys . "/tpm-$tpm";
+ my $tpm_aff = $node_aff . "/tpm-$tpm";
+
+
+ $self->setHuid($target, $sys_pos, $tpm);
+ $self->setAttribute($target, "FAPI_NAME",getFapiName($type));
+ $self->setAttribute($target, "FAPI_POS", $pos);
+ $self->setAttribute($target, "PHYS_PATH", $tpm_phys);
+ $self->setAttribute($target, "AFFINITY_PATH", $tpm_aff);
+ $self->setAttribute($target, "ORDINAL_ID", $pos);
+ }
+ elsif ($type eq "MCS")
+ {
+ $self->setAttribute($target, "VPD_REC_NUM", 0);
+ $self->setAttribute($target, "MEMVPD_POS",
+ $self->getAttribute($target, "CHIP_UNIT"));
+ }
+ elsif ($type eq "MCA")
+ {
+ my $ddrs = $self->findConnections($target,"DDR4","");
+ $self->processDimms($ddrs, $sys_pos, $node_phys, $node, $proc);
}
elsif ($type eq "PROC")
{
$proc++;
- my $num_mcs = 0;
- ### count number of MCSs
- foreach my $unit (@{ $self->{data}->{TARGETS}{$target}{CHILDREN} })
- {
- my $unit_type = $self->getType($unit);
- if ($unit_type eq "MCS")
- {
- $num_mcs++;
- }
- }
- if ($num_mcs > $self->{MAX_MCS})
- {
- $self->{MAX_MCS} = $num_mcs;
- }
+
$self->{NUM_PROCS_PER_NODE} = $proc + 1;
+
$self->{targeting}->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{KEY} =
- $target;
-
- $self->setHuid($target, 0, $node);
- my $socket = $self->getTargetParent(
- $self->getTargetParent($target));
- my $parent_affinity = "affinity:".$self->{TOP_LEVEL}
- ."/node-$node/proc-$proc";
- my $parent_physical = "physical:".$self->{TOP_LEVEL}
- ."/node-$node/proc-$proc";
- $self->setAttribute($target, "AFFINITY_PATH", $parent_affinity);
- $self->setAttribute($target, "PHYS_PATH", $parent_physical);
- $self->setAttribute($target, "POSITION", $proc);
- $self->setAttribute($target, "ENTITY_INSTANCE",$proc);
+ $target;
+
+ my $socket=$self->getTargetParent($self->getTargetParent($target));
+ my $parent_affinity = $node_aff . "/proc-$proc";
+ my $parent_physical = $node_phys . "/proc-$proc";
+
+ my $fapi_name = getFapiName($type, $node, $proc);
+
+ $self->setHuid($target, $sys_pos, $node);
+ $self->setAttribute($target, "FAPI_NAME", $fapi_name);
+ $self->setAttribute($target, "PHYS_PATH", $parent_physical);
+ $self->setAttribute($target, "AFFINITY_PATH", $parent_affinity);
+ $self->setAttribute($target, "ORDINAL_ID", $pos);
+ $self->setAttribute($target, "POSITION", $pos);
+
$self->setAttribute($target, "FABRIC_GROUP_ID",
$self->getAttribute($socket,"FABRIC_GROUP_ID"));
$self->setAttribute($target, "FABRIC_CHIP_ID",
$self->getAttribute($socket,"FABRIC_CHIP_ID"));
-
$self->setAttribute($target, "VPD_REC_NUM", $proc);
+ $self->iterateOverChiplets($target, $sys_pos, $node, $proc);
+ }
+ }
+}
- foreach my $unit (@{ $self->{data}->{TARGETS}{$target}{CHILDREN} })
- {
- my $unit_ptr = $self->getTarget($unit);
- my $unit_type = $self->getType($unit);
- my $unit_type_id = $self->getEnumValue("TYPE", $unit_type);
- if ( $unit_type_id eq "" || $unit_type eq "FSI"
- || $unit_type eq "MCS")
- {
- $unit_type_id = 0;
- }
- ## don't want non-hostboot targets
- if ($unit_type_id > 0)
- {
+sub iterateOverChiplets
+{
+ my $self = shift;
+ my $target = shift;
+ my $sys = shift;
+ my $node = shift;
+ my $proc = shift;
+ my $tgt_ptr = $self->getTarget($target);
+ my $tgt_type = $self->getType($target);
- push(@{$self->{targeting}
- ->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{$unit_type}},
- { 'KEY' => $unit });
- my $affinity_path =
- $parent_affinity . "/"
- . $self->getTarget($unit)->{TARGET}->{instance_name};
- my $physical_path =
- $parent_physical . "/"
- . $self->getTarget($unit)->{TARGET}->{instance_name};
- $self->setAttribute($unit, "AFFINITY_PATH",$affinity_path);
- $self->setAttribute($unit, "PHYS_PATH", $physical_path);
- $self->setHuid($unit, 0, $node);
- if ($unit_type eq "OCC")
- {
- $self->setAttribute($unit, "ENTITY_INSTANCE",$proc);
- }
- ## export core
- if ($unit_type eq "EX")
- {
- my $core_unit_num = $self->getAttribute($unit,
- "CHIP_UNIT");
-
- my $core_unit =
- $self->{data}->{TARGETS}{$unit}{CHILDREN}[0];
- push(
- @{
- $self->{targeting}
- ->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{CORE}
- },
- { 'KEY' => $core_unit }
- );
- my $core_affinity_path =
- $affinity_path . "/"
- . $self->getTarget($core_unit)->{TARGET}
- ->{instance_name};
- my $core_physical_path =
- $physical_path . "/"
- . $self->getTarget($core_unit)->{TARGET}
- ->{instance_name};
- $self->setAttribute($core_unit, "AFFINITY_PATH",
- $core_affinity_path);
- $self->setAttribute($core_unit, "PHYS_PATH",
- $core_physical_path);
- $self->setAttribute($core_unit, "CHIP_UNIT",
- $core_unit_num);
- $self->setHuid($core_unit, 0, $node);
- $self->setAttribute($core_unit, "ENTITY_INSTANCE",
- $core_num);
- $core_num++;
- }
- }
- elsif ($unit_type eq "MCS")
- {
- $self->processMcs($unit, $node, $proc, $parent_affinity,
- $parent_physical, $node_phys);
+ my $target_children = $self->getTargetChildren($target);
+ my $prev_target = "PROC";
- }
+ if ($target_children eq "")
+ {
+ return "";
+ }
+ else
+ {
+ foreach my $child (@{ $self->getTargetChildren($target) })
+ {
+ my $unit_ptr = $self->getTarget($child);
+ my $unit_type = $self->getType($child);
+ #System XML has some sensor target as hidden children
+ #of targets. We don't care for sensors in this function
+ #So, we can avoid them with this conditional
+ if ($unit_type ne "NA" && $unit_type ne "FSI" &&
+ $unit_type ne "PCI")
+ {
+ #set common attrs for child
+ $self->setCommonAttrForChiplet($child, $sys, $node, $proc);
+ $self->iterateOverChiplets($child, $sys, $node, $proc);
}
}
}
}
+sub setCommonAttrForChiplet
+{
+ my $self = shift;
+ my $target = shift;
+ my $sys = shift;
+ my $node = shift;
+ my $proc = shift;
+
+ my $tgt_ptr = $self->getTarget($target);
+ my $tgt_type = $self->getType($target);
+
+ push(@{$self->{targeting}
+ ->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{$tgt_type}},
+ { 'KEY' => $target });
+
+ #This is a static variable. Persists over time
+ #everything that is a grand_children of proc
+ state %grand_children;
+ if (not %grand_children)
+ {
+ $grand_children{"EX"} = 1;
+ $grand_children{"CORE"} = 1;
+ $grand_children{"MCS"} = 1;
+ $grand_children{"MCA"} = 1;
+ }
+
+ my $pos = $self->getAttribute($target, "CHIP_UNIT");
+ my $unit_pos = $pos;
+
+ #HB expects chiplets' positions in AFFINITY_PATH to be relative to the
+ #parent, serverwiz outputs it unique/absolute.
+ #Since, in P9, each of the chiplets only have
+ #up to two children (each eq has 2 ex, each ex has 2 cores, each mcbist has
+ #two mcs, etc), we can simply calculate this by (absolute_Pos%2)
+ #CHIP_UNIT is absolute position
+ if ($grand_children{$tgt_type} eq 1)
+ {
+ $unit_pos = $pos%2;
+ }
+
+ my $parent_affinity = $self->getAttribute(
+ $self->getTargetParent($target),"AFFINITY_PATH");
+ my $parent_physical = $self->getAttribute(
+ $self->getTargetParent($target),"PHYS_PATH");
+
+ my $affinity_path = $parent_affinity . "/" . lc $tgt_type ."-". $unit_pos;
+ my $physical_path = $parent_physical . "/" . lc $tgt_type ."-". $unit_pos;
+
+ my $fapi_name = getFapiName($tgt_type, $node, $proc, $pos);
+
+ $self->{huid_idx}->{$tgt_type} = $pos;
+ $self->setHuid($target, $sys, $node);
+ $self->setAttribute($target, "FAPI_NAME", $fapi_name);
+ $self->setAttribute($target, "PHYS_PATH", $physical_path);
+ $self->setAttribute($target, "AFFINITY_PATH", $affinity_path);
+ $self->setAttribute($target, "ORDINAL_ID", $pos);
+ $self->setAttribute($target, "FAPI_POS", $pos);
+ $self->setAttribute($target, "REL_POS", $pos);
+
+ my $pervasive_parent= getPervasiveForUnit("$tgt_type$pos");
+ if ($pervasive_parent ne "")
+ {
+ my $perv_parent_val =
+ "physical:sys-$sys/node-$node/proc-$proc/perv-$pervasive_parent";
+ $self->setAttribute($target, "PARENT_PERVASIVE", $perv_parent_val);
+ }
+}
+
+sub getFapiName
+{
+ my $target = shift;
+ my $node = shift;
+ my $chipPos = shift;
+ my $chipletPos = shift;
+
+ if ($target eq "")
+ {
+ die "getFapiName: ERROR: Please specify a taget name\n";
+ }
+
+ #This is a static variable. Persists over time
+ state %nonFapiTargets;
+ if (not %nonFapiTargets)
+ {
+ $nonFapiTargets{"NODE"} = "NA";
+ $nonFapiTargets{"TPM"} = "NA";
+ $nonFapiTargets{"NVBUS"} = "NA";
+ $nonFapiTargets{"OCC"} = "NA";
+ }
+
+ if ($nonFapiTargets{$target} eq "NA")
+ {
+ return $nonFapiTargets{$target};
+ }
+ elsif ($target eq "SYS")
+ {
+ return "k0";
+ }
+ elsif ($target eq "PROC" || $target eq "DIMM")
+ {
+ if ($node eq "" || $chipPos eq "")
+ {
+ die "getFapiName: ERROR: Must specify node and chipPos for $target
+ current node: $node, chipPos: $chipPos\n";
+ }
+
+ my $chip_name = ($target eq "PROC") ? "pu" : "dimm";
+
+ my $fapi_name = sprintf("%s:k0:n%d:s0:p%02d",$chip_name,$node,$chipPos);
+ return $fapi_name;
+ }
+ else
+ {
+ if ($node eq "" || $chipPos eq "" || $chipletPos eq "")
+ {
+ die "getFapiName: ERROR: Must specify node, chipPos,
+ chipletPos for $target. Current node: $node, chipPos: $chipPos
+ chipletPos: $chipletPos\n";
+ }
+
+ $target = lc $target;
+ my $fapi_name = sprintf("pu.$target:k0:n%d:s0:p%02d:c%d",
+ $node, $chipPos, $chipletPos);
+ return $fapi_name;
+ }
+}
+
+sub getPervasiveForUnit
+{
+ # Input should be of the form <type><chip unit>, example: "core0"
+ my ($unit) = @_;
+
+ # The mapping is a static variable that is preserved across new calls to
+ # the function to speed up the mapping performance
+ state %unitToPervasive;
+
+ if ( not %unitToPervasive )
+ {
+ for my $core (0..MAX_CORE_PER_PROC-1)
+ {
+ $unitToPervasive{"CORE$core"} = PERVASIVE_PARENT_CORE_OFFSET+$core;
+ }
+ for my $eq (0..MAX_EQ_PER_PROC-1)
+ {
+ $unitToPervasive{"EQ$eq"} = PERVASIVE_PARENT_EQ_OFFSET + $eq;
+ }
+ for my $xbus (0..MAX_XBUS_PER_PROC-1)
+ {
+ $unitToPervasive{"XBUS$xbus"} = PERVASIVE_PARENT_XBUS_OFFSET;
+ }
+ for my $obus (0..MAX_OBUS_PER_PROC-1)
+ {
+ $unitToPervasive{"OBUS$obus"} = PERVASIVE_PARENT_OBUS_OFFSET+$obus;
+ }
+ for my $capp (0..MAX_CAPP_PER_PROC-1)
+ {
+ $unitToPervasive{"CAPP$capp"} = 2 * ($capp+1);
+ }
+ for my $mcbist (0..MAX_MCBIST_PER_PROC-1)
+ {
+ $unitToPervasive{"MCBIST$mcbist"} =
+ PERVASIVE_PARENT_MCBIST_OFFSET + $mcbist;
+ }
+ for my $mcs (0..MAX_MCS_PER_PROC-1)
+ {
+ $unitToPervasive{"MCS$mcs"} =
+ PERVASIVE_PARENT_MCS_OFFSET + ($mcs > 1);
+ }
+ for my $mca (0..MAX_MCA_PER_PROC-1)
+ {
+ $unitToPervasive{"MCA$mca"} =
+ PERVASIVE_PARENT_MCA_OFFSET + ($mca > 3);
+ }
+ for my $pec (0..MAX_PEC_PER_PROC-1)
+ {
+ $unitToPervasive{"PEC$pec"} =
+ PERVASIVE_PARENT_PEC_OFFSET + $pec;
+ }
+ for my $phb (0..MAX_PHB_PER_PROC-1)
+ {
+ $unitToPervasive{"PHB$phb"} =
+ PERVASIVE_PARENT_PHB_OFFSET + ($phb>0) + ($phb>2);
+ }
+ for my $nv (0..MAX_NV_PER_PROC-1)
+ {
+ $unitToPervasive{"NV$nv"} = PERVASIVE_PARENT_NV_OFFSET;
+ }
+ }
+
+ my $pervasive = "";
+ if(exists $unitToPervasive{$unit})
+ {
+ $pervasive = $unitToPervasive{$unit};
+ }
+
+ return $pervasive
+}
+sub processDimms
+{
+ my $self = shift;
+ my $ddrs = shift;
+ my $sys = shift;
+ my $node_phys = shift;
+ my $node = shift;
+ my $proc = shift;
+
+ if ($ddrs ne "")
+ {
+ #There should be 2 Connections
+ #Each MCA has 2 ddr channels
+ 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};
+
+ #proc->mcbist->mcs->mca->ddr
+ my $mca_target = $self->getTargetParent($ddr);
+ my $mcs_target = $self->getTargetParent($mca_target);
+ my $mcbist_target = $self->getTargetParent($mcs_target);
+ my $proc_target = $self->getTargetParent($mcbist_target);
+ my $dimm_connector_tgt = $self->getTargetParent($dimm);
+
+ my $mca = $self->getAttribute($mca_target, "CHIP_UNIT");
+ my $mcs = $self->getAttribute($mcs_target, "CHIP_UNIT");
+ my $mcbist = $self->getAttribute($mcbist_target, "CHIP_UNIT");
+ my $dimm_pos= $self->getAttribute($dimm_connector_tgt, "POSITION");
+
+ $dimm_pos = ($dimm_pos*2) + $port_num;
+
+ $self->setAttribute($dimm, "AFFINITY_PATH",
+ $self->getAttribute($mcbist_target, "AFFINITY_PATH")
+ . "/mcs-$mcs/mca-$mca/dimm-$port_num"
+ );
+
+ $self->setAttribute($dimm, "PHYS_PATH",
+ $node_phys . "/dimm-" . $dimm_pos);
+
+ my $type = $self->getType($dimm);
+
+ $self->setAttribute($dimm,"FAPI_NAME",
+ getFapiName($type, $node, $dimm_pos));
+
+ $self->setAttribute($dimm, "FAPI_POS", $dimm_pos);
+ $self->setAttribute($dimm, "ORDINAL_ID",$dimm_pos);
+ $self->setAttribute($dimm, "POSITION", $dimm_pos);
+ $self->setAttribute($dimm, "VPD_REC_NUM", $dimm_pos);
+
+ $self->{huid_idx}->{$type} = $dimm_pos;
+ $self->setHuid($dimm, $sys, $node);
+
+ $self->{targeting}
+ ->{SYS}[0]{NODES}[$node]{PROCS}[$proc]{MCBISTS}[$mcbist]
+ {MCSS}[$mcs]{MCAS}[$mca]{DIMMS}[$dimm_pos]{KEY}
+ = $dimm;
+ }
+
+ }
+
+}
sub processMcs
{
+#@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 $parent_affinity = shift;
my $parent_physical = shift;
my $node_phys = shift;
@@ -646,12 +1048,12 @@ sub processMcs
$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]{PROCS}[$proc]{MCSS}[$mcs]{KEY} =
- $unit;
+ $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");
+# $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];
@@ -719,7 +1121,8 @@ sub processMcs
$self->setHuid($child, 0, $node);
}
- if ($self->getType($child) eq "MBA")
+
+ if ($self->getType($child) eq "MCA")
{
my $mba = $self->getAttribute($child,"MBA_NUM");
$self->setAttribute($child, "AFFINITY_PATH",
@@ -732,9 +1135,10 @@ sub processMcs
{MBAS}[$mba]{KEY} = $child;
## Trace the DDR busses to find connected DIMM
- my $ddrs = $self->findConnections($child,"DDR3","");
+ my $ddrs = $self->findConnections($child,"DDR4","");
if ($ddrs ne "")
{
+
my $affinitypos=0;
foreach my $dimms (@{$ddrs->{CONN}})
{
@@ -771,6 +1175,7 @@ sub processMcs
}
}
}
+=cut
}
sub setFsiAttributes
@@ -808,7 +1213,6 @@ sub setFsiAttributes
$self->setAttribute($target, "ALTFSI_MASTER_PORT", $fsi_port);
}
- #my $phys_path = $targetObj->getAttribute($parentTarget, "PHYS_PATH");
$self->setAttributeField($target, "FSI_OPTION_FLAGS","flipPort",
$flip_port);
$self->setAttributeField($target, "FSI_OPTION_FLAGS","reserved", "0");
@@ -928,10 +1332,10 @@ sub findConnections
my $target = shift;
my $bus_type = shift;
my $end_type = shift;
-
my %connections;
my $num=0;
my $target_children = $self->getTargetChildren($target);
+
if ($target_children eq "")
{
return "";
@@ -949,6 +1353,7 @@ sub findConnections
my $type = $self->getMrwType($dest_parent);
my $dest_type = $self->getType($dest_parent);
my $dest_class = $self->getAttribute($dest_parent,"CLASS");
+
if ($type eq "NA")
{
$type = $dest_type;
@@ -1184,6 +1589,8 @@ sub setAttributeField
my $value = shift;
$self->{data}->{TARGETS}->{$target}->{ATTRIBUTES}->{$attribute}->{default}
->{field}->{$field}->{value} = $value;
+
+ $self->log($target, "Setting Attribute: $attribute ($field) =$value");
}
## returns complex attribute value
sub getAttributeField
diff --git a/src/usr/targeting/common/processMrw.pl b/src/usr/targeting/common/processMrw.pl
index 6086371..f898500 100644
--- a/src/usr/targeting/common/processMrw.pl
+++ b/src/usr/targeting/common/processMrw.pl
@@ -107,10 +107,6 @@ foreach my $target (sort keys %{ $targetObj->getAllTargets() })
{
processMembuf($targetObj, $target);
}
- elsif ($type eq "FSP")
- {
- processBmc($targetObj, $target);
- }
elsif ($type eq "APSS")
{
processApss($targetObj, $target);
@@ -119,7 +115,6 @@ foreach my $target (sort keys %{ $targetObj->getAllTargets() })
processIpmiSensors($targetObj,$target);
}
-
## check topology
foreach my $n (keys %{$targetObj->{TOPOLOGY}}) {
foreach my $p (keys %{$targetObj->{TOPOLOGY}->{$n}}) {
@@ -386,48 +381,29 @@ sub convertNegativeNumbers
$targetObj->setAttribute($target,$attribute,$new_offset)
}
-sub processBmc
-{
- my $targetObj = shift;
- my $target = shift;
- my $i2cs=$targetObj->findConnections($target,"I2C","PROC");
- if ($i2cs ne "")
- {
- foreach my $i2c (@{$i2cs->{CONN}})
- {
- my $addr=$targetObj->getBusAttribute(
- $i2c->{SOURCE},$i2c->{BUS_NUM},"I2C_ADDRESS");
- $targetObj->setAttribute(
- $i2c->{DEST_PARENT},"I2C_SLAVE_ADDRESS",$addr);
- }
- }
- my $lpcs=$targetObj->findConnections($target,"LPC","PROC");
- if ($lpcs ne "")
- {
- my $lpc=$lpcs->{CONN}->[0];
- $targetObj->setMasterProc($lpc->{DEST_PARENT});
- }
-}
-
-
sub parseBitwise
{
my $targetObj = shift;
my $target = shift;
my $attribute = shift;
-
my $mask = 0;
- foreach my $e (keys %{ $targetObj->getEnumHash($attribute) }) {
- my $field = $targetObj->getAttributeField(
- $target,$attribute."_BITMASK",$e);
- my $val=hex($targetObj->getEnumValue($attribute,$e));
- if ($field eq "true")
+
+ #if CDM_POLICIES_BITMASK is not a bad attribute, aka if it is defined
+ if (!$targetObj->isBadAttribute($target, $attribute."_BITMASK"))
+ {
+ foreach my $e (keys %{ $targetObj->getEnumHash($attribute)})
{
- $mask=$mask | $val;
+ my $field = $targetObj->getAttributeField(
+ $target,$attribute."_BITMASK",$e);
+ my $val=hex($targetObj->getEnumValue($attribute,$e));
+ if ($field eq "true")
+ {
+ $mask=$mask | $val;
+ }
}
+ $targetObj->setAttribute($target,$attribute,$mask);
}
- $targetObj->setAttribute($target,$attribute,$mask);
- }
+}
#--------------------------------------------------
## Processor
##
@@ -455,7 +431,10 @@ sub processProcessor
foreach my $attr (sort (keys
%{ $targetObj->getTarget($module_target)->{TARGET}->{attribute} }))
{
- $targetObj->copyAttribute($module_target,$target,$attr);
+ if (($attr ne "TYPE") && ($attr ne "PHYS_PATH"))
+ {
+ $targetObj->copyAttribute($module_target,$target,$attr);
+ }
}
## Copy PCIE attributes from socket
@@ -473,11 +452,22 @@ sub processProcessor
}
}
+ $targetObj->log($target,"Finding master proc");
+ my $lpcs=$targetObj->findConnections($target,"LPC","FSP");
+ if ($lpcs ne "")
+ {
+ $targetObj->log ($target, "Setting master proc to $target");
+ $targetObj->setMasterProc($target);
+ }
+
$targetObj->log($target, "Processing PROC");
foreach my $child (@{ $targetObj->getTargetChildren($target) })
{
- $targetObj->log($target, "Processing PROC child: $child");
my $child_type = $targetObj->getType($child);
+
+ $targetObj->log($target,
+ "Processing PROC child: $child Type: $child_type");
+
if ($child_type eq "NA" || $child_type eq "FSI")
{
$child_type = $targetObj->getMrwType($child);
@@ -498,12 +488,13 @@ sub processProcessor
{
foreach my $pci_child (@{ $targetObj->getTargetChildren($child) })
{
- processPcie($targetObj, $pci_child, $target);
+ #@TODO RTC:161404
+ #processPcie($targetObj, $pci_child, $target);
}
}
- elsif ($child_type eq "MCS")
+ elsif ($child_type eq "MCBIST")
{
- processMcs($targetObj, $child, $target);
+ processMcbist($targetObj, $child, $target);
}
elsif ($child_type eq "OCC")
{
@@ -589,10 +580,14 @@ sub processI2cSpeeds
$i2c->{SOURCE},"I2C_ENGINE"));
my $bus_speed=$targetObj->getBusAttribute(
$i2c->{SOURCE},$i2c->{BUS_NUM},"I2C_SPEED");
+
+ #@todo RTC:164224 > currently the bus_speed fields are empty in the xml
+=begin
if ($bus_speed eq "" || $bus_speed==0) {
print "ERROR: I2C bus speed not defined for $i2c->{SOURCE}\n";
$targetObj->myExit(3);
}
+=cut
## choose lowest bus speed
if ($bus_speeds[$engine][$port] eq "" ||
$bus_speeds[$engine][$port]==0 ||
@@ -640,7 +635,7 @@ sub setupBars
"NVIDIA_NPU_PRIVILEGED_ADDR","NVIDIA_NPU_USER_REG_ADDR",
"NVIDIA_PHY0_REG_ADDR","NVIDIA_PHY1_REG_ADDR",
"XIVE_CONTROLLER_BAR_ADDR","XIVE_PRESENTATION_BAR_ADDR",
- "PSI_HB_ESP_ADDR","NX_RNG_ADDR");
+ "NX_RNG_ADDR");
# Attribute only valid in naples-based systems
if (!$targetObj->isBadAttribute($target,"NPU_MMIO_BAR_BASE_ADDR") ) {
@@ -689,26 +684,71 @@ sub processMcs
my $targetObj = shift;
my $target = shift;
my $parentTarget = shift;
+ my $group = shift;
+ my $proc = shift;
+
+#@TODO RTC:163874 -- maybe needed for centaur support
+
+
+# my ($base,$group_offset,$proc_offset,$offset) = split(/,/,
+# $targetObj->getAttribute($target,"IBSCOM_MCS_BASE_ADDR"));
+# my $i_base = Math::BigInt->new($base);
+# my $i_node_offset = Math::BigInt->new($group_offset);
+# my $i_proc_offset = Math::BigInt->new($proc_offset);
+# my $i_offset = Math::BigInt->new($offset);
+
+# my $mcs = $targetObj->getAttribute($target, "MCS_NUM");
+# #Note: Hex convert method avoids overflow on 32bit machines
+# my $mcsStr=sprintf("0x%016s",substr((
+# $i_base+$i_node_offset*$group+
+# $i_proc_offset*$proc+$i_offset*$mcs)->as_hex(),2));
+# $targetObj->setAttribute($target, "IBSCOM_MCS_BASE_ADDR", $mcsStr);
+}
+
+
+## MCBIST
+sub processMcbist
+{
+ my $targetObj = shift;
+ my $target = shift;
+ my $parentTarget = shift;
my $group = $targetObj->getAttribute($parentTarget, "FABRIC_GROUP_ID");
my $proc = $targetObj->getAttribute($parentTarget, "FABRIC_CHIP_ID");
+#@TODO RTC:163874 -- maybe needed for centaur support
+# my ($base,$group_offset,$proc_offset,$offset) = split(/,/,
+# $targetObj->getAttribute($target,"IBSCOM_MCS_BASE_ADDR"));
+# my $i_base = Math::BigInt->new($base);
+# my $i_node_offset = Math::BigInt->new($group_offset);
+# my $i_proc_offset = Math::BigInt->new($proc_offset);
+# my $i_offset = Math::BigInt->new($offset);
- my ($base,$group_offset,$proc_offset,$offset) = split(/,/,
- $targetObj->getAttribute($target,"IBSCOM_MCS_BASE_ADDR"));
- my $i_base = Math::BigInt->new($base);
- my $i_node_offset = Math::BigInt->new($group_offset);
- my $i_proc_offset = Math::BigInt->new($proc_offset);
- my $i_offset = Math::BigInt->new($offset);
-
- my $mcs = $targetObj->getAttribute($target, "MCS_NUM");
- #Note: Hex convert method avoids overflow on 32bit machines
- my $mcsStr=sprintf("0x%016s",substr((
- $i_base+$i_node_offset*$group+
- $i_proc_offset*$proc+$i_offset*$mcs)->as_hex(),2));
- $targetObj->setAttribute($target, "IBSCOM_MCS_BASE_ADDR", $mcsStr);
-}
+ foreach my $child (@{ $targetObj->getTargetChildren($target) })
+ {
+ my $child_type = $targetObj->getType($child);
+
+ $targetObj->log($target,
+ "Processing MCBIST child: $child Type: $child_type");
+ if ($child_type eq "NA" || $child_type eq "FSI")
+ {
+ $child_type = $targetObj->getMrwType($child);
+ }
+ if ($child_type eq "MCS")
+ {
+ processMcs($targetObj, $child, $target, $group, $proc);
+ }
+ }
+
+#@TODO RTC:163874 -- maybe needed for centaur support
+# my $mcs = $targetObj->getAttribute($target, "MCS_NUM");
+# #Note: Hex convert method avoids overflow on 32bit machines
+# my $mcsStr=sprintf("0x%016s",substr((
+# $i_base+$i_node_offset*$group+
+# $i_proc_offset*$proc+$i_offset*$mcs)->as_hex(),2));
+# $targetObj->setAttribute($target, "IBSCOM_MCS_BASE_ADDR", $mcsStr);
+}
#--------------------------------------------------
## XBUS
##
@@ -1091,8 +1131,6 @@ sub processMembufVpdAssociation
foreach my $group_assoc (@{$group_assocs->{CONN}}) {
my $mb_target = $group_assoc->{DEST_PARENT};
my $group_target = $targetObj->getTargetParent($mb_target);
- setEepromAttributes($targetObj,
- "EEPROM_VPD_PRIMARY_INFO",$group_target,$vpd);
$targetObj->setAttribute($group_target,
"VPD_REC_NUM",$targetObj->{vpd_num});
}
@@ -1107,7 +1145,7 @@ sub processMembufVpdAssociation
## Finds I2C connections to DIMM and creates EEPROM attributes
## FYI: I had to handle DMI busses in framework because they
## define affinity path
-
+#@TODO RTC:163874 -- centaur support
sub processMembuf
{
my $targetObj = shift;
@@ -1188,7 +1226,8 @@ sub processMembuf
"MRW_MEM_SENSOR_CACHE_ADDR_MAP","0x".join("",@addr_map));
## Update bus speeds
- processI2cSpeeds($targetObj,$target);
+ #@TODO RTC:163874 -- centaur support
+ #processI2cSpeeds($targetObj,$target);
## Do MBA port mapping
my %mba_port_map;
@@ -1307,11 +1346,9 @@ sub errorCheck
## also error checking after processing is complete vs during
## processing is easier
my %attribute_checks = (
- SYS => ['SYSTEM_NAME','OPAL_MODEL'],
- PROC_MASTER => ['I2C_SLAVE_ADDRESS'],
- PROC => ['FSI_MASTER_CHIP','I2C_SLAVE_ADDRESS'],
- MEMBUF => [ 'PHYS_PATH', 'EI_BUS_TX_MSBSWAP', 'FSI_MASTER_PORT|0xFF' ],
- DIMM => ['EEPROM_VPD_PRIMARY_INFO/devAddr'],
+ SYS => ['SYSTEM_NAME'],#'OPAL_MODEL'],
+ PROC => ['FSI_MASTER_CHIP', 'EEPROM_VPD_PRIMARY_INFO/devAddr'],
+ MEMBUF => [ 'PHYS_PATH', 'EI_BUS_TX_MSBSWAP', 'FSI_MASTER_PORT|0xFF' ],
);
my %error_msg = (
'EEPROM_VPD_PRIMARY_INFO/devAddr' =>
@@ -1321,14 +1358,9 @@ sub errorCheck
'EI_BUS_TX_MSBSWAP' =>
'DMI connection is missing to this membuf from processor',
'PHYS_PATH' =>'DMI connection is missing to this membuf from processor',
- 'I2C_SLAVE_ADDRESS' =>'I2C connection is missing from BMC to processor',
);
my @errors;
- if ($targetObj->getMasterProc() eq $target)
- {
- $type = "PROC_MASTER";
- }
foreach my $attr (@{ $attribute_checks{$type} })
{
my ($a, $v) = split(/\|/, $attr);
diff --git a/src/usr/targeting/common/xmltohb/attribute_types.xml b/src/usr/targeting/common/xmltohb/attribute_types.xml
index b98d4e2..8f61774 100644
--- a/src/usr/targeting/common/xmltohb/attribute_types.xml
+++ b/src/usr/targeting/common/xmltohb/attribute_types.xml
@@ -16333,7 +16333,7 @@ Measured in GB</description>
<name>PD_AND_STR</name>
<value>3</value>
</enumerator>
- <default>NONE</default>
+ <default>OFF</default>
</enumerationType>
<attribute>
diff --git a/src/usr/targeting/common/xmltohb/target_types.xml b/src/usr/targeting/common/xmltohb/target_types.xml
index 573a428..315fb65 100755
--- a/src/usr/targeting/common/xmltohb/target_types.xml
+++ b/src/usr/targeting/common/xmltohb/target_types.xml
@@ -527,6 +527,11 @@
</targetType>
<targetType>
+ <id>lcard-dimm-ddr4</id>
+ <parent>lcard-dimm</parent>
+</targetType>
+
+<targetType>
<id>occ</id>
<parent>unit</parent>
<attribute>
@@ -930,6 +935,7 @@
<attribute><id>MRW_DDR4_VDDR_MAX_LIMIT_EFF_CONFIG</id></attribute>
<attribute><id>HDAT_HBRT_NUM_SECTIONS</id></attribute>
<attribute><id>HDAT_HBRT_SECTION_SIZE</id></attribute>
+ <attribute><id>VPD_REC_NUM</id></attribute>
</targetType>
<!-- chip-tpm-cectpm -->
--
1.8.2.2