1*b4edc27aSAndrew Geissler#!/usr/bin/env perl 265ca8e19SAndrew Geissler 365682175SDeepak Kodihalliuse strict; 465682175SDeepak Kodihalliuse warnings; 565682175SDeepak Kodihalli 665682175SDeepak Kodihalli 765682175SDeepak Kodihalliuse mrw::Targets; 865682175SDeepak Kodihalliuse mrw::Inventory; 965682175SDeepak Kodihalliuse mrw::Util; 1065682175SDeepak Kodihalliuse Getopt::Long; 1165682175SDeepak Kodihalli 1265682175SDeepak Kodihalli 1365682175SDeepak Kodihallimy $mrwFile = ""; 1465682175SDeepak Kodihallimy $outFile = ""; 1565682175SDeepak Kodihalli 1665682175SDeepak Kodihalli 1765682175SDeepak KodihalliGetOptions( 1865682175SDeepak Kodihalli"m=s" => \$mrwFile, 1965682175SDeepak Kodihalli"o=s" => \$outFile, 2065682175SDeepak Kodihalli) 2165682175SDeepak Kodihallior printUsage(); 2265682175SDeepak Kodihalli 2365682175SDeepak Kodihalli 2465682175SDeepak Kodihalliif (($mrwFile eq "") or ($outFile eq "")) 2565682175SDeepak Kodihalli{ 2665682175SDeepak Kodihalli printUsage(); 2765682175SDeepak Kodihalli} 2865682175SDeepak Kodihalli 2965682175SDeepak Kodihalli 3065682175SDeepak Kodihalli# Load system MRW 3165682175SDeepak Kodihallimy $targets = Targets->new; 3265682175SDeepak Kodihalli$targets->loadXML($mrwFile); 3365682175SDeepak Kodihalli 3465682175SDeepak Kodihalli 3565682175SDeepak Kodihalli# Load inventory 3665682175SDeepak Kodihallimy @inventory = Inventory::getInventory($targets); 3765682175SDeepak Kodihalli 3865682175SDeepak Kodihalli 3965682175SDeepak Kodihalli# paths 40605b2e9cSMatt Spinlermy $i2cPath = "/sys/devices/platform/ahb/ahb:apb/ahb:apb:bus\@1e78a000/1e78a100.i2c-bus/i2c-<port>/<port>-00<address>"; 41fff3da49SDeepak Kodihallimy $fsiMasterPath = "/sys/devices/platform/gpio-fsi/fsi0/slave\@00:00/raw"; 42fff3da49SDeepak Kodihallimy $fsiSlavePath = "/sys/devices/platform/gpio-fsi/fsi0/slave\@00:00/00:00:00:0a/fsi1/slave\@<link>:00/raw"; 4365682175SDeepak Kodihalli 4465682175SDeepak Kodihalli 4565682175SDeepak Kodihalliopen(my $fh, '>', $outFile) or die "Could not open file '$outFile' $!"; 4665682175SDeepak Kodihalli 4765682175SDeepak KodihalligenI2CCallouts(); 4865682175SDeepak KodihalligenProcFSICallouts(); 4965682175SDeepak Kodihalli 5065682175SDeepak Kodihalliclose $fh; 5165682175SDeepak Kodihalli 5265682175SDeepak Kodihalli 5365682175SDeepak Kodihallisub genI2CCallouts 5465682175SDeepak Kodihalli{ 5565682175SDeepak Kodihalli my $bmc = Util::getBMCTarget($targets); 5665682175SDeepak Kodihalli my $connections = $targets->findConnections($bmc, "I2C"); 5765682175SDeepak Kodihalli # hash of arrays - {I2C master port : list of connected slave Targets} 5865682175SDeepak Kodihalli my %masters; 5965682175SDeepak Kodihalli 6065682175SDeepak Kodihalli for my $i2c (@{$connections->{CONN}}) 6165682175SDeepak Kodihalli { 6265682175SDeepak Kodihalli my $master = $i2c->{SOURCE}; 6365682175SDeepak Kodihalli my $port = $targets->getAttribute($master,"I2C_PORT"); 6465682175SDeepak Kodihalli $port = Util::adjustI2CPort($port); 6565682175SDeepak Kodihalli my $slave = $i2c->{DEST}; 6665682175SDeepak Kodihalli push(@{$masters{$port}}, $slave); 6765682175SDeepak Kodihalli } 6865682175SDeepak Kodihalli 6965682175SDeepak Kodihalli for my $m (keys %masters) 7065682175SDeepak Kodihalli { 7165682175SDeepak Kodihalli for my $s(@{$masters{$m}}) 7265682175SDeepak Kodihalli { 7365682175SDeepak Kodihalli my $addr = $targets->getAttribute($s,"I2C_ADDRESS"); 7465682175SDeepak Kodihalli $addr = Util::adjustI2CAddress(hex($addr)); 7565682175SDeepak Kodihalli $addr = substr $addr, 2; # strip 0x 7665682175SDeepak Kodihalli my $path = $i2cPath; 7765682175SDeepak Kodihalli $path =~ s/<port>/$m/g; 7865682175SDeepak Kodihalli $path =~ s/<address>/$addr/g; 7965682175SDeepak Kodihalli print $fh $path.": "; 8065682175SDeepak Kodihalli my $fru = Util::getEnclosingFru($targets, $s); 8165682175SDeepak Kodihalli print $fh Util::getObmcName(\@inventory, $fru)."\n"; 8265682175SDeepak Kodihalli } 8365682175SDeepak Kodihalli } 8465682175SDeepak Kodihalli} 8565682175SDeepak Kodihalli 8665682175SDeepak Kodihalli 8765682175SDeepak Kodihallisub genProcFSICallouts 8865682175SDeepak Kodihalli{ 8965682175SDeepak Kodihalli my @procs; 9065682175SDeepak Kodihalli for my $target (keys %{$targets->getAllTargets()}) 9165682175SDeepak Kodihalli { 9265682175SDeepak Kodihalli if ($targets->getType($target) eq "PROC") 9365682175SDeepak Kodihalli { 9465682175SDeepak Kodihalli push @procs, $target; 9565682175SDeepak Kodihalli } 9665682175SDeepak Kodihalli } 9765682175SDeepak Kodihalli 9865682175SDeepak Kodihalli for my $proc (@procs) 9965682175SDeepak Kodihalli { 10065682175SDeepak Kodihalli my $connections = $targets->findConnections($proc, "FSIM"); 10165682175SDeepak Kodihalli if ("" ne $connections) 10265682175SDeepak Kodihalli { 10365682175SDeepak Kodihalli # This is a master processor 10465682175SDeepak Kodihalli my $path = $fsiMasterPath; # revisit on a multinode system 10565682175SDeepak Kodihalli my $fru = Util::getEnclosingFru($targets, $proc); 10665682175SDeepak Kodihalli print $fh $path.": ".Util::getObmcName(\@inventory, $fru); 10765682175SDeepak Kodihalli for my $fsi (@{$connections->{CONN}}) 10865682175SDeepak Kodihalli { 10965682175SDeepak Kodihalli my $master = $fsi->{SOURCE}; 11065682175SDeepak Kodihalli my $slave = $fsi->{DEST}; 11165682175SDeepak Kodihalli my $link = $targets->getAttribute($master, "FSI_LINK"); 11265682175SDeepak Kodihalli $link = substr $link, 2; # strip 0x 11365682175SDeepak Kodihalli my $fru = Util::getEnclosingFru($targets, $slave); 11465682175SDeepak Kodihalli $path = $fsiSlavePath; 11565682175SDeepak Kodihalli $path =~ s/<link>/$link/g; 11665682175SDeepak Kodihalli print $fh "\n".$path.": ".Util::getObmcName(\@inventory, $fru); 11765682175SDeepak Kodihalli } 11865682175SDeepak Kodihalli } 11965682175SDeepak Kodihalli } 12065682175SDeepak Kodihalli} 12165682175SDeepak Kodihalli 12265682175SDeepak Kodihalli 12365682175SDeepak Kodihallisub printUsage 12465682175SDeepak Kodihalli{ 12565682175SDeepak Kodihalli print " 12665682175SDeepak Kodihalli $0 -m [MRW file] -o [Output filename]\n"; 12765682175SDeepak Kodihalli exit(1); 12865682175SDeepak Kodihalli} 129