1#!/bin/bash
2
3# Provide source directive to shellcheck.
4# shellcheck source=meta-fii/meta-kudo/recipes-kudo/kudo-fw-utility/kudo-fw/kudo-lib.sh
5source /usr/libexec/kudo-fw/kudo-lib.sh
6
7powerState=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0xe0 b)
8
9getGPISourceRegisters(){
10    REG60=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x60 w)       # GPI Data Set
11    REG61=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x61 w)       # GPI DATA Set #0
12    REG62=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x62 w)       # GPI DATA Set #1
13    REG63=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x63 w)       # GPI DATA Set #2
14    REG64=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x64 w)       # GPI DATA Set #3
15    DS0Pres=$((REG60 & 0x0100))
16    DS1Pres=$((REG60 & 0x0200))
17    DS2Pres=$((REG60 & 0x0400))
18    DS3Pres=$((REG60 & 0x0800))
19}
20
21getErrorCount() {
22    MemCE=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x90 w)
23    MemUE=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x93 w)
24    CoreCE=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x80 w)
25    CoreUE=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x83 w)
26    PCIeCE=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0xc0 w)
27    PCIeUE=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0xc2 w)
28    OtherCE=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0xd0 w)
29    OtherUE=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0xd8 w)
30}
31
32getReg61Vals() {
33    REG61_0800=$((REG61 & 0x0800))
34    REG61_0800_VAL=$((REG61_0800 >> 8))
35    REG61_1000=$((REG61 & 0x1000))
36    REG61_1000_VAL=$((REG61_1000 >> 12))
37}
38
39getReg62Vals() {
40    REG62_0100=$((REG62 & 0x0100))
41    REG62_0100_VAL=$((REG62_0100 >> 8))
42    REG62_0200=$((REG62 & 0x0200))
43    REG62_0200_VAL=$((REG62_0200 >> 9))
44    REG62_0400=$((REG62 & 0x0400))
45    REG62_0400_VAL=$((REG62_0400 >> 10))
46}
47
48getReg63Vals() {
49    REG63_0100=$((REG63 & 0x0100))
50    REG63_0100_VAL=$((REG63_0100 >> 8))
51}
52
53getReg64Vals() {
54    REG64_0100=$((REG64 & 0x0100))
55    REG64_0100_VAL=$((REG64_0100 >> 8))
56    REG64_0200=$((REG64 & 0x0200))
57    REG64_0200_VAL=$((REG64_0200 >> 9))
58    REG64_0800=$((REG64 & 0x0800))
59    REG64_0800_VAL=$((REG64_0800 >> 11))
60    REG64_2000=$((REG64 & 0x2000))
61    REG64_2000_VAL=$((REG64_2000 >> 13))
62    REG64_4000=$((REG64 & 0x4000))
63    REG64_4000_VAL=$((REG64_4000 >> 14))
64    REG64_8000=$((REG64 & 0x8000))
65    REG64_8000_VAL=$((REG64_8000 >> 15))
66    REG64_0001=$((REG64 & 0x0001))
67    REG64_0001_VAL=$((REG64_0001))
68}
69
70getGPIStatusRegisters(){
71    REG70=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x70 w)       # Core, DIMM, SLC, PCIe, and Other errors
72    REG78=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x78 w)       # VRD Fault/Warning Error
73    REG79=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x79 w)       # VRD Hot
74    REG7A=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x7A w)       # DIMM Hot Error
75    REG7B=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x7B w)       # Boot #1 Error
76    REG7C=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x7C w)       # Boot #2 Error
77    REG7D=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x7D w)       # Watchdog/Other Status
78    REG7E=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x7E w)       # RAS internal error
79}
80
81getReg70Vals() {
82    REG70_0100=$((REG70 & 0x0100))
83    REG70_0100_VAL=$((REG70_0100 >> 8))
84    REG70_0200=$((REG70 & 0x0200))
85    REG70_0200_VAL=$((REG70_0200 >> 9))
86    REG70_0400=$((REG70 & 0x0400))
87    REG70_0400_VAL=$((REG70_0400 >> 10))
88    REG70_0800=$((REG70 & 0x0800))
89    REG70_0800_VAL=$((REG70_0800 >> 11))
90    REG70_4000=$((REG70 & 0x4000))
91    REG70_4000_VAL=$((REG70_4000 >> 14))
92    REG70_8000=$((REG70 & 0x8000))
93    REG70_8000_VAL=$((REG70_8000 >> 15))
94    REG70_0001=$((REG70 & 0x0001))
95    REG70_0001_VAL=$((REG70_0001))
96    REG70_0002=$((REG70 & 0x0002))
97    REG70_0002_VAL=$((REG70_0002 >> 1))
98}
99
100getReg78Vals() {
101    REG78_0100=$((REG78 & 0x0100))
102    REG78_0100_VAL=$((REG78_0100 >> 8))
103    REG78_0200=$((REG78 & 0x0200))
104    REG78_0200_VAL=$((REG78_0200 >> 9))
105    REG78_0400=$((REG78 & 0x0400))
106    REG78_0400_VAL=$((REG78_0400 >> 10))
107    REG78_0800=$((REG78 & 0x0800))
108    REG78_0800_VAL=$((REG78_0800 >> 11))
109    REG78_1000=$((REG78 & 0x1000))
110    REG78_1000_VAL=$((REG78_1000 >> 12))
111    REG78_2000=$((REG78 & 0x2000))
112    REG78_2000_VAL=$((REG78_2000 >> 13))
113    REG78_4000=$((REG78 & 0x4000))
114    REG78_4000_VAL=$((REG78_4000 >> 14))
115    REG78_8000=$((REG78 & 0x8000))
116    REG78_8000_VAL=$((REG78_8000 >> 15))
117    REG78_0001=$((REG78 & 0x0001))
118    REG78_0001_VAL=$((REG78_0001))
119    REG78_0002=$((REG78 & 0x0002))
120    REG78_0002_VAL=$((REG78_0002 >> 1))
121    REG78_0004=$((REG78 & 0x0004))
122    REG78_0004_VAL=$((REG78_0004 >> 2))
123    REG78_0008=$((REG78 & 0x0008))
124    REG78_0008_VAL=$((REG78_0008 >> 3))
125}
126
127getReg79Vals() {
128    REG79_0100=$((REG79 & 0x0100))
129    REG79_0100_VAL=$((REG79_0100 >> 8))
130    REG79_1000=$((REG79 & 0x1000))
131    REG79_1000_VAL=$((REG79_1000 >> 12))
132    REG79_2000=$((REG79 & 0x2000))
133    REG79_2000_VAL=$((REG79_2000 >> 13))
134    REG79_4000=$((REG79 & 0x4000))
135    REG79_4000_VAL=$((REG79_4000 >> 14))
136    REG79_0001=$((REG79 & 0x0001))
137    REG79_0001_VAL=$((REG79_0001))
138    REG79_0002=$((REG79 & 0x0002))
139    REG79_0002_VAL=$((REG79_0002 >> 1))
140    REG79_0004=$((REG79 & 0x0004))
141    REG79_0004_VAL=$((REG79_0004 >> 2))
142    REG79_0008=$((REG79 & 0x0008))
143    REG79_0008_VAL=$((REG79_0008 >> 3))
144}
145
146getReg7AVals() {
147    REG7A_0100=$((REG7A & 0x0100))
148    REG7A_0100_VAL=$((REG7A_0100 >> 8))
149    REG7A_0200=$((REG7A & 0x0200))
150    REG7A_0200_VAL=$((REG7A_0200 >> 9))
151    REG7A_0400=$((REG7A & 0x0400))
152    REG7A_0400_VAL=$((REG7A_0400 >> 10))
153    REG7A_0800=$((REG7A & 0x0800))
154    REG7A_0800_VAL=$((REG7A_0800 >> 11))
155    REG7A_1000=$((REG7A & 0x1000))
156    REG7A_1000_VAL=$((REG7A_1000 >> 12))
157    REG7A_2000=$((REG7A & 0x2000))
158    REG7A_2000_VAL=$((REG7A_2000 >> 13))
159    REG7A_4000=$((REG7A & 0x4000))
160    REG7A_4000_VAL=$((REG7A_4000 >> 14))
161    REG7A_8000=$((REG7A & 0x8000))
162    REG7A_8000_VAL=$((REG7A_8000 >> 15))
163}
164
165getReg7DVals() {
166    REG7D_0100=$((REG7D & 0x0100))
167    REG7D_0100_VAL=$((REG7D_0100 >> 8))
168    REG7D_0200=$((REG7D & 0x0200))
169    REG7D_0200_VAL=$((REG7D_0200 >> 9))
170    REG7D_0400=$((REG7D & 0x0400))
171    REG7D_0400_VAL=$((REG7D_0400 >> 10))
172}
173
174getReg7EVals() {
175    REG7E_0100=$((REG7E & 0x0100))
176    REG7E_0100_VAL=$((REG7E_0100 >> 8))
177    REG7E_0200=$((REG7E & 0x0200))
178    REG7E_0200_VAL=$((REG7E_0200 >> 9))
179}
180
181getGPIMaskRegisters(){
182    REG50=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x50 w)       # GPI Control #0
183    REG51=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x51 w)       # GPI Control #1
184    REG52=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x52 w)       # GPI Control #2
185    REG53=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x53 w)       # GPI Control #3
186    REG54=$(i2cget -f -y "${I2C_S0_SMPRO[0]}" 0x"${I2C_S0_SMPRO[1]}" 0x54 w)       # GPI CE/UE Mask
187}
188
189getReg50Vals() {
190    REG50_0400=$((REG50 & 0x0400))
191    REG50_0400_VAL=$((REG50_0400 >> 10))
192    REG50_0800=$((REG50 & 0x0800))
193    REG50_0800_VAL=$((REG50_0800 >> 11))
194}
195
196getReg51Vals() {
197    REG51_0100=$((REG51 & 0x0100))
198    REG51_0100_VAL=$((REG51_0100 >> 8))
199    REG51_0200=$((REG51 & 0x0200))
200    REG51_0200_VAL=$((REG51_0200 >> 9))
201    REG51_0400=$((REG51 & 0x0400))
202    REG51_0400_VAL=$((REG51_0400 >> 10))
203}
204
205getReg52Vals() {
206    REG52_0100=$((REG52 & 0x0100))
207    REG52_0100_VAL=$((REG52_0100 >> 8))
208}
209
210getReg53Vals() {
211    REG53_0100=$((REG53 & 0x0100))
212    REG53_0100_VAL=$((REG53_0100 >> 8))
213    REG53_0200=$((REG53 & 0x0200))
214    REG53_0200_VAL=$((REG53_0200 >> 9))
215    REG53_0800=$((REG53 & 0x0800))
216    REG53_0800_VAL=$((REG53_0800 >> 11))
217    REG53_2000=$((REG53 & 0x2000))
218    REG53_2000_VAL=$((REG53_2000 >> 13))
219    REG53_4000=$((REG53 & 0x4000))
220    REG53_4000_VAL=$((REG53_4000 >> 14))
221    REG53_8000=$((REG53 & 0x8000))
222    REG53_8000_VAL=$((REG53_8000 >> 15))
223    REG53_0001=$((REG53 & 0x0001))
224    REG53_0001_VAL=$((REG53_0001))
225}
226
227getReg54Vals() {
228    REG54_0100=$((REG54 & 0x0100))
229    REG54_0100_VAL=$((REG54_0100 >> 8))
230    REG54_0200=$((REG54 & 0x0200))
231    REG54_0200_VAL=$((REG54_0200 >> 9))
232    REG54_0001=$((REG54 & 0x0001))
233    REG54_0001_VAL=$((REG54_0001))
234    REG54_0002=$((REG54 & 0x0002))
235    REG54_0002_VAL=$((REG54_0002 >> 1))
236    REG54_0004=$((REG54 & 0x0004))
237    REG54_0004_VAL=$((REG54_0004 >> 2))
238    REG54_0008=$((REG54 & 0x0008))
239    REG54_0008_VAL=$((REG54_0008 >> 3))
240    REG54_0010=$((REG54 & 0x0010))
241    REG54_0010_VAL=$((REG54_0010 >> 4))
242    REG54_0020=$((REG54 & 0x0020))
243    REG54_0020_VAL=$((REG54_0020 >> 5))
244}
245
246
247
248if [ -z "${powerState}" ]
249 then
250        echo "System is currently Powered off S6"
251else
252        echo "System is currently in ${powerState} "
253
254        # Get Error Count
255        getErrorCount
256        echo "  "
257        echo " Error Count: "
258        echo " Memory   Errors: Correctable $((MemCE >> 8)) Uncorrectable $((MemUE >> 8)) "
259        echo " Core     Errors: Correctable $((CoreCE >> 8)) Uncorrectable $((CoreUE >> 8))"
260        echo " PCIe     Errors: Correctable $((PCIeCE >> 8)) Uncorrectable $((PCIeUE >> 8)) "
261        echo " Other    Errors: Correctable $((OtherCE >> 8)) Uncorrectable $((OtherUE >> 8)) "
262
263        # GPI Source Registers
264        getGPISourceRegisters
265        echo "  "
266        echo " GPI Source Registers: "
267        echo " GPI Data Set #0 Present: $((DS0Pres >> 8)) "
268        echo " GPI Data Set #1 Present: $((DS1Pres >> 9)) "
269        echo " GPI Data Set #2 Present: $((DS2Pres >> 10)) "
270        echo " GPI Data Set #3 Present: $((DS3Pres >> 11)) "
271
272        # REG61 Data Set#0
273        getReg61Vals
274        echo "  "
275        echo " GPI Data Set#0: "
276        if [[ "$REG61_0800_VAL" != 0 ]]; then
277                echo " Platform Booting "
278        fi
279        if [[ "$REG61_1000_VAL" != 0 ]]; then
280                echo " Critical Stop "
281        fi
282
283        # REG62 Data Set#1
284        getReg62Vals
285        echo "  "
286        echo " GPI Data Set#1: "
287        if [[ "$REG62_0100_VAL" != 0 ]]; then
288                echo " SoC VR HOT/Warn/Fault "
289        fi
290        if [[ "$REG62_0200_VAL" != 0 ]]; then
291                echo " Core VR HOT/Warn/Fault "
292        fi
293        if [[ "$REG62_0400_VAL" != 0 ]]; then
294                echo " DIMM HOT/Warn/Fault "
295        fi
296
297        # REG63 Data Set#2
298        getReg63Vals
299        echo "  "
300        echo " GPI Data Set#2: "
301        if [[ "$REG63_0100_VAL" != 0 ]]; then
302                echo " DIMM HOT "
303        fi
304
305        # REG64 Data Set#3
306        getReg64Vals
307        echo "  "
308        echo " GPI Data Set#3: "
309        if [[ "$REG64_0100_VAL" != 0 ]]; then
310                echo " Core Errors "
311        fi
312        if [[ "$REG64_0200_VAL" != 0 ]]; then
313                echo " Memory Errors "
314        fi
315        if [[ "$REG64_0800_VAL" != 0 ]]; then
316                echo " PCIe Errors "
317        fi
318        if [[ "$REG64_2000_VAL" != 0 ]]; then
319                echo " Other Errors "
320        fi
321        if [[ "$REG64_4000_VAL" != 0 ]]; then
322                echo " ACPI State Change "
323        fi
324        if [[ "$REG64_8000_VAL" != 0 ]]; then
325                echo " Boot Errors "
326        fi
327        if [[ "$REG64_0001_VAL" != 0 ]]; then
328                echo " RAS Internal Error "
329    fi
330
331        # GPI Status Regs
332        getGPIStatusRegisters
333        echo "  "
334        echo " GPI Status Regs "
335
336        getReg70Vals
337        echo "  "
338        echo " Core, DIMM, SLC, PCIe, and Other errors: "
339        if [[ "$REG70_0100_VAL" != 0 ]]; then
340                echo " Core CE Error "
341        fi
342        if [[ "$REG70_0200_VAL" != 0 ]]; then
343                echo " Core UE Error "
344        fi
345        if [[ "$REG70_0400_VAL" != 0 ]]; then
346                echo " DIMM CE Error "
347        fi
348        if [[ "$REG70_0800_VAL" != 0 ]]; then
349                echo " DIMM UE Error "
350        fi
351        if [[ "$REG70_4000_VAL" != 0 ]]; then
352                echo " PCIe CE Error "
353        fi
354        if [[ "$REG70_8000_VAL" != 0 ]]; then
355                echo " PCIe UE Error "
356        fi
357        if [[ "$REG70_0001_VAL" != 0 ]]; then
358                echo " Other CE Error "
359        fi
360        if [[ "$REG70_0002_VAL" != 0 ]]; then
361                echo " Other UE Error "
362        fi
363
364        getReg78Vals
365        echo "  "
366        echo " VRD Fault/Warning Error: "
367        if [[ "$REG78_0100_VAL" != 0 ]]; then
368                echo " SoC VRD fault/warning "
369        fi
370        if [[ "$REG78_0200_VAL" != 0 ]]; then
371                echo " Core VRD1 fault/warning "
372        fi
373        if [[ "$REG78_0400_VAL" != 0 ]]; then
374                echo " Core VRD2 fault/warning "
375        fi
376        if [[ "$REG78_0800_VAL" != 0 ]]; then
377                echo " Core VRD3 fault/warning "
378        fi
379        if [[ "$REG78_1000_VAL" != 0 ]]; then
380                echo " DIMM VRD1 fault/warning "
381        fi
382        if [[ "$REG78_2000_VAL" != 0 ]]; then
383                echo " DIMM VRD2 fault/warning "
384        fi
385        if [[ "$REG78_4000_VAL" != 0 ]]; then
386                echo " DIMM VRD3 fault/warning "
387        fi
388        if [[ "$REG78_8000_VAL" != 0 ]]; then
389                echo " DIMM VRD3 fault/warning "
390        fi
391        if [[ "$REG78_0001_VAL" != 0 ]]; then
392                echo " DIMM fault/warning "
393        fi
394        if [[ "$REG78_0002_VAL" != 0 ]]; then
395                echo " DIMM fault/warning "
396        fi
397        if [[ "$REG78_0004_VAL" != 0 ]]; then
398                echo " DIMM fault/warning "
399        fi
400        if [[ "$REG78_0008_VAL" != 0 ]]; then
401                echo " DIMM fault/warning "
402        fi
403
404        getReg79Vals
405        echo "  "
406        echo " VRD Hot: "
407        if [[ "$REG79_0100_VAL" != 0 ]]; then
408                echo " SoC VRD is HOT "
409        fi
410        if [[ "$REG79_1000_VAL" != 0 ]]; then
411                echo " Core VRD1 is HOT "
412        fi
413        if [[ "$REG79_2000_VAL" != 0 ]]; then
414                echo " Core VRD2 is HOT "
415        fi
416        if [[ "$REG79_4000_VAL" != 0 ]]; then
417                echo " Core VRD3 is HOT "
418        fi
419        if [[ "$REG79_0001_VAL" != 0 ]]; then
420                echo " DIMM VRD1 is HOT "
421        fi
422        if [[ "$REG79_0002_VAL" != 0 ]]; then
423                echo " DIMM VRD2 is HOT "
424        fi
425        if [[ "$REG79_0004_VAL" != 0 ]]; then
426                echo " DIMM VRD3 is HOT "
427        fi
428        if [[ "$REG79_0008_VAL" != 0 ]]; then
429                echo " DIMM VRD4 is HOT "
430        fi
431
432        getReg7AVals
433        echo "  "
434        echo " DIMM Hot Error: "
435        if [[ "$REG7A_0100_VAL" != 0 ]]; then
436                echo " DIMM channel 0 is HOT "
437        fi
438        if [[ "$REG7A_0200_VAL" != 0 ]]; then
439                echo " DIMM channel 1 is HOT "
440        fi
441        if [[ "$REG7A_0400_VAL" != 0 ]]; then
442                echo " DIMM channel 2 is HOT "
443        fi
444        if [[ "$REG7A_0800_VAL" != 0 ]]; then
445                echo " DIMM channel 3 is HOT "
446        fi
447        if [[ "$REG7A_1000_VAL" != 0 ]]; then
448                echo " DIMM channel 4 is HOT "
449        fi
450        if [[ "$REG7A_2000_VAL" != 0 ]]; then
451                echo " DIMM channel 5 is HOT "
452        fi
453        if [[ "$REG7A_4000_VAL" != 0 ]]; then
454                echo " DIMM channel 6 is HOT "
455        fi
456        if [[ "$REG7A_8000_VAL" != 0 ]]; then
457                echo " DIMM channel 7 is HOT "
458        fi
459
460        echo "  "
461        echo " Boot #1 Error: $((REG7B >> 8)) "
462        echo " Boot #2 Error: $((REG7C >> 8)) "
463
464
465        getReg7DVals
466        echo "  "
467        echo " Watchdog/Other Status: "
468        if [[ "$REG7D_0100_VAL" != 0 ]]; then
469                echo " Non-secure WDT expired "
470        fi
471        if [[ "$REG7D_0200_VAL" != 0 ]]; then
472                echo " Secure WDT expired "
473        fi
474        if [[ "$REG7D_0400_VAL" != 0 ]]; then
475                echo " Firmware WDT expired "
476        fi
477
478        getReg7EVals
479        echo "  "
480        echo " RAS internal error: "
481        if [[ "$REG7E_0100_VAL" != 0 ]]; then
482                echo " Error from SMpro "
483        fi
484        if [[ "$REG7E_0200_VAL" != 0 ]]; then
485                echo " Error from PMpro "
486        fi
487
488        # GPI Mask Regs
489        getGPIMaskRegisters
490        echo "  "
491        echo " GPI Mask Regs "
492
493        getReg50Vals
494        echo "  "
495        echo " GPI Control #0: "
496
497        if [[ "$REG50_0400_VAL" != 0 ]]; then
498                echo " Platform Booting "
499        fi
500        if [[ "$REG50_0800_VAL" != 0 ]]; then
501                echo " Critical Stop "
502        fi
503
504        getReg51Vals
505        echo "  "
506        echo " GPI Control #1: "
507
508        if [[ "$REG51_0100_VAL" != 0 ]]; then
509                echo " SoC VR HOT/Warn/Fault "
510        fi
511        if [[ "$REG51_0200_VAL" != 0 ]]; then
512                echo " Core VR HOT/Warn/Fault "
513        fi
514        if [[ "$REG51_0400_VAL" != 0 ]]; then
515                echo " DIMM VRD HOT/Warn/Fault "
516        fi
517
518        getReg52Vals
519        echo "  "
520        echo " GPI Control #2: "
521
522        if [[ "$REG52_0100_VAL" != 0 ]]; then
523                echo " DIMM HOT "
524        fi
525
526        getReg53Vals
527        echo "  "
528        echo " GPI Control #3: "
529        if [[ "$REG53_0100_VAL" != 0 ]]; then
530                echo " Core Errors "
531        fi
532        if [[ "$REG53_0200_VAL" != 0 ]]; then
533                echo " Memory Errors "
534        fi
535        if [[ "$REG53_0800_VAL" != 0 ]]; then
536                echo " PCIe Errors "
537        fi
538        if [[ "$REG53_2000_VAL" != 0 ]]; then
539                echo " Other SoC Errors "
540        fi
541        if [[ "$REG53_4000_VAL" != 0 ]]; then
542                echo " ACPI State Change "
543        fi
544        if [[ "$REG53_8000_VAL" != 0 ]]; then
545                echo " Boot Errors "
546        fi
547        if [[ "$REG53_0001_VAL" != 0 ]]; then
548                echo " RAS Internal Error "
549        fi
550
551        getReg54Vals
552        echo "  "
553        echo " GPI CE/UE Mask: "
554        if [[ "$REG54_0100_VAL" != 0 ]]; then
555                echo " Core CE "
556        fi
557        if [[ "$REG54_0200_VAL" != 0 ]]; then
558                echo " Core UE "
559        fi
560        if [[ "$REG54_0001_VAL" != 0 ]]; then
561                echo " DIMM CE "
562        fi
563        if [[ "$REG54_0002_VAL" != 0 ]]; then
564                echo " DIMM UE "
565        fi
566        if [[ "$REG54_0004_VAL" != 0 ]]; then
567                echo " PCIe CE "
568        fi
569        if [[ "$REG54_0008_VAL" != 0 ]]; then
570                echo " PCIe UE "
571        fi
572        if [[ "$REG54_0010_VAL" != 0 ]]; then
573                echo " Other CE "
574        fi
575        if [[ "$REG54_0020_VAL" != 0 ]]; then
576                echo " Other UE "
577        fi
578
579fi
580