diff options
author | Norman James <njames@us.ibm.com> | 2015-02-19 22:16:06 -0600 |
---|---|---|
committer | A. Patrick Williams III <iawillia@us.ibm.com> | 2015-02-24 16:27:55 -0600 |
commit | 7894fc7b2f7e848267b4f3666f5d8410ea9b894a (patch) | |
tree | 8589f0ee11c00e47fb0609bdc151facc3baa9528 /src/usr/targeting | |
parent | e56b9afb738e9aea6af2589fd1f56d3d2ba77f5d (diff) | |
download | talos-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.pm | 27 | ||||
-rw-r--r-- | src/usr/targeting/common/processMrw.pl | 251 |
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( |