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