diff options
author | Matt Spinler <spinler@us.ibm.com> | 2017-01-09 15:49:53 -0600 |
---|---|---|
committer | Matt Spinler <spinler@us.ibm.com> | 2017-01-17 10:27:28 -0600 |
commit | 268ec618e5824a95ab5d0eacffd9e0fe13f3817f (patch) | |
tree | 20f6055c7b96d69bb8e6216ecc37ff7dce91a906 /hwmon.pl | |
parent | c79b21f481af173d89dc882dda37ca07a7d29807 (diff) | |
download | phosphor-mrw-tools-268ec618e5824a95ab5d0eacffd9e0fe13f3817f.tar.gz phosphor-mrw-tools-268ec618e5824a95ab5d0eacffd9e0fe13f3817f.zip |
Create conf files for the hwmon sensors
Change-Id: I2f0981f4c3fe5bb8a79a8afcb63a5592d35692c1
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Diffstat (limited to 'hwmon.pl')
-rwxr-xr-x | hwmon.pl | 120 |
1 files changed, 118 insertions, 2 deletions
@@ -1,8 +1,10 @@ #!/usr/bin/env perl #Creates a configuration file for each hwmon sensor in the MRW -#for use by phosphor-hwmon. These configuration files contain -#labels and thresholds for the hwmon features for that sensor. +#for use by the phosphor-hwmon daemon. These configuration files +#contain labels and thresholds for the hwmon features for that sensor. +#The files are created in subdirectories based on their device +#tree paths. use strict; use warnings; @@ -10,6 +12,7 @@ use warnings; use mrw::Targets; use mrw::Util; use Getopt::Long; +use File::Path qw(make_path); use constant { I2C_TYPE => "i2c" @@ -31,6 +34,8 @@ my $bmc = Util::getBMCTarget($g_targetObj); getI2CSensors($bmc, \@hwmon); +makeConfFiles($bmc, \@hwmon); + exit 0; @@ -146,6 +151,117 @@ sub getI2CAttributes } +#Creates .conf files for each chip. +sub makeConfFiles +{ + my ($bmc, $hwmon) = @_; + + for my $entry (@$hwmon) { + printConfFile($bmc, $entry); + } +} + + +#Writes out a configuration file for a hwmon sensor, containing: +# LABEL_<feature> = <descriptive label> (e.g. LABEL_temp1 = ambient) +# WARNHI_<feature> = <value> (e.g. WARNHI_temp1 = 99) +# WARNLO_<feature> = <value> (e.g. WARNLO_temp1 = 0) +# CRITHI_<feature> = <value> (e.g. CRITHI_temp1 = 100) +# CRITHI_<feature> = <value> (e.g. CRITLO_temp1 = -1) +# +# The file is created in a subdirectory based on the chip's device +# tree path. +sub printConfFile +{ + my ($bmc, $entry) = @_; + my $path = getConfFilePath($bmc, $entry); + my $name = $path . "/" . getConfFileName($entry); + + make_path($path); + + open(my $f, ">$name") or die "Could not open $name\n"; + + for my $feature (sort keys %{$entry->{hwmon}}) { + print $f "LABEL_$feature = \"$entry->{hwmon}{$feature}{label}\"\n"; + + #Thresholds are optional + if (exists $entry->{hwmon}{$feature}{warnhigh}) { + print $f "WARNHI_$feature = \"$entry->{hwmon}{$feature}{warnhigh}\"\n"; + } + if (exists $entry->{hwmon}{$feature}{warnlow}) { + print $f "WARNLO_$feature = \"$entry->{hwmon}{$feature}{warnlow}\"\n"; + } + if (exists $entry->{hwmon}{$feature}{crithigh}) { + print $f "CRITHI_$feature = \"$entry->{hwmon}{$feature}{crithigh}\"\n"; + } + if (exists $entry->{hwmon}{$feature}{critlow}) { + print $f "CRITLO_$feature = \"$entry->{hwmon}{$feature}{critlow}\"\n"; + } + } + + close $f; +} + + +#Returns the chip's configuration file path. +sub getConfFilePath +{ + my ($bmc, $entry) = @_; + + my $mfgr = $g_targetObj->getAttribute($bmc, "MANUFACTURER"); + + #Unfortunately, because the conf file path is based on the + #device tree path which is tied to the internal chip structure, + #this has to be model specific. Until proven wrong, I'm going + #to make an assumption that all ASPEED chips have the same path + #as so far all of the models I've seen do. + if ($mfgr eq "ASPEED") { + return getAspeedConfFilePath($entry); + } + else { + die "Unsupported BMC manufacturer $mfgr\n"; + } +} + + +#Returns the relative path of the configuration file to create. +#This path is based on the path of the chip in the device tree. +#An example path is ahb/apb/i2c@1e78a000/i2c-bus@400/ +sub getAspeedConfFilePath +{ + my ($entry) = @_; + my $path; + + if ($entry->{type} eq I2C_TYPE) { + + #ASPEED requires the reg base address & offset fields + if ((not exists $entry->{regBaseAddress}) || + (not exists $entry->{regOffset})) { + die "Missing regBaseAddress or regOffset attributes " . + "in the I2C master unit XML\n"; + } + + $path = "ahb/apb/i2c\@$entry->{regBaseAddress}/i2c-bus@" . + "$entry->{regOffset}"; + } + else { + #TODO: FSI support for the OCC when known + die "HWMON bus type $entry->{type} not implemented yet\n"; + } + + return $path; +} + + +#Returns the name to use for the conf file: +# <name>@<addr>.conf (e.g. rtc@68.conf) +sub getConfFileName +{ + my ($entry) = @_; + return "$entry->{name}\@$entry->{addr}.conf"; +} + + sub printUsage { print "$0 -x [XML filename]\n"; |