summaryrefslogtreecommitdiffstats
path: root/src/usr/targeting
diff options
context:
space:
mode:
authorNorman James <njames@us.ibm.com>2015-02-19 22:16:06 -0600
committerA. Patrick Williams III <iawillia@us.ibm.com>2015-02-24 16:27:55 -0600
commit7894fc7b2f7e848267b4f3666f5d8410ea9b894a (patch)
tree8589f0ee11c00e47fb0609bdc151facc3baa9528 /src/usr/targeting
parente56b9afb738e9aea6af2589fd1f56d3d2ba77f5d (diff)
downloadtalos-hostboot-7894fc7b2f7e848267b4f3666f5d8410ea9b894a.tar.gz
talos-hostboot-7894fc7b2f7e848267b4f3666f5d8410ea9b894a.zip
Serverwiz: Model ipmi sensors as targets
Fixed APSS modeling Change-Id: I09c95f470ca4748eeed568b71dc1c8b6e1c3ab76 Reviewed-on: http://gfw160.aus.stglabs.ibm.com:8080/gerrit/15848 Tested-by: Jenkins Server Reviewed-by: A. Patrick Williams III <iawillia@us.ibm.com>
Diffstat (limited to 'src/usr/targeting')
-rw-r--r--src/usr/targeting/common/Targets.pm27
-rw-r--r--src/usr/targeting/common/processMrw.pl251
2 files changed, 215 insertions, 63 deletions
diff --git a/src/usr/targeting/common/Targets.pm b/src/usr/targeting/common/Targets.pm
index 3cb519ea0..eb1ea1f86 100644
--- a/src/usr/targeting/common/Targets.pm
+++ b/src/usr/targeting/common/Targets.pm
@@ -47,6 +47,7 @@ sub new
NUM_PROCS => 0,
TOP_LEVEL => "sys-0",
TOPOLOGY => undef,
+ report_log => "",
DMI_FSI_MAP => {
'0' => '3',
'1' => '2',
@@ -89,6 +90,8 @@ sub loadXML
$self->storeEnumerations();
$self->buildHierarchy($self->{TOP_LEVEL});
$self->buildAffinity();
+ $self->{report_filename}=$filename.".rpt";
+ $self->{report_filename}=~s/\.xml//g;
}
################################################
@@ -195,7 +198,10 @@ sub printAttribute
$filter{IPMI_INSTANCE} = 1;
$filter{IPMI_NAME} = 1;
$filter{INSTANCE_ID} = 1;
- $filter{ADC_CHANNEL_SENSOR_NUMBERS} = 1;
+ #$filter{ADC_CHANNEL_SENSOR_NUMBERS} = 1;
+ $filter{IO_CONFIG_SELECT} = 1;
+ #$filter{FRU_ID} = 1;
+ $filter{FRU_NAME} = 1;
if ($filter{$attribute} == 1)
{
@@ -1011,6 +1017,10 @@ sub getAttribute
#print Dumper($target_ptr);
$self->myExit(4);
}
+ if (ref($target_ptr->{ATTRIBUTES}->{$attribute}->{default}) eq "HASH")
+ {
+ return "";
+ }
return $target_ptr->{ATTRIBUTES}->{$attribute}->{default};
}
## renames a target attribute
@@ -1246,6 +1256,21 @@ sub log
print "DEBUG: ($target) $msg\n";
}
}
+sub writeReport
+{
+ my $self = shift;
+ my $msg = shift;
+ $self->{report_log}=$self->{report_log}.$msg;
+}
+sub writeReportFile
+{
+ my $self = shift;
+ open(R,">$self->{report_filename}") ||
+ die "Unable to create file: ".$self->{report_filename};
+ print R $self->{report_log};
+ close R;
+}
+
1;
=head1 NAME
diff --git a/src/usr/targeting/common/processMrw.pl b/src/usr/targeting/common/processMrw.pl
index 6b685dbde..071506ebd 100644
--- a/src/usr/targeting/common/processMrw.pl
+++ b/src/usr/targeting/common/processMrw.pl
@@ -76,6 +76,15 @@ $targetObj->setVersion($VERSION);
my $xmldir = dirname($serverwiz_file);
$targetObj->loadXML($serverwiz_file);
+
+
+my $str=sprintf(" %30s | %10s | %6s | %4s | %4s | %4s | %4s | %s\n",
+ "Sensor Name","FRU Name","Ent ID","Type","ID","Inst","FRU","Target");
+$targetObj->writeReport($str);
+$str=sprintf(" %30s | %10s | %6s | %4s | %4s | %4s | %4s | %s\n",
+ "------------------------------","----------",
+ "------","----","----","----","----","----------");
+$targetObj->writeReport($str);
#--------------------------------------------------
## loop through all targets and do stuff
foreach my $target (sort keys %{ $targetObj->getAllTargets() })
@@ -97,6 +106,12 @@ foreach my $target (sort keys %{ $targetObj->getAllTargets() })
{
processBmc($targetObj, $target);
}
+ elsif ($type eq "APSS")
+ {
+ processApss($targetObj, $target);
+ }
+
+ processIpmiSensors($targetObj,$target);
}
@@ -132,63 +147,16 @@ $targetObj->printXML($xml_fh, "top");
close $xml_fh;
if (!$targetObj->{errorsExist})
{
- print "MRW created successfully!\n";
-}
-
-
-## optionally print out report
-if ($report)
-{
- my $report_file = $xmldir . "/" . $targetObj->getSystemName() . ".rpt";
- open(SUM,">$report_file") || die "Unable to create: $report_file\n";
- my $ref = $targetObj->{targeting}->{SYS}[0]{NODES}[0]{PROCS};
- foreach my $proc (@{$ref})
+ ## optionally print out report
+ if ($report)
{
- foreach my $mcs (@{$proc->{MCSS}})
- {
- my $mcs_target = $mcs->{KEY};
- my $membuf=$mcs->{MEMBUFS}[0];
- my $membuf_target = $membuf->{KEY};
-
- my $sch = $targetObj->getAttribute($mcs_target,
- "SCHEMATIC_INTERFACE");
- my $aff = $targetObj->getAttribute($mcs_target,"AFFINITY_PATH");
- my $huid = $targetObj->getAttribute($mcs_target,"HUID");
- print SUM "$sch | $huid | $mcs_target | $aff\n";
- if ($membuf_target ne "") {
- foreach my $mba (@{$membuf->{MBAS}}) {
- my $mba_target = $mba->{KEY};
-
- $huid = $targetObj->getAttribute($mba_target,"HUID");
- $aff = $targetObj->getAttribute($mcs_target,
- "AFFINITY_PATH");
- print SUM "\t | $huid | $mba_target | $aff\n";
- foreach my $dimm (@{$mba->{DIMMS}}) {
- my $dimm_target = $dimm->{KEY};
- $aff = $targetObj->getAttribute($dimm_target,
- "AFFINITY_PATH");
- $huid = $targetObj->getAttribute($dimm_target,"HUID");
- my $p = $targetObj->getAttribute($dimm_target,
- "MBA_PORT");
- my $d = $targetObj->getAttribute($dimm_target,
- "MBA_DIMM");
- my $i2c = $targetObj->getAttributeField($dimm_target,
- "EEPROM_VPD_PRIMARY_INFO","devAddr");
- my $sens = $targetObj->getAttribute($dimm_target,
- "IPMI_SENSORS");
- my @s = split(/\,/,$sens);
-
- print SUM "\t\t$huid | $dimm_target".
- " | $aff | $p | $d | $i2c | ".
- "$s[0],$s[1] | $s[2],$s[3]\n";
- }
- }
- }
- }
+ print "Writing report to: ".$targetObj->{report_filename}."\n";
+ $targetObj->writeReportFile();
}
- close SUM;
+ print "MRW created successfully!\n";
}
+
#--------------------------------------------------
#--------------------------------------------------
## Processing subroutines
@@ -209,9 +177,174 @@ sub processSystem
$targetObj->setAttribute($target, "MAX_PROC_CHIPS_PER_NODE",
$targetObj->{NUM_PROCS_PER_NODE});
parseBitwise($targetObj,$target,"CDM_POLICIES");
- convertNegativeNumbers($targetObj,$target,"ADC_CHANNEL_OFFSETS",32);
+
+}
+
+sub processIpmiSensors {
+ my $targetObj=shift;
+ my $target=shift;
+
+ if ($targetObj->isBadAttribute($target,"IPMI_INSTANCE") ||
+ $targetObj->getMrwType($target) eq "IPMI_SENSOR" ||
+ $targetObj->getTargetChildren($target) eq "")
+ {
+ return;
+ }
+
+ my $instance=$targetObj->getAttribute($target,"IPMI_INSTANCE");
+ my $name="";
+ if (!$targetObj->isBadAttribute($target,"IPMI_NAME"))
+ {
+ $name=$targetObj->getAttribute($target,"IPMI_NAME");
+ }
+ my $fru_id="N/A";
+ if (!$targetObj->isBadAttribute($target,"FRU_ID"))
+ {
+ $fru_id=$targetObj->getAttribute($target,"FRU_ID");
+ }
+ my @sensors;
+
+ foreach my $child (@{$targetObj->getTargetChildren($target)})
+ {
+ if ($targetObj->getMrwType($child) eq "IPMI_SENSOR")
+ {
+ my $entity_id=$targetObj->
+ getAttribute($child,"IPMI_ENTITY_ID");
+ my $sensor_type=$targetObj->
+ getAttribute($child,"IPMI_SENSOR_TYPE");
+ my $name_suffix=$targetObj->
+ getAttribute($child,"IPMI_SENSOR_NAME_SUFFIX");
+ my $sensor_id=$targetObj->
+ getAttribute($child,"IPMI_SENSOR_ID");
+
+ $name_suffix=~s/\n//g;
+ $name_suffix=~s/\s+//g;
+ $name_suffix=~s/\t+//g;
+ my $sensor_name=$name_suffix;
+ if ($name ne "")
+ {
+ $sensor_name=$name."_".$name_suffix;
+ }
+ my $attribute_name="";
+ my $s=sprintf("0x%02X%02X,0x%02X",
+ oct($sensor_type),oct($entity_id),oct($sensor_id));
+ push(@sensors,$s);
+ my $sensor_id_str = "";
+ if ($sensor_id ne "")
+ {
+ $sensor_id_str = sprintf("0x%02X",oct($sensor_id));
+ }
+ my $str=sprintf(
+ " %30s | %10s | 0x%02X | 0x%02X | %4s | %4d | %4d | %s\n",
+ $sensor_name,$name,oct($entity_id),oct($sensor_type),
+ $sensor_id_str,$instance,$fru_id,$target);
+ $targetObj->writeReport($str);
+ }
+ }
+ for (my $i=@sensors;$i<16;$i++)
+ {
+ push(@sensors,"0xFFFF,0xFF");
+ }
+ my @sensors_sort = sort(@sensors);
+ $targetObj->setAttribute($target,
+ "IPMI_SENSORS",join(',',@sensors_sort));
+
}
+sub processApss {
+ my $targetObj=shift;
+ my $target=shift;
+
+ my $systemTarget = $targetObj->getTargetParent($target);
+ my @sensors;
+ my @channel_ids;
+ my @channel_offsets;
+ my @channel_gains;
+ my @channel_grounds;
+
+ foreach my $child (@{$targetObj->getTargetChildren($target)})
+ {
+ if ($targetObj->getMrwType($child) eq "APSS_SENSOR")
+ {
+ my $entity_id=$targetObj->
+ getAttribute($child,"IPMI_ENTITY_ID");
+ my $sensor_type=$targetObj->
+ getAttribute($child,"IPMI_SENSOR_TYPE");
+ my $name=$targetObj->
+ getAttribute($child,"IPMI_SENSOR_NAME_SUFFIX");
+ my $sensor_id=$targetObj->
+ getAttribute($child,"IPMI_SENSOR_ID");
+ my $channel = $targetObj->
+ getAttribute($child,"ADC_CHANNEL_ASSIGNMENT");
+ my $channel_id = $targetObj->
+ getAttribute($child,"ADC_CHANNEL_ID");
+ my $channel_gain = $targetObj->
+ getAttribute($child,"ADC_CHANNEL_GAIN");
+ my $channel_offset = $targetObj->
+ getAttribute($child,"ADC_CHANNEL_OFFSET");
+ my $channel_ground = $targetObj->
+ getAttribute($child,"ADC_CHANNEL_GROUND");
+
+ $name=~s/\n//g;
+ $name=~s/\s+//g;
+ $name=~s/\t+//g;
+
+ my $sensor_id_str = "";
+ if ($sensor_id ne "")
+ {
+ $sensor_id_str = sprintf("0x%02X",oct($sensor_id));
+ }
+ if ($channel ne "")
+ {
+ $sensors[$channel] = $sensor_id_str;
+ $channel_ids[$channel] = $channel_id;
+ $channel_grounds[$channel] = $channel_ground;
+ $channel_offsets[$channel] = $channel_offset;
+ $channel_gains[$channel] = $channel_gain;
+ }
+ my $str=sprintf(
+ " %30s | %10s | 0x%02X | 0x%02X | %4s | %4d | %4d | %s\n",
+ $name,"",oct($entity_id),oct($sensor_type),
+ $sensor_id_str,$channel,"",$systemTarget);
+ $targetObj->writeReport($str);
+ }
+ }
+ for (my $i=0;$i<16;$i++)
+ {
+ if ($sensors[$i] eq "")
+ {
+ $sensors[$i]="0x00";
+ }
+ if ($channel_ids[$i] eq "")
+ {
+ $channel_ids[$i]="0";
+ }
+ if ($channel_grounds[$i] eq "")
+ {
+ $channel_grounds[$i]="0";
+ }
+ if ($channel_gains[$i] eq "")
+ {
+ $channel_gains[$i]="0";
+ }
+ if ($channel_offsets[$i] eq "")
+ {
+ $channel_offsets[$i]="0";
+ }
+ }
+ $targetObj->setAttribute($systemTarget,
+ "ADC_CHANNEL_FUNC_IDS",join(',',@channel_ids));
+ $targetObj->setAttribute($systemTarget,
+ "ADC_CHANNEL_SENSOR_NUMBERS",join(',',@sensors));
+ $targetObj->setAttribute($systemTarget,
+ "ADC_CHANNEL_GNDS",join(',',@channel_grounds));
+ $targetObj->setAttribute($systemTarget,
+ "ADC_CHANNEL_GAINS",join(',',@channel_gains));
+ $targetObj->setAttribute($systemTarget,
+ "ADC_CHANNEL_OFFSETS",join(',',@channel_offsets));
+
+ convertNegativeNumbers($targetObj,$systemTarget,"ADC_CHANNEL_OFFSETS",32);
+}
sub convertNegativeNumbers
{
my $targetObj=shift;
@@ -293,8 +426,6 @@ sub processProcessor
my $socket_target =
$targetObj->getTargetParent($targetObj->getTargetParent($target));
$targetObj->copyAttribute($socket_target,$target,"LOCATION_CODE");
- $targetObj->copyAttribute($socket_target,$target,"FRU_ID");
-
foreach my $attr (sort (keys
%{ $targetObj->getTarget($socket_target)->{TARGET}->{attribute} }))
@@ -562,12 +693,8 @@ sub processAbus
# copy Abus attributes to proc
my $abus = $targetObj->getFirstConnectionBus($target);
- $targetObj->setAttribute($target, "EI_BUS_TX_LANE_INVERT",
- $abus->{bus_attribute}->{SOURCE_TX_LANE_INVERT}->{default});
$targetObj->setAttribute($target, "EI_BUS_TX_MSBSWAP",
$abus->{bus_attribute}->{SOURCE_TX_MSBSWAP}->{default});
- $targetObj->setAttribute($abus_child_conn, "EI_BUS_TX_LANE_INVERT",
- $abus->{bus_attribute}->{DEST_TX_LANE_INVERT}->{default});
$targetObj->setAttribute($abus_child_conn, "EI_BUS_TX_MSBSWAP",
$abus->{bus_attribute}->{DEST_TX_MSBSWAP}->{default});
$found_abus = 1;
@@ -845,8 +972,8 @@ sub processMembufVpdAssociation
my $membuf_target = $membuf_assoc->{DEST_PARENT};
setEepromAttributes($targetObj,
"EEPROM_VPD_PRIMARY_INFO",$membuf_target,$vpd);
- setEepromAttributes($targetObj,
- "EEPROM_VPD_FRU_INFO",$membuf_target,$vpd,"0++");
+ #setEepromAttributes($targetObj,
+ # "EEPROM_VPD_FRU_INFO",$membuf_target,$vpd,"0++");
my $index = $targetObj->getBusAttribute($membuf_assoc->{SOURCE},
$membuf_assoc->{BUS_NUM}, "ISDIMM_MBVPD_INDEX");
$targetObj->setAttribute(
OpenPOWER on IntegriCloud