blob: 0c14627d2f70e9f9efa8f39fcce827d582207d1a [file] [log] [blame]
Gunnar Millsf15b0e92017-10-30 16:43:57 -05001# Witherspoon fan error policy for PDM.
2#
Matt Spinlerc33f0352017-11-02 11:24:22 -05003# * Create a NotPresent error if fan 0, 1, 2, or 3 is not present for more
4# than 20 seconds.
5# * Create a Nonfunctional error if fan 0, 1, 2, or 3 is not
6# functional for any amount of time.
7#
Gunnar Millsf15b0e92017-10-30 16:43:57 -05008# The system must be powered on in both of these cases.
9# If a water cooled system, don't create errors for fan 1.
10# Note: An error is created each time the chassis powers on.
Matt Spinlerc33f0352017-11-02 11:24:22 -050011#
Matt Spinler15246a42018-06-04 16:25:43 -050012# * Watch for fans to become both present and functional, and then resolve
13# their errors
Gunnar Millsf15b0e92017-10-30 16:43:57 -050014
15- name: fan0
16 class: group
17 group: path
18 members:
19 - meta: FAN
20 path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0
21
22- name: fan1
23 class: group
24 group: path
25 members:
26 - meta: FAN
27 path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1
28
29- name: fan2
30 class: group
31 group: path
32 members:
33 - meta: FAN
34 path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2
35
36- name: fan3
37 class: group
38 group: path
39 members:
40 - meta: FAN
41 path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3
42
43- name: chassis state
44 description: >
45 'Witherspoon has a single chassis to monitor.'
46 class: group
47 group: path
48 members:
49 - meta: CHASSISSTATE
50 path: /xyz/openbmc_project/state/chassis0
51
52- name: chassis
53 description: >
54 'Witherspoon has a single chassis to monitor.'
55 class: group
56 group: path
57 members:
58 - meta: CHASSIS
59 path: /xyz/openbmc_project/inventory/system/chassis
60
61
62- name: fan present
63 description: >
64 'Monitor the presence state of each fan.'
65 class: group
66 group: property
67 type: boolean
68 members:
69 - interface: xyz.openbmc_project.Inventory.Item
70 meta: PRESENT
71 property: Present
72
73- name: fan functional
74 description: >
75 'Monitor the functional state of each fan.'
76 class: group
77 group: property
78 type: boolean
79 members:
80 - interface: xyz.openbmc_project.State.Decorator.OperationalStatus
81 meta: FUNCTIONAL
82 property: Functional
83
Matt Spinler15246a42018-06-04 16:25:43 -050084- name: fan present and functional
85 description: >
86 'Monitor the present and functional state of each fan.'
87 class: group
88 group: property
89 type: boolean
90 members:
91 - interface: xyz.openbmc_project.Inventory.Item
92 meta: PRESENT
93 property: Present
94 - interface: xyz.openbmc_project.State.Decorator.OperationalStatus
95 meta: FUNCTIONAL
96 property: Functional
97
Gunnar Millsf15b0e92017-10-30 16:43:57 -050098- name: chassis powered
99 description: >
100 'Monitor the chassis power state.'
101 class: group
102 group: property
103 type: string
104 members:
105 - interface: xyz.openbmc_project.State.Chassis
106 meta: CHASSIS_STATE
107 property: CurrentPowerState
108
109- name: chassis air cooled
110 description: >
111 'The chassis cooling type.'
112 class: group
113 group: property
114 type: boolean
115 members:
116 - interface: xyz.openbmc_project.Inventory.Decorator.CoolingType
117 meta: COOLING_TYPE
118 property: WaterCooled
119
120- name: watch chassis state
121 description: >
122 'Trigger logic on chassis power state changes.'
123 class: watch
124 watch: property
125 paths: chassis state
126 properties: chassis powered
127 callback: check power
128
129- name: watch fan0 presence
130 description: >
131 'Trigger logic on fan0 presence state changes.'
132 class: watch
133 watch: property
134 paths: fan0
135 properties: fan present
136 callback: check power fan0 presence
137
138- name: watch fan0 functional
139 description: >
140 'Trigger logic on fan0 functional state changes.'
141 class: watch
142 watch: property
143 paths: fan0
144 properties: fan functional
145 callback: check power fan0 functional
146
147- name: watch fan1 presence
148 description: >
149 'Trigger logic on fan1 presence state changes.'
150 class: watch
151 watch: property
152 paths: fan1
153 properties: fan present
154 callback: check power fan1 presence
155
156- name: watch fan1 functional
157 description: >
158 'Trigger logic on fan1 functional state changes.'
159 class: watch
160 watch: property
161 paths: fan1
162 properties: fan functional
163 callback: check power fan1 functional
164
165- name: watch fan2 presence
166 description: >
167 'Trigger logic on fan2 presence state changes.'
168 class: watch
169 watch: property
170 paths: fan2
171 properties: fan present
172 callback: check power fan2 presence
173
174- name: watch fan2 functional
175 description: >
176 'Trigger logic on fan2 functional state changes.'
177 class: watch
178 watch: property
179 paths: fan2
180 properties: fan functional
181 callback: check power fan2 functional
182
183- name: watch fan3 presence
184 description: >
185 'Trigger logic on fan3 presence state changes.'
186 class: watch
187 watch: property
188 paths: fan3
189 properties: fan present
190 callback: check power fan3 presence
191
192- name: watch fan3 functional
193 description: >
194 'Trigger logic on fan3 functional state changes.'
195 class: watch
196 watch: property
197 paths: fan3
198 properties: fan functional
199 callback: check power fan3 functional
200
Matt Spinler15246a42018-06-04 16:25:43 -0500201- name: watch fan0 present and functional for resolving error logs
Matt Spinlerc33f0352017-11-02 11:24:22 -0500202 description: >
Matt Spinler15246a42018-06-04 16:25:43 -0500203 'On fan present or functional state changes, check if errors need to be resolved.'
Matt Spinlerc33f0352017-11-02 11:24:22 -0500204 class: watch
205 watch: property
206 paths: fan0
Matt Spinler15246a42018-06-04 16:25:43 -0500207 properties: fan present and functional
208 callback: resolve fan0 errors if present and functional
Matt Spinlerc33f0352017-11-02 11:24:22 -0500209
Matt Spinler15246a42018-06-04 16:25:43 -0500210- name: watch fan1 present and functional for resolving error logs
Matt Spinlerc33f0352017-11-02 11:24:22 -0500211 description: >
Matt Spinler15246a42018-06-04 16:25:43 -0500212 'On fan present or functional state changes, check if errors need to be resolved.'
Matt Spinlerc33f0352017-11-02 11:24:22 -0500213 class: watch
214 watch: property
215 paths: fan1
Matt Spinler15246a42018-06-04 16:25:43 -0500216 properties: fan present and functional
217 callback: resolve fan1 errors if present and functional
Matt Spinlerc33f0352017-11-02 11:24:22 -0500218
Matt Spinler15246a42018-06-04 16:25:43 -0500219- name: watch fan2 present and functional for resolving error logs
Matt Spinlerc33f0352017-11-02 11:24:22 -0500220 description: >
Matt Spinler15246a42018-06-04 16:25:43 -0500221 'On fan present or functional state changes, check if errors need to be resolved.'
Matt Spinlerc33f0352017-11-02 11:24:22 -0500222 class: watch
223 watch: property
224 paths: fan2
Matt Spinler15246a42018-06-04 16:25:43 -0500225 properties: fan present and functional
226 callback: resolve fan2 errors if present and functional
Matt Spinlerc33f0352017-11-02 11:24:22 -0500227
Matt Spinler15246a42018-06-04 16:25:43 -0500228- name: watch fan3 present and functional for resolving error logs
Matt Spinlerc33f0352017-11-02 11:24:22 -0500229 description: >
Matt Spinler15246a42018-06-04 16:25:43 -0500230 'On fan present or functional state changes, check if errors need to be resolved.'
Matt Spinlerc33f0352017-11-02 11:24:22 -0500231 class: watch
232 watch: property
233 paths: fan3
Matt Spinler15246a42018-06-04 16:25:43 -0500234 properties: fan present and functional
235 callback: resolve fan3 errors if present and functional
Matt Spinlerc33f0352017-11-02 11:24:22 -0500236
Gunnar Millsf15b0e92017-10-30 16:43:57 -0500237- name: check power
238 description: >
239 'If the chassis has power, check all fans.'
240 class: condition
241 condition: count
242 paths: chassis state
243 properties: chassis powered
244 callback: check fans
245 countop: '>'
246 countbound: 0
247 op: '=='
248 bound: xyz.openbmc_project.State.Chassis.PowerState.On
249
250- name: check power fan0 presence
251 description: >
252 'If the chassis has power, check presence of fan0.'
253 class: condition
254 condition: count
255 paths: chassis state
256 properties: chassis powered
257 callback: check fan0 presence
258 countop: '>'
259 countbound: 0
260 op: '=='
261 bound: xyz.openbmc_project.State.Chassis.PowerState.On
262
263- name: check power fan0 functional
264 description: >
265 'If the chassis has power, check functional of fan0.'
266 class: condition
267 condition: count
268 paths: chassis state
269 properties: chassis powered
270 callback: check fan0 functional
271 countop: '>'
272 countbound: 0
273 op: '=='
274 bound: xyz.openbmc_project.State.Chassis.PowerState.On
275
276- name: check power fan1 presence
277 description: >
278 'If the chassis has power, check presence of fan1.'
279 class: condition
280 condition: count
281 paths: chassis state
282 properties: chassis powered
283 callback: check fan1 presence
284 countop: '>'
285 countbound: 0
286 op: '=='
287 bound: xyz.openbmc_project.State.Chassis.PowerState.On
288
289- name: check power fan1 functional
290 description: >
291 'If the chassis has power, check functional of fan1.'
292 class: condition
293 condition: count
294 paths: chassis state
295 properties: chassis powered
296 callback: check fan1 functional
297 countop: '>'
298 countbound: 0
299 op: '=='
300 bound: xyz.openbmc_project.State.Chassis.PowerState.On
301
302- name: check power fan2 presence
303 description: >
304 'If the chassis has power, check presence of fan2.'
305 class: condition
306 condition: count
307 paths: chassis state
308 properties: chassis powered
309 callback: check fan2 presence
310 countop: '>'
311 countbound: 0
312 op: '=='
313 bound: xyz.openbmc_project.State.Chassis.PowerState.On
314
315- name: check power fan2 functional
316 description: >
317 'If the chassis has power, check functional of fan2.'
318 class: condition
319 condition: count
320 paths: chassis state
321 properties: chassis powered
322 callback: check fan2 functional
323 countop: '>'
324 countbound: 0
325 op: '=='
326 bound: xyz.openbmc_project.State.Chassis.PowerState.On
327
328- name: check power fan3 presence
329 description: >
330 'If the chassis has power, check presence of fan3.'
331 class: condition
332 condition: count
333 paths: chassis state
334 properties: chassis powered
335 callback: check fan3 presence
336 countop: '>'
337 countbound: 0
338 op: '=='
339 bound: xyz.openbmc_project.State.Chassis.PowerState.On
340
341- name: check power fan3 functional
342 description: >
343 'If the chassis has power, check functional of fan3.'
344 class: condition
345 condition: count
346 paths: chassis state
347 properties: chassis powered
348 callback: check fan3 functional
349 countop: '>'
350 countbound: 0
351 op: '=='
352 bound: xyz.openbmc_project.State.Chassis.PowerState.On
353
354- name: check fans
355 description: >
356 'Verify each of the 3 fans are present.'
357 class: callback
358 callback: group
359 members:
360 - check fan0 presence
361 - check fan1 presence
362 - check fan2 presence
363 - check fan3 presence
364 - check fan0 functional
365 - check fan1 functional
366 - check fan2 functional
367 - check fan3 functional
368
369- name: check fan0 presence
370 description: >
371 'If this condition passes fan0 has been unplugged for more than 20 seconds.'
372 class: condition
373 condition: count
374 paths: fan0
375 properties: fan present
376 defer: 20000000us
377 callback: notpresent fan0 error
378 countop: '<'
379 countbound: 1
380 op: '=='
381 bound: true
382
383- name: check fan0 functional
384 description: >
385 'If this condition passes fan0 has been marked as nonfunctional.'
386 class: condition
387 condition: count
388 paths: fan0
389 properties: fan functional
390 callback: nonfunctional fan0 error
391 countop: '>'
392 countbound: 0
393 op: '=='
394 bound: false
395
396- name: check fan1 presence
397 description: >
398 'If this condition passes fan1 has been unplugged for more than 20 seconds.
399 Fan 1 is not in a water cooled Witherspoon, so check for cooling type
400 before creating an error.'
401 class: condition
402 condition: count
403 paths: fan1
404 properties: fan present
405 defer: 20000000us
406 callback: check cooling type notpresent error
407 countop: '<'
408 countbound: 1
409 op: '=='
410 bound: true
411
412- name: check fan1 functional
413 description: >
414 'If this condition passes fan1 has been marked as nonfunctional.
415 Fan 1 is not in a water cooled Witherspoon, so check for cooling type
416 before creating an error.'
417 class: condition
418 condition: count
419 paths: fan1
420 properties: fan functional
421 callback: check cooling type nonfunctional error
422 countop: '>'
423 countbound: 0
424 op: '=='
425 bound: false
426
427- name: check fan2 presence
428 description: >
429 'If this condition passes fan2 has been unplugged for more than 20 seconds.'
430 class: condition
431 condition: count
432 paths: fan2
433 properties: fan present
434 defer: 20000000us
435 callback: notpresent fan2 error
436 countop: '<'
437 countbound: 1
438 op: '=='
439 bound: true
440
441- name: check fan2 functional
442 description: >
443 'If this condition passes fan2 has been marked as nonfunctional.'
444 class: condition
445 condition: count
446 paths: fan2
447 properties: fan functional
448 callback: nonfunctional fan2 error
449 countop: '>'
450 countbound: 0
451 op: '=='
452 bound: false
453
454- name: check fan3 presence
455 description: >
456 'If this condition passes fan3 has been unplugged for more than 20 seconds.'
457 class: condition
458 condition: count
459 paths: fan3
460 properties: fan present
461 defer: 20000000us
462 callback: notpresent fan3 error
463 countop: '<'
464 countbound: 1
465 op: '=='
466 bound: true
467
468- name: check fan3 functional
469 description: >
470 'If this condition passes fan3 has been marked as nonfunctional.'
471 class: condition
472 condition: count
473 paths: fan3
474 properties: fan functional
475 callback: nonfunctional fan3 error
476 countop: '>'
477 countbound: 0
478 op: '=='
479 bound: false
480
481- name: check cooling type nonfunctional error
482 description: >
483 'If this condition passes the chassis is air cooled and will create a
484 nonfunctional error for fan 1.'
485 class: condition
486 condition: count
487 paths: chassis
488 properties: chassis air cooled
489 callback: nonfunctional fan1 error
490 countop: '=='
491 countbound: 0
492 op: '=='
493 bound: true
494
495- name: check cooling type notpresent error
496 description: >
497 'If this condition passes the chassis is air cooled and will create a
498 notpresent error for fan 1.'
499 class: condition
500 condition: count
501 paths: chassis
502 properties: chassis air cooled
503 callback: notpresent fan1 error
504 countop: '=='
505 countbound: 0
506 op: '=='
507 bound: true
508
509- name: notpresent fan0 error
510 class: callback
511 callback: elog
512 paths: fan0
513 properties: fan present
514 error: xyz::openbmc_project::Inventory::Error::NotPresent
515 metadata:
516 - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH
517 value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0
518 type: string
519
520- name: nonfunctional fan0 error
521 class: callback
522 callback: elog
523 paths: fan0
524 properties: fan functional
525 error: xyz::openbmc_project::Inventory::Error::Nonfunctional
526 metadata:
527 - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH
528 value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0
529 type: string
530
531- name: notpresent fan1 error
532 class: callback
533 callback: elog
534 paths: fan1
535 properties: fan present
536 error: xyz::openbmc_project::Inventory::Error::NotPresent
537 metadata:
538 - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH
539 value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1
540 type: string
541
542- name: nonfunctional fan1 error
543 class: callback
544 callback: elog
545 paths: fan1
546 properties: fan functional
547 error: xyz::openbmc_project::Inventory::Error::Nonfunctional
548 metadata:
549 - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH
550 value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1
551 type: string
552
553- name: notpresent fan2 error
554 class: callback
555 callback: elog
556 paths: fan2
557 properties: fan present
558 error: xyz::openbmc_project::Inventory::Error::NotPresent
559 metadata:
560 - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH
561 value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2
562 type: string
563
564- name: nonfunctional fan2 error
565 class: callback
566 callback: elog
567 paths: fan2
568 properties: fan functional
569 error: xyz::openbmc_project::Inventory::Error::Nonfunctional
570 metadata:
571 - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH
572 value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2
573 type: string
574
575- name: notpresent fan3 error
576 class: callback
577 callback: elog
578 paths: fan3
579 properties: fan present
580 error: xyz::openbmc_project::Inventory::Error::NotPresent
581 metadata:
582 - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH
583 value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3
584 type: string
585
586- name: nonfunctional fan3 error
587 class: callback
588 callback: elog
589 paths: fan3
590 properties: fan functional
591 error: xyz::openbmc_project::Inventory::Error::Nonfunctional
592 metadata:
593 - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH
594 value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3
595 type: string
596
Matt Spinler15246a42018-06-04 16:25:43 -0500597- name: resolve fan0 errors if present and functional
Matt Spinlerc33f0352017-11-02 11:24:22 -0500598 description: >
Matt Spinler15246a42018-06-04 16:25:43 -0500599 'If fan0 is present and functional, call the resolve fan0 errors callback.'
Matt Spinlerc33f0352017-11-02 11:24:22 -0500600 class: condition
601 condition: count
602 paths: fan0
Matt Spinler15246a42018-06-04 16:25:43 -0500603 properties: fan present and functional
Matt Spinlerc33f0352017-11-02 11:24:22 -0500604 callback: resolve fan0 errors
Matt Spinler15246a42018-06-04 16:25:43 -0500605 countop: '=='
606 countbound: 2
Matt Spinlerc33f0352017-11-02 11:24:22 -0500607 op: '=='
608 bound: true
609
610#Go ahead and do this on water cooled as well
Matt Spinler15246a42018-06-04 16:25:43 -0500611- name: resolve fan1 errors if present and functional
Matt Spinlerc33f0352017-11-02 11:24:22 -0500612 description: >
Matt Spinler15246a42018-06-04 16:25:43 -0500613 'If fan1 is present and functional, call the resolve fan1 errors callback.'
Matt Spinlerc33f0352017-11-02 11:24:22 -0500614 class: condition
615 condition: count
616 paths: fan1
Matt Spinler15246a42018-06-04 16:25:43 -0500617 properties: fan present and functional
Matt Spinlerc33f0352017-11-02 11:24:22 -0500618 callback: resolve fan1 errors
Matt Spinler15246a42018-06-04 16:25:43 -0500619 countop: '=='
620 countbound: 2
Matt Spinlerc33f0352017-11-02 11:24:22 -0500621 op: '=='
622 bound: true
623
Matt Spinler15246a42018-06-04 16:25:43 -0500624- name: resolve fan2 errors if present and functional
Matt Spinlerc33f0352017-11-02 11:24:22 -0500625 description: >
Matt Spinler15246a42018-06-04 16:25:43 -0500626 'If fan2 is present and functional, call the resolve fan2 errors callback.'
Matt Spinlerc33f0352017-11-02 11:24:22 -0500627 class: condition
628 condition: count
629 paths: fan2
Matt Spinler15246a42018-06-04 16:25:43 -0500630 properties: fan present and functional
Matt Spinlerc33f0352017-11-02 11:24:22 -0500631 callback: resolve fan2 errors
Matt Spinler15246a42018-06-04 16:25:43 -0500632 countop: '=='
633 countbound: 2
Matt Spinlerc33f0352017-11-02 11:24:22 -0500634 op: '=='
635 bound: true
636
Matt Spinler15246a42018-06-04 16:25:43 -0500637- name: resolve fan3 errors if present and functional
Matt Spinlerc33f0352017-11-02 11:24:22 -0500638 description: >
Matt Spinler15246a42018-06-04 16:25:43 -0500639 'If fan3 is present and functional, call the resolve fan3 errors callback.'
Matt Spinlerc33f0352017-11-02 11:24:22 -0500640 class: condition
641 condition: count
642 paths: fan3
Matt Spinler15246a42018-06-04 16:25:43 -0500643 properties: fan present and functional
Matt Spinlerc33f0352017-11-02 11:24:22 -0500644 callback: resolve fan3 errors
Matt Spinler15246a42018-06-04 16:25:43 -0500645 countop: '=='
646 countbound: 2
Matt Spinlerc33f0352017-11-02 11:24:22 -0500647 op: '=='
648 bound: true
649
650- name: resolve fan0 errors
651 class: callback
652 callback: resolve callout
653 paths: fan0
Matt Spinler15246a42018-06-04 16:25:43 -0500654 properties: fan present and functional
Matt Spinlerc33f0352017-11-02 11:24:22 -0500655 callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0
656
657- name: resolve fan1 errors
658 class: callback
659 callback: resolve callout
660 paths: fan1
Matt Spinler15246a42018-06-04 16:25:43 -0500661 properties: fan present and functional
Matt Spinlerc33f0352017-11-02 11:24:22 -0500662 callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1
663
664- name: resolve fan2 errors
665 class: callback
666 callback: resolve callout
667 paths: fan2
Matt Spinler15246a42018-06-04 16:25:43 -0500668 properties: fan present and functional
Matt Spinlerc33f0352017-11-02 11:24:22 -0500669 callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2
670
671- name: resolve fan3 errors
672 class: callback
673 callback: resolve callout
674 paths: fan3
Matt Spinler15246a42018-06-04 16:25:43 -0500675 properties: fan present and functional
Matt Spinlerc33f0352017-11-02 11:24:22 -0500676 callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3