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