77
77
$targetObj -> loadXML($serverwiz_file );
78
78
79
79
80
+ my $str =sprintf (
81
+ " %30s | %10s | %6s | %4s | %9s | %4s | %4s | %4s | %10s | %s \n " ,
82
+ " Sensor Name" ," FRU Name" ," Ent ID" ," Type" ," Evt Type" ," ID" ," Inst" ," FRU" ,
83
+ " HUID" ," Target" );
80
84
81
- my $str =sprintf (" %30s | %10s | %6s | %4s | %4s | %4s | %4s | %s \n " ,
82
- " Sensor Name" ," FRU Name" ," Ent ID" ," Type" ," ID" ," Inst" ," FRU" ," Target" );
83
85
$targetObj -> writeReport($str );
84
- $str =sprintf (" %30s | %10s | %6s | %4s | %4s | %4s | %4s | %s \n " ,
85
- " ------------------------------" ," ----------" ,
86
- " ------" ," ----" ," ----" ," ----" ," ----" ," ----------" );
86
+ my $str =sprintf (
87
+ " %30s | %10s | %6s | %4s | %9s | %4s | %4s | %4s | %10s | %s \n " ,
88
+ " ------------------------------" ," ----------" ,
89
+ " ------" ," ----" ," ---------" ," ----" ," ----" ," ----" ," ----------" ,
90
+ " ----------" );
91
+
87
92
$targetObj -> writeReport($str );
88
93
# --------------------------------------------------
89
94
# # loop through all targets and do stuff
@@ -202,6 +207,11 @@ sub processIpmiSensors {
202
207
{
203
208
$fru_id =$targetObj -> getAttribute($target ," FRU_ID" );
204
209
}
210
+ my $huid =" " ;
211
+ if (!$targetObj -> isBadAttribute($target ," HUID" ))
212
+ {
213
+ $huid =$targetObj -> getAttribute($target ," HUID" );
214
+ }
205
215
my @sensors ;
206
216
207
217
foreach my $child (@{$targetObj -> getTargetChildren($target )})
@@ -216,6 +226,9 @@ sub processIpmiSensors {
216
226
getAttribute($child ," IPMI_SENSOR_NAME_SUFFIX" );
217
227
my $sensor_id =$targetObj ->
218
228
getAttribute($child ," IPMI_SENSOR_ID" );
229
+ my $sensor_evt =$targetObj ->
230
+ getAttribute($child ," IPMI_SENSOR_READING_TYPE" );
231
+
219
232
220
233
$name_suffix =~s /\n // g ;
221
234
$name_suffix =~s /\s +// g ;
@@ -229,15 +242,17 @@ sub processIpmiSensors {
229
242
my $s =sprintf (" 0x%02X%02X,0x%02X" ,
230
243
oct ($sensor_type ),oct ($entity_id ),oct ($sensor_id ));
231
244
push (@sensors ,$s );
232
- my $sensor_id_str = " Err " ;
245
+ my $sensor_id_str = " " ;
233
246
if ($sensor_id ne " " )
234
247
{
235
248
$sensor_id_str = sprintf (" 0x%02X" ,oct ($sensor_id ));
236
249
}
237
250
my $str =sprintf (
238
- " %30s | %10s | 0x%02X | 0x%02X | %4s | %4d | %4d | %s \n " ,
239
- $sensor_name ,$name ,oct ($entity_id ),oct ($sensor_type ),
240
- $sensor_id_str ,$instance ,$fru_id ,$target );
251
+ " %30s | %10s | 0x%02X | 0x%02X | 0x%02x |" .
252
+ " %4s | %4d | %4d | %10s | %s \n " ,
253
+ $sensor_name ,$name ,oct ($entity_id ),oct ($sensor_type ),
254
+ oct ($sensor_evt ), $sensor_id_str ,$instance ,$fru_id ,
255
+ $huid ,$target );
241
256
$targetObj -> writeReport($str );
242
257
}
243
258
}
@@ -273,6 +288,8 @@ sub processApss {
273
288
getAttribute($child ," IPMI_SENSOR_NAME_SUFFIX" );
274
289
my $sensor_id =$targetObj ->
275
290
getAttribute($child ," IPMI_SENSOR_ID" );
291
+ my $sensor_evt =$targetObj ->
292
+ getAttribute($child ," IPMI_SENSOR_READING_TYPE" );
276
293
my $channel = $targetObj ->
277
294
getAttribute($child ," ADC_CHANNEL_ASSIGNMENT" );
278
295
my $channel_id = $targetObj ->
@@ -288,7 +305,7 @@ sub processApss {
288
305
$name =~s /\s +// g ;
289
306
$name =~s /\t +// g ;
290
307
291
- my $sensor_id_str = " Err " ;
308
+ my $sensor_id_str = " " ;
292
309
if ($sensor_id ne " " )
293
310
{
294
311
$sensor_id_str = sprintf (" 0x%02X" ,oct ($sensor_id ));
@@ -301,14 +318,13 @@ sub processApss {
301
318
$channel_offsets [$channel ] = $channel_offset ;
302
319
$channel_gains [$channel ] = $channel_gain ;
303
320
}
304
- else
305
- {
306
- $sensor_id_str =" N/A" ;
307
- }
308
321
my $str =sprintf (
309
- " %30s | %10s | 0x%02X | 0x%02X | %4s | %4d | %4d | %s \n " ,
322
+ " %30s | %10s | 0x%02X | 0x%02X | 0x%02x |" .
323
+ " %4s | %4d | %4d | %10s | %s \n " ,
310
324
$name ," " ,oct ($entity_id ),oct ($sensor_type ),
311
- $sensor_id_str ,$channel ," " ,$systemTarget );
325
+ oct ($sensor_evt ),$sensor_id_str ,$channel ," " ," " ,
326
+ $systemTarget );
327
+
312
328
$targetObj -> writeReport($str );
313
329
}
314
330
}
@@ -422,7 +438,6 @@ sub processProcessor
422
438
my $target = shift ;
423
439
424
440
# ########################
425
- # # Copy PCIE attributes from socket
426
441
# # In serverwiz, processor instances are not unique
427
442
# # because plugged into socket
428
443
# # so processor instance unique attributes are socket level.
@@ -431,6 +446,12 @@ sub processProcessor
431
446
$targetObj -> getTargetParent($targetObj -> getTargetParent($target ));
432
447
$targetObj -> copyAttribute($socket_target ,$target ," LOCATION_CODE" );
433
448
449
+ # # Module attibutes are inherited into the proc target
450
+ my $module_target =
451
+ $targetObj -> getTargetParent($target );
452
+ $targetObj -> copyAttribute($module_target ,$target ," LOCATION_CODE" );
453
+
454
+ # # Copy PCIE attributes from socket
434
455
foreach my $attr (sort (keys
435
456
%{ $targetObj -> getTarget($socket_target )-> {TARGET }-> {attribute } }))
436
457
{
@@ -439,6 +460,14 @@ sub processProcessor
439
460
$targetObj -> copyAttribute($socket_target ,$target ,$attr );
440
461
}
441
462
}
463
+
464
+ # # Copy all attributes from module
465
+ foreach my $attr (sort (keys
466
+ %{ $targetObj -> getTarget($module_target )-> {TARGET }-> {attribute } }))
467
+ {
468
+ $targetObj -> copyAttribute($module_target ,$target ,$attr );
469
+ }
470
+
442
471
$targetObj -> log ($target , " Processing PROC" );
443
472
foreach my $child (@{ $targetObj -> getTargetChildren($target ) })
444
473
{
@@ -508,7 +537,7 @@ sub processProcessor
508
537
else
509
538
{
510
539
$targetObj -> setAttribute($target , " PROC_MASTER_TYPE" ,
511
- " MASTER_CANDIDATE " );
540
+ " NOT_MASTER " );
512
541
}
513
542
# # Update bus speeds
514
543
processI2cSpeeds($targetObj ,$target );
@@ -588,6 +617,11 @@ sub setupBars
588
617
" INTP_BASE_ADDR" ," PHB_BASE_ADDRS" ," PCI_BASE_ADDRS_32" ,
589
618
" PCI_BASE_ADDRS_64" ," RNG_BASE_ADDR" ," IBSCOM_PROC_BASE_ADDR" );
590
619
620
+ # Attribute only valid in naples-based systems
621
+ if (!$targetObj -> isBadAttribute($target ," NPU_MMIO_BAR_BASE_ADDR" ) ) {
622
+ push (@bars ," NPU_MMIO_BAR_BASE_ADDR" );
623
+ }
624
+
591
625
foreach my $bar (@bars )
592
626
{
593
627
my ($num ,$base ,$node_offset ,$proc_offset ,$offset ) = split (/ ,/ ,
@@ -606,8 +640,10 @@ sub setupBars
606
640
{
607
641
for (my $i =0;$i <$num ;$i ++)
608
642
{
643
+ # Note: Hex convert method avoids overflow on 32bit machine
609
644
my $b =sprintf (" 0x%016s" ,substr ((
610
- $i_base +$i_node_offset *$node +$i_proc_offset *$proc +$i_offset *$i )-> as_hex(),2)); # Note: Hex convert method avoids overflow on 32bit machines.
645
+ $i_base +$i_node_offset *$node +
646
+ $i_proc_offset *$proc +$i_offset *$i )-> as_hex(),2));
611
647
my $sep =" ," ;
612
648
if ($i ==$num -1)
613
649
{
@@ -640,8 +676,10 @@ sub processMcs
640
676
my $i_offset = Math::BigInt-> new($offset );
641
677
642
678
my $mcs = $targetObj -> getAttribute($target , " MCS_NUM" );
679
+ # Note: Hex convert method avoids overflow on 32bit machines
643
680
my $mcsStr =sprintf (" 0x%016s" ,substr ((
644
- $i_base +$i_node_offset *$node +$i_proc_offset *$proc +$i_offset *$mcs )-> as_hex(),2)); # Note: Hex convert method avoids overflow on 32bit machines.
681
+ $i_base +$i_node_offset *$node +
682
+ $i_proc_offset *$proc +$i_offset *$mcs )-> as_hex(),2));
645
683
$targetObj -> setAttribute($target , " IBSCOM_MCS_BASE_ADDR" , $mcsStr );
646
684
}
647
685
@@ -657,23 +695,23 @@ sub processXbus
657
695
my $target = shift ;
658
696
659
697
my $found_xbus = 0;
660
-
698
+
661
699
my $xbus_child_conn = $targetObj -> getFirstConnectionDestination($target );
662
700
if ($xbus_child_conn ne " " )
663
701
{
664
- # # set attributes for both directions
702
+ # # set attributes for both directions
665
703
$targetObj -> setAttribute($xbus_child_conn , " PEER_TARGET" ,
666
- $targetObj -> getAttribute($target , " PHYS_PATH" ));
704
+ $targetObj -> getAttribute($target , " PHYS_PATH" ));
667
705
$targetObj -> setAttribute($target , " PEER_TARGET" ,
668
- $targetObj -> getAttribute($xbus_child_conn , " PHYS_PATH" ));
706
+ $targetObj -> getAttribute($xbus_child_conn , " PHYS_PATH" ));
669
707
670
708
$targetObj -> setAttribute($xbus_child_conn , " PEER_TARGET" ,
671
- $targetObj -> getAttribute($target , " PHYS_PATH" ));
709
+ $targetObj -> getAttribute($target , " PHYS_PATH" ));
672
710
$targetObj -> setAttribute($target , " PEER_TARGET" ,
673
- $targetObj -> getAttribute($xbus_child_conn , " PHYS_PATH" ));
711
+ $targetObj -> getAttribute($xbus_child_conn , " PHYS_PATH" ));
674
712
675
713
$found_xbus = 1;
676
- }
714
+ }
677
715
678
716
}
679
717
@@ -697,8 +735,6 @@ sub processAbus
697
735
{
698
736
$targetObj -> setAttribute($target , " EI_BUS_TX_MSBSWAP" ," 0" );
699
737
}
700
- # $targetObj->setAttribute($target, "PEER_TARGET","");
701
-
702
738
my $abus_child_conn = $targetObj -> getFirstConnectionDestination($target );
703
739
if ($abus_child_conn ne " " )
704
740
{
@@ -828,23 +864,23 @@ sub processPcie
828
864
$iop_swap {0 }{1 }{' 11' }=$t [7];
829
865
830
866
$iop_swap {1 }{0 }{' 00' }=$t [8];
831
- $iop_swap {1 }{0 }{' 01 ' }=$t [9];
832
- $iop_swap {1 }{0 }{' 10 ' }=$t [10];
867
+ $iop_swap {1 }{0 }{' 10 ' }=$t [9];
868
+ $iop_swap {1 }{0 }{' 01 ' }=$t [10];
833
869
$iop_swap {1 }{0 }{' 11' }=$t [11];
834
870
$iop_swap {1 }{1 }{' 00' }=$t [12];
835
871
$iop_swap {1 }{1 }{' 10' }=$t [13];
836
872
$iop_swap {1 }{1 }{' 01' }=$t [14];
837
873
$iop_swap {1 }{1 }{' 11' }=$t [15];
838
874
839
- $iop_swap {2 }{0 }{' 00' }=$t [8];
840
- $iop_swap {2 }{0 }{' 01' }=$t [9];
841
- $iop_swap {2 }{0 }{' 10' }=$t [10];
842
- $iop_swap {2 }{0 }{' 11' }=$t [11];
843
- $iop_swap {2 }{1 }{' 00' }=$t [12];
844
- $iop_swap {2 }{1 }{' 10' }=$t [13];
845
- $iop_swap {2 }{1 }{' 01' }=$t [14];
846
- $iop_swap {2 }{1 }{' 11' }=$t [15];
847
875
876
+ $iop_swap {2 }{0 }{' 00' }=$t [16];
877
+ $iop_swap {2 }{0 }{' 01' }=$t [17];
878
+ $iop_swap {2 }{0 }{' 10' }=$t [18];
879
+ $iop_swap {2 }{0 }{' 11' }=$t [19];
880
+ $iop_swap {2 }{1 }{' 00' }=$t [20];
881
+ $iop_swap {2 }{1 }{' 10' }=$t [21];
882
+ $iop_swap {2 }{1 }{' 01' }=$t [22];
883
+ $iop_swap {2 }{1 }{' 11' }=$t [23];
848
884
849
885
my @lane_eq ;
850
886
my $NUM_PHBS =4;
@@ -940,30 +976,33 @@ sub processPcie
940
976
die " PCIE config for $iop ,$iop_lane_swap [$iop ],$lane_rev not found\n " ;
941
977
}
942
978
}
943
- my $lane_swap_attr0 = sprintf (" %s ,%s ,%s " ,$iop_lane_swap [0],
944
- $iop_lane_swap [1],$iop_lane_swap [2]);
945
- my $lane_swap_attr1 = sprintf (" %s ,0,%s ,0,%s ,0" ,$iop_lane_swap [0],
946
- $iop_lane_swap [1],$iop_lane_swap [2]);
979
+
980
+ my $lane_rev_attr0 = sprintf (" %s ,%s ,%s " ,
981
+ oct ($iop_swap_lu [0]),
982
+ oct ($iop_swap_lu [1]),
983
+ oct ($iop_swap_lu [2]));
984
+ my $lane_rev_attr1 = sprintf (" %s ,0,%s ,0,%s ,0" ,
985
+ oct ($iop_swap_lu [0]),
986
+ oct ($iop_swap_lu [1]),
987
+ oct ($iop_swap_lu [2]));
947
988
948
989
$targetObj -> setAttribute($parentTarget , " PROC_PCIE_IOP_SWAP" ,
949
- $lane_swap_attr0 );
990
+ $lane_rev_attr0 );
950
991
$targetObj -> setAttribute($parentTarget , " PROC_PCIE_IOP_SWAP_NON_BIFURCATED" ,
951
- $lane_swap_attr1 );
992
+ $lane_rev_attr1 );
952
993
$targetObj -> setAttribute($parentTarget , " PROC_PCIE_IOP_SWAP_BIFURCATED" ,
953
994
" 0,0,0,0" );
954
-
955
- my $lane_rev_attr = sprintf (" %s ,0,%s ,0,%s ,0" ,
956
- oct ($iop_swap_lu [0]),oct ($iop_swap_lu [1]),oct ($iop_swap_lu [2]));
957
-
958
995
$targetObj -> setAttribute($parentTarget , " PROC_PCIE_IOP_REVERSAL" ,
959
- $lane_rev_attr );
996
+ " 0,0,0,0 " );
960
997
$targetObj -> setAttribute($parentTarget ,
961
- " PROC_PCIE_IOP_REVERSAL_NON_BIFURCATED" ,$lane_rev_attr );
998
+ " PROC_PCIE_IOP_REVERSAL_NON_BIFURCATED" ," 0,0,0,0 " );
962
999
$targetObj -> setAttribute($parentTarget , " PROC_PCIE_IOP_REVERSAL_BIFURCATED" ,
963
1000
" 0,0,0,0" );
964
1001
965
- my $is_slot_attr = sprintf (" %s ,%s ,%s ,%s " ,
966
- $is_slot [0][0], $is_slot [0][1], $is_slot [1][0], $is_slot [1][1], $is_slot [2][0], $is_slot [2][1]);
1002
+ my $is_slot_attr = sprintf (" %s ,%s ,%s ,%s ,%s ,%s " ,
1003
+ $is_slot [0][0], $is_slot [0][1],
1004
+ $is_slot [1][0], $is_slot [1][1],
1005
+ $is_slot [2][0], $is_slot [2][1]);
967
1006
$targetObj -> setAttribute($parentTarget , " PROC_PCIE_IS_SLOT" , $is_slot_attr );
968
1007
969
1008
# # don't support DSMP
@@ -1012,7 +1051,6 @@ sub processMembufVpdAssociation
1012
1051
my $membuf_target = $membuf_assoc -> {DEST_PARENT };
1013
1052
setEepromAttributes($targetObj ,
1014
1053
" EEPROM_VPD_PRIMARY_INFO" ,$membuf_target ,$vpd );
1015
-
1016
1054
my $index = $targetObj -> getBusAttribute($membuf_assoc -> {SOURCE },
1017
1055
$membuf_assoc -> {BUS_NUM }, " ISDIMM_MBVPD_INDEX" );
1018
1056
$targetObj -> setAttribute(
@@ -1032,7 +1070,6 @@ sub processMembufVpdAssociation
1032
1070
" EEPROM_VPD_PRIMARY_INFO" ,$node_target ,$vpd );
1033
1071
$targetObj -> setAttribute($node_target ,
1034
1072
" VPD_REC_NUM" ,$targetObj -> {vpd_num });
1035
- print " >>> $node_target ,$targetObj ->{vpd_num}\n " ;
1036
1073
}
1037
1074
}
1038
1075
$targetObj -> {vpd_num }++;
@@ -1113,7 +1150,6 @@ sub processMembuf
1113
1150
setEepromAttributes($targetObj ,
1114
1151
" EEPROM_VPD_PRIMARY_INFO" ,$dimm_target ,
1115
1152
$dimm );
1116
-
1117
1153
my $field =getI2cMapField($targetObj ,$dimm_target ,$dimm );
1118
1154
my $map = $dimm_portmap {$dimm_target };
1119
1155
if ($map eq " " ) {
@@ -1123,7 +1159,7 @@ sub processMembuf
1123
1159
$addr_map [$map ] = $field ;
1124
1160
}
1125
1161
}
1126
- $targetObj -> setAttribute($targetObj -> { targeting } -> { SYS }[0] -> { KEY } ,
1162
+ $targetObj -> setAttribute($target ,
1127
1163
" MRW_MEM_SENSOR_CACHE_ADDR_MAP" ," 0x" .join (" " ,@addr_map ));
1128
1164
1129
1165
# # Update bus speeds
@@ -1309,7 +1345,8 @@ sub errorCheck
1309
1345
}
1310
1346
else
1311
1347
{
1312
- $abus_error = sprintf (" proc not connected to proc via Abus or Xbus (Target=%s )" ,$child );
1348
+ $abus_error = sprintf (
1349
+ " proc not connected to proc via Abus or Xbus (Target=%s )" ,$child );
1313
1350
}
1314
1351
}
1315
1352
}
0 commit comments