1[
2    {
3        // Hold fans at the given target when a number of fans are missing.
4        "name": "fan(s) missing",
5        "groups": [
6            {
7                "name": "fan inventory",
8                "interface": "xyz.openbmc_project.Inventory.Item",
9                "property": { "name": "Present" }
10            }
11        ],
12        "triggers": [
13            {
14                "class": "init",
15                "method": "get_properties"
16            },
17            {
18                "class": "signal",
19                "signal": "properties_changed"
20            }
21        ],
22        "actions": [
23            {
24                "name": "count_state_before_target",
25                "count": 1,
26                "state": false,
27                "target": 10400
28            }
29        ]
30    },
31    {
32        // Hold fans at the given target when a number of rotors are nonfunctional.
33        "name": "fan rotor(s) faulted",
34        "groups": [
35            {
36                "name": "fan0 rotor inventory",
37                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
38                "property": { "name": "Functional" }
39            },
40            {
41                "name": "fan1 rotor inventory",
42                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
43                "property": { "name": "Functional" }
44            },
45            {
46                "name": "fan2 rotor inventory",
47                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
48                "property": { "name": "Functional" }
49            },
50            {
51                "name": "fan3 rotor inventory",
52                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
53                "property": { "name": "Functional" }
54            },
55            {
56                "name": "fan4 rotor inventory",
57                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
58                "property": { "name": "Functional" }
59            },
60            {
61                "name": "fan5 rotor inventory",
62                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
63                "property": { "name": "Functional" }
64            }
65        ],
66        "triggers": [
67            {
68                "class": "init",
69                "method": "get_properties"
70            },
71            {
72                "class": "signal",
73                "signal": "properties_changed"
74            }
75        ],
76        "actions": [
77            {
78                "name": "count_state_before_target",
79                "count": 1,
80                "state": false,
81                "target": 10400
82            }
83        ]
84    },
85    {
86        // Hold fans at the given target when any critical service
87        // is not running for 5 seconds.
88        "name": "service(s) missing",
89        "groups": [
90            {
91                "name": "fan inventory",
92                "interface": "xyz.openbmc_project.Inventory.Item",
93                "property": { "name": "Present" }
94            },
95            {
96                "name": "occ objects",
97                "interface": "org.open_power.OCC.Status",
98                "property": { "name": "OccActive" }
99            },
100            {
101                "name": "nvme temps",
102                "interface": "xyz.openbmc_project.Sensor.Value",
103                "property": { "name": "Value" }
104            },
105            {
106                "name": "planar temps",
107                "interface": "xyz.openbmc_project.Sensor.Value",
108                "property": { "name": "Value" }
109            },
110            {
111                "name": "flett temps",
112                "interface": "xyz.openbmc_project.Sensor.Value",
113                "property": { "name": "Value" }
114            },
115            {
116                "name": "pcie cable card temps",
117                "interface": "xyz.openbmc_project.Sensor.Value",
118                "property": { "name": "Value" }
119            },
120            {
121                "name": "ambient temp",
122                "interface": "xyz.openbmc_project.Sensor.Value",
123                "property": { "name": "Value" }
124            }
125        ],
126        "triggers": [
127            {
128                "class": "init",
129                "method": "name_has_owner"
130            },
131            {
132                "class": "signal",
133                "signal": "name_owner_changed"
134            }
135        ],
136        "actions": [
137            {
138                "name": "call_actions_based_on_timer",
139                "timer": {
140                    "interval": 5000000,
141                    "type": "oneshot"
142                },
143                "actions": [
144                    {
145                        "name": "set_target_on_missing_owner",
146                        "groups": [
147                            {
148                                "name": "fan inventory",
149                                "interface": "xyz.openbmc_project.Inventory.Item",
150                                "property": { "name": "Present" }
151                            },
152                            {
153                                "name": "occ objects",
154                                "interface": "org.open_power.OCC.Status",
155                                "property": { "name": "OccActive" }
156                            },
157                            {
158                                "name": "nvme temps",
159                                "interface": "xyz.openbmc_project.Sensor.Value",
160                                "property": { "name": "Value" }
161                            },
162                            {
163                                "name": "planar temps",
164                                "interface": "xyz.openbmc_project.Sensor.Value",
165                                "property": { "name": "Value" }
166                            },
167                            {
168                                "name": "flett temps",
169                                "interface": "xyz.openbmc_project.Sensor.Value",
170                                "property": { "name": "Value" }
171                            },
172                            {
173                                "name": "pcie cable card temps",
174                                "interface": "xyz.openbmc_project.Sensor.Value",
175                                "property": { "name": "Value" }
176                            },
177                            {
178                                "name": "ambient temp",
179                                "interface": "xyz.openbmc_project.Sensor.Value",
180                                "property": { "name": "Value" }
181                            }
182                        ],
183                        "target": 10400
184                    }
185                ]
186            }
187        ]
188    },
189    {
190        // Set a fan floor if an OCC isn't active
191        "name": "Non-active OCCs",
192        "groups": [
193            {
194                "name": "occ objects",
195                "interface": "org.open_power.OCC.Status",
196                "property": {
197                    "name": "OccActive"
198                }
199            }
200        ],
201        "triggers": [
202            {
203                "class": "signal",
204                "signal": "properties_changed"
205            },
206            {
207                "class": "signal",
208                "signal": "interfaces_added"
209            },
210            {
211                "class": "init",
212                "method": "get_properties"
213            }
214        ],
215        "actions": [
216            {
217                "name": "count_state_floor",
218                "count": 1,
219                "state": false,
220                "floor": 10400
221            }
222        ]
223    },
224    {
225        // Set a raised fan floor when any temperature sensor is nonfunctional
226        "name": "Nonfunctional temperature sensors",
227        "groups": [
228            {
229                "name": "proc0 core temps",
230                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
231                "property": { "name": "Functional" }
232            },
233            {
234                "name": "proc1 core temps",
235                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
236                "property": { "name": "Functional" }
237            },
238            {
239                "name": "proc2 core temps",
240                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
241                "property": { "name": "Functional" }
242            },
243            {
244                "name": "proc3 core temps",
245                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
246                "property": { "name": "Functional" }
247            },
248            {
249                "name": "proc0 ioring temp",
250                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
251                "property": { "name": "Functional" }
252            },
253            {
254                "name": "proc1 ioring temp",
255                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
256                "property": { "name": "Functional" }
257            },
258            {
259                "name": "proc2 ioring temp",
260                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
261                "property": { "name": "Functional" }
262            },
263            {
264                "name": "proc3 ioring temp",
265                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
266                "property": { "name": "Functional" }
267            },
268            {
269                "name": "dram temps",
270                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
271                "property": { "name": "Functional" }
272            },
273            {
274                "name": "pmic temps",
275                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
276                "property": { "name": "Functional" }
277            },
278            {
279                "name": "internal memory buffer temps",
280                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
281                "property": { "name": "Functional" }
282            },
283            {
284                "name": "dram and external memory buffer temps",
285                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
286                "property": { "name": "Functional" }
287            },
288            {
289                "name": "external memory buffer temps",
290                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
291                "property": { "name": "Functional" }
292            },
293            {
294                "name": "vdd vrm temps",
295                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
296                "property": { "name": "Functional" }
297            },
298            {
299                "name": "nvme temps",
300                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
301                "property": { "name": "Functional" }
302            },
303            {
304                "name": "planar temps",
305                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
306                "property": { "name": "Functional" }
307            },
308            {
309                "name": "flett temps",
310                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
311                "property": { "name": "Functional" }
312            },
313            {
314                "name": "pcie cable card temps",
315                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
316                "property": { "name": "Functional" }
317            },
318            {
319                "name": "ambient temp",
320                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
321                "property": { "name": "Functional" }
322            }
323        ],
324        "triggers": [
325            {
326                "class": "signal",
327                "signal": "properties_changed"
328            },
329            {
330                "class": "signal",
331                "signal": "interfaces_added"
332            },
333            {
334                "class": "signal",
335                "signal": "interfaces_removed"
336            },
337            {
338                "class": "init",
339                "method": "get_properties"
340            }
341        ],
342        "actions": [
343            {
344                "name": "count_state_floor",
345                "count": 1,
346                "state": false,
347                "delay": 5,
348                "floor": 10400
349            }
350        ]
351    },
352    {
353        "name": "Set Proc 0 Core DVFS parameter",
354        "groups": [
355            {
356                "name": "proc 0 core dvfs temp",
357                "interface": "xyz.openbmc_project.Sensor.Value",
358                "property": { "name": "Value" }
359            }
360        ],
361        "triggers": [
362            {
363                "class": "init",
364                "method": "get_properties"
365            },
366            {
367                "class": "signal",
368                "signal": "interfaces_added"
369            },
370            {
371                "class": "signal",
372                "signal": "properties_changed"
373            }
374        ],
375        "actions": [
376            {
377                "name": "set_parameter_from_group_max",
378                "parameter_name": "proc_0_core_dvfs_increase_temp",
379                "modifier": {
380                    "operator": "minus",
381                    "value": 10
382                }
383            },
384            {
385                "name": "set_parameter_from_group_max",
386                "parameter_name": "proc_0_core_dvfs_decrease_temp",
387                "modifier": {
388                    "operator": "minus",
389                    "value": 13
390                }
391            }
392        ]
393    },
394    {
395        "name": "Set Proc 1 Core DVFS parameter",
396        "groups": [
397            {
398                "name": "proc 1 core dvfs temp",
399                "interface": "xyz.openbmc_project.Sensor.Value",
400                "property": { "name": "Value" }
401            }
402        ],
403        "triggers": [
404            {
405                "class": "init",
406                "method": "get_properties"
407            },
408            {
409                "class": "signal",
410                "signal": "interfaces_added"
411            },
412            {
413                "class": "signal",
414                "signal": "properties_changed"
415            }
416        ],
417        "actions": [
418            {
419                "name": "set_parameter_from_group_max",
420                "parameter_name": "proc_1_core_dvfs_increase_temp",
421                "modifier": {
422                    "operator": "minus",
423                    "value": 10
424                }
425            },
426            {
427                "name": "set_parameter_from_group_max",
428                "parameter_name": "proc_1_core_dvfs_decrease_temp",
429                "modifier": {
430                    "operator": "minus",
431                    "value": 13
432                }
433            }
434        ]
435    },
436    {
437        "name": "Set Proc 2 Core DVFS parameter",
438        "groups": [
439            {
440                "name": "proc 2 core dvfs temp",
441                "interface": "xyz.openbmc_project.Sensor.Value",
442                "property": { "name": "Value" }
443            }
444        ],
445        "triggers": [
446            {
447                "class": "init",
448                "method": "get_properties"
449            },
450            {
451                "class": "signal",
452                "signal": "interfaces_added"
453            },
454            {
455                "class": "signal",
456                "signal": "properties_changed"
457            }
458        ],
459        "actions": [
460            {
461                "name": "set_parameter_from_group_max",
462                "parameter_name": "proc_2_core_dvfs_increase_temp",
463                "modifier": {
464                    "operator": "minus",
465                    "value": 10
466                }
467            },
468            {
469                "name": "set_parameter_from_group_max",
470                "parameter_name": "proc_2_core_dvfs_decrease_temp",
471                "modifier": {
472                    "operator": "minus",
473                    "value": 13
474                }
475            }
476        ]
477    },
478    {
479        "name": "Set Proc 3 Core DVFS parameter",
480        "groups": [
481            {
482                "name": "proc 3 core dvfs temp",
483                "interface": "xyz.openbmc_project.Sensor.Value",
484                "property": { "name": "Value" }
485            }
486        ],
487        "triggers": [
488            {
489                "class": "init",
490                "method": "get_properties"
491            },
492            {
493                "class": "signal",
494                "signal": "interfaces_added"
495            },
496            {
497                "class": "signal",
498                "signal": "properties_changed"
499            }
500        ],
501        "actions": [
502            {
503                "name": "set_parameter_from_group_max",
504                "parameter_name": "proc_3_core_dvfs_increase_temp",
505                "modifier": {
506                    "operator": "minus",
507                    "value": 10
508                }
509            },
510            {
511                "name": "set_parameter_from_group_max",
512                "parameter_name": "proc_3_core_dvfs_decrease_temp",
513                "modifier": {
514                    "operator": "minus",
515                    "value": 13
516                }
517            }
518        ]
519    },
520    {
521        "name": "Set Proc 0 IO Ring DVFS parameter",
522        "groups": [
523            {
524                "name": "proc 0 ioring dvfs temp",
525                "interface": "xyz.openbmc_project.Sensor.Value",
526                "property": { "name": "Value" }
527            }
528        ],
529        "triggers": [
530            {
531                "class": "init",
532                "method": "get_properties"
533            },
534            {
535                "class": "signal",
536                "signal": "interfaces_added"
537            },
538            {
539                "class": "signal",
540                "signal": "properties_changed"
541            }
542        ],
543        "actions": [
544            {
545                "name": "set_parameter_from_group_max",
546                "parameter_name": "proc_0_ioring_dvfs_increase_temp",
547                "modifier": {
548                    "operator": "minus",
549                    "value": 10
550                }
551            },
552            {
553                "name": "set_parameter_from_group_max",
554                "parameter_name": "proc_0_ioring_dvfs_decrease_temp",
555                "modifier": {
556                    "operator": "minus",
557                    "value": 13
558                }
559            }
560        ]
561    },
562
563    {
564        "name": "Set Proc 1 IO Ring DVFS parameter",
565        "groups": [
566            {
567                "name": "proc 1 ioring dvfs temp",
568                "interface": "xyz.openbmc_project.Sensor.Value",
569                "property": { "name": "Value" }
570            }
571        ],
572        "triggers": [
573            {
574                "class": "init",
575                "method": "get_properties"
576            },
577            {
578                "class": "signal",
579                "signal": "interfaces_added"
580            },
581            {
582                "class": "signal",
583                "signal": "properties_changed"
584            }
585        ],
586        "actions": [
587            {
588                "name": "set_parameter_from_group_max",
589                "parameter_name": "proc_1_ioring_dvfs_increase_temp",
590                "modifier": {
591                    "operator": "minus",
592                    "value": 10
593                }
594            },
595            {
596                "name": "set_parameter_from_group_max",
597                "parameter_name": "proc_1_ioring_dvfs_decrease_temp",
598                "modifier": {
599                    "operator": "minus",
600                    "value": 13
601                }
602            }
603        ]
604    },
605    {
606        "name": "Set Proc 2 IO Ring DVFS parameter",
607        "groups": [
608            {
609                "name": "proc 2 ioring dvfs temp",
610                "interface": "xyz.openbmc_project.Sensor.Value",
611                "property": { "name": "Value" }
612            }
613        ],
614        "triggers": [
615            {
616                "class": "init",
617                "method": "get_properties"
618            },
619            {
620                "class": "signal",
621                "signal": "interfaces_added"
622            },
623            {
624                "class": "signal",
625                "signal": "properties_changed"
626            }
627        ],
628        "actions": [
629            {
630                "name": "set_parameter_from_group_max",
631                "parameter_name": "proc_2_ioring_dvfs_increase_temp",
632                "modifier": {
633                    "operator": "minus",
634                    "value": 10
635                }
636            },
637            {
638                "name": "set_parameter_from_group_max",
639                "parameter_name": "proc_2_ioring_dvfs_decrease_temp",
640                "modifier": {
641                    "operator": "minus",
642                    "value": 13
643                }
644            }
645        ]
646    },
647    {
648        "name": "Set Proc 3 IO Ring DVFS parameter",
649        "groups": [
650            {
651                "name": "proc 3 ioring dvfs temp",
652                "interface": "xyz.openbmc_project.Sensor.Value",
653                "property": { "name": "Value" }
654            }
655        ],
656        "triggers": [
657            {
658                "class": "init",
659                "method": "get_properties"
660            },
661            {
662                "class": "signal",
663                "signal": "interfaces_added"
664            },
665            {
666                "class": "signal",
667                "signal": "properties_changed"
668            }
669        ],
670        "actions": [
671            {
672                "name": "set_parameter_from_group_max",
673                "parameter_name": "proc_3_ioring_dvfs_increase_temp",
674                "modifier": {
675                    "operator": "minus",
676                    "value": 10
677                }
678            },
679            {
680                "name": "set_parameter_from_group_max",
681                "parameter_name": "proc_3_ioring_dvfs_decrease_temp",
682                "modifier": {
683                    "operator": "minus",
684                    "value": 13
685                }
686            }
687        ]
688    },
689    {
690        "name": "Set DRAM DVFS parameter",
691        "groups": [
692            {
693                "name": "dram dvfs temp",
694                "interface": "xyz.openbmc_project.Sensor.Value",
695                "property": { "name": "Value" }
696            }
697        ],
698        "triggers": [
699            {
700                "class": "init",
701                "method": "get_properties"
702            },
703            {
704                "class": "signal",
705                "signal": "properties_changed"
706            },
707            {
708                "class": "signal",
709                "signal": "interfaces_added"
710            }
711        ],
712        "actions": [
713            {
714                "name": "set_parameter_from_group_max",
715                "parameter_name": "dram_dvfs_increase_temp",
716                "modifier": {
717                    "operator": "minus",
718                    "value": 10
719                }
720            },
721            {
722                "name": "set_parameter_from_group_max",
723                "parameter_name": "dram_dvfs_decrease_temp",
724                "modifier": {
725                    "operator": "minus",
726                    "value": 13
727                }
728            }
729        ]
730    },
731    {
732        "name": "Set PMIC DVFS parameter",
733        "groups": [
734            {
735                "name": "pmic dvfs temp",
736                "interface": "xyz.openbmc_project.Sensor.Value",
737                "property": { "name": "Value" }
738            }
739        ],
740        "triggers": [
741            {
742                "class": "init",
743                "method": "get_properties"
744            },
745            {
746                "class": "signal",
747                "signal": "properties_changed"
748            },
749            {
750                "class": "signal",
751                "signal": "interfaces_added"
752            }
753        ],
754        "actions": [
755            {
756                "name": "set_parameter_from_group_max",
757                "parameter_name": "pmic_dvfs_increase_temp",
758                "modifier": {
759                    "operator": "minus",
760                    "value": 10
761                }
762            },
763            {
764                "name": "set_parameter_from_group_max",
765                "parameter_name": "pmic_dvfs_decrease_temp",
766                "modifier": {
767                    "operator": "minus",
768                    "value": 13
769                }
770            }
771        ]
772    },
773    {
774        "name": "Set internal memory buffer DVFS parameter",
775        "groups": [
776            {
777                "name": "internal memory buffer dvfs temp",
778                "interface": "xyz.openbmc_project.Sensor.Value",
779                "property": { "name": "Value" }
780            }
781        ],
782        "triggers": [
783            {
784                "class": "init",
785                "method": "get_properties"
786            },
787            {
788                "class": "signal",
789                "signal": "properties_changed"
790            },
791            {
792                "class": "signal",
793                "signal": "interfaces_added"
794            }
795        ],
796        "actions": [
797            {
798                "name": "set_parameter_from_group_max",
799                "parameter_name": "intmb_dvfs_increase_temp",
800                "modifier": {
801                    "operator": "minus",
802                    "value": 10
803                }
804            },
805            {
806                "name": "set_parameter_from_group_max",
807                "parameter_name": "intmb_dvfs_decrease_temp",
808                "modifier": {
809                    "operator": "minus",
810                    "value": 13
811                }
812            }
813        ]
814    },
815    {
816        "name": "Set DRAM and external memory buffer DVFS parameter",
817        "groups": [
818            {
819                "name": "dram and external memory buffer dvfs temp",
820                "interface": "xyz.openbmc_project.Sensor.Value",
821                "property": { "name": "Value" }
822            }
823        ],
824        "triggers": [
825            {
826                "class": "init",
827                "method": "get_properties"
828            },
829            {
830                "class": "signal",
831                "signal": "properties_changed"
832            },
833            {
834                "class": "signal",
835                "signal": "interfaces_added"
836            }
837        ],
838        "actions": [
839            {
840                "name": "set_parameter_from_group_max",
841                "parameter_name": "dram_extmb_dvfs_increase_temp",
842                "modifier": {
843                    "operator": "minus",
844                    "value": 10
845                }
846            },
847            {
848                "name": "set_parameter_from_group_max",
849                "parameter_name": "dram_extmb_dvfs_decrease_temp",
850                "modifier": {
851                    "operator": "minus",
852                    "value": 13
853                }
854            }
855        ]
856    },
857    {
858        "name": "Set external memory buffer DVFS parameter",
859        "groups": [
860            {
861                "name": "external memory buffer dvfs temp",
862                "interface": "xyz.openbmc_project.Sensor.Value",
863                "property": { "name": "Value" }
864            }
865        ],
866        "triggers": [
867            {
868                "class": "init",
869                "method": "get_properties"
870            },
871            {
872                "class": "signal",
873                "signal": "properties_changed"
874            },
875            {
876                "class": "signal",
877                "signal": "interfaces_added"
878            }
879        ],
880        "actions": [
881            {
882                "name": "set_parameter_from_group_max",
883                "parameter_name": "extmb_dvfs_increase_temp",
884                "modifier": {
885                    "operator": "minus",
886                    "value": 7
887                }
888            },
889            {
890                "name": "set_parameter_from_group_max",
891                "parameter_name": "extmb_dvfs_decrease_temp",
892                "modifier": {
893                    "operator": "minus",
894                    "value": 10
895                }
896            }
897        ]
898    },
899    {
900        // Collect group temperatures each iteration the repeating timer expires
901        "name": "Fan control timer loop",
902        "groups": [
903            {
904                "name": "proc0 core temps",
905                "interface": "xyz.openbmc_project.Sensor.Value",
906                "property": { "name": "Value" }
907            },
908            {
909                "name": "proc1 core temps",
910                "interface": "xyz.openbmc_project.Sensor.Value",
911                "property": { "name": "Value" }
912            },
913            {
914                "name": "proc2 core temps",
915                "interface": "xyz.openbmc_project.Sensor.Value",
916                "property": { "name": "Value" }
917            },
918            {
919                "name": "proc3 core temps",
920                "interface": "xyz.openbmc_project.Sensor.Value",
921                "property": { "name": "Value" }
922            },
923            {
924                "name": "proc0 ioring temp",
925                "interface": "xyz.openbmc_project.Sensor.Value",
926                "property": { "name": "Value" }
927            },
928            {
929                "name": "proc1 ioring temp",
930                "interface": "xyz.openbmc_project.Sensor.Value",
931                "property": { "name": "Value" }
932            },
933            {
934                "name": "proc2 ioring temp",
935                "interface": "xyz.openbmc_project.Sensor.Value",
936                "property": { "name": "Value" }
937            },
938            {
939                "name": "proc3 ioring temp",
940                "interface": "xyz.openbmc_project.Sensor.Value",
941                "property": { "name": "Value" }
942            },
943            {
944                "name": "dram temps",
945                "interface": "xyz.openbmc_project.Sensor.Value",
946                "property": { "name": "Value" }
947            },
948            {
949                "name": "pmic temps",
950                "interface": "xyz.openbmc_project.Sensor.Value",
951                "property": { "name": "Value" }
952            },
953            {
954                "name": "internal memory buffer temps",
955                "interface": "xyz.openbmc_project.Sensor.Value",
956                "property": { "name": "Value" }
957            },
958            {
959                "name": "dram and external memory buffer temps",
960                "interface": "xyz.openbmc_project.Sensor.Value",
961                "property": { "name": "Value" }
962            },
963            {
964                "name": "external memory buffer temps",
965                "interface": "xyz.openbmc_project.Sensor.Value",
966                "property": { "name": "Value" }
967            },
968            {
969                "name": "vdd vrm temps",
970                "interface": "xyz.openbmc_project.Sensor.Value",
971                "property": { "name": "Value" }
972            },
973            {
974                "name": "nvme temps",
975                "interface": "xyz.openbmc_project.Sensor.Value",
976                "property": { "name": "Value" }
977            },
978            {
979                "name": "planar temps",
980                "interface": "xyz.openbmc_project.Sensor.Value",
981                "property": { "name": "Value" }
982            },
983            {
984                "name": "flett temps",
985                "interface": "xyz.openbmc_project.Sensor.Value",
986                "property": { "name": "Value" }
987            },
988            {
989                "name": "pcie cable card temps",
990                "interface": "xyz.openbmc_project.Sensor.Value",
991                "property": { "name": "Value" }
992            }
993        ],
994        "triggers": [
995            {
996                "class": "timer",
997                "type": "repeating",
998                "interval": 2000000,
999                "preload_groups": true
1000            }
1001        ],
1002        "actions": [
1003            {
1004                "name": "set_net_increase_target",
1005                "groups": [
1006                    {
1007                        "name": "proc0 core temps",
1008                        "interface": "xyz.openbmc_project.Sensor.Value",
1009                        "property": { "name": "Value" }
1010                    }
1011                ],
1012                "state_parameter_name": "proc_0_core_dvfs_increase_temp",
1013                "delta": 300
1014            },
1015            {
1016                "name": "set_net_increase_target",
1017                "groups": [
1018                    {
1019                        "name": "proc1 core temps",
1020                        "interface": "xyz.openbmc_project.Sensor.Value",
1021                        "property": { "name": "Value" }
1022                    }
1023                ],
1024                "state_parameter_name": "proc_1_core_dvfs_increase_temp",
1025                "delta": 300
1026            },
1027            {
1028                "name": "set_net_increase_target",
1029                "groups": [
1030                    {
1031                        "name": "proc2 core temps",
1032                        "interface": "xyz.openbmc_project.Sensor.Value",
1033                        "property": { "name": "Value" }
1034                    }
1035                ],
1036                "state_parameter_name": "proc_2_core_dvfs_increase_temp",
1037                "delta": 300
1038            },
1039            {
1040                "name": "set_net_increase_target",
1041                "groups": [
1042                    {
1043                        "name": "proc3 core temps",
1044                        "interface": "xyz.openbmc_project.Sensor.Value",
1045                        "property": { "name": "Value" }
1046                    }
1047                ],
1048                "state_parameter_name": "proc_3_core_dvfs_increase_temp",
1049                "delta": 300
1050            },
1051            {
1052                "name": "set_net_increase_target",
1053                "groups": [
1054                    {
1055                        "name": "proc0 ioring temp",
1056                        "interface": "xyz.openbmc_project.Sensor.Value",
1057                        "property": { "name": "Value" }
1058                    }
1059                ],
1060                "state_parameter_name": "proc_0_ioring_dvfs_increase_temp",
1061                "delta": 300
1062            },
1063            {
1064                "name": "set_net_increase_target",
1065                "groups": [
1066                    {
1067                        "name": "proc1 ioring temp",
1068                        "interface": "xyz.openbmc_project.Sensor.Value",
1069                        "property": { "name": "Value" }
1070                    }
1071                ],
1072                "state_parameter_name": "proc_1_ioring_dvfs_increase_temp",
1073                "delta": 300
1074            },
1075            {
1076                "name": "set_net_increase_target",
1077                "groups": [
1078                    {
1079                        "name": "proc2 ioring temp",
1080                        "interface": "xyz.openbmc_project.Sensor.Value",
1081                        "property": { "name": "Value" }
1082                    }
1083                ],
1084                "state_parameter_name": "proc_2_ioring_dvfs_increase_temp",
1085                "delta": 300
1086            },
1087            {
1088                "name": "set_net_increase_target",
1089                "groups": [
1090                    {
1091                        "name": "proc3 ioring temp",
1092                        "interface": "xyz.openbmc_project.Sensor.Value",
1093                        "property": { "name": "Value" }
1094                    }
1095                ],
1096                "state_parameter_name": "proc_3_ioring_dvfs_increase_temp",
1097                "delta": 300
1098            },
1099            {
1100                "name": "set_net_increase_target",
1101                "groups": [
1102                    {
1103                        "name": "dram temps",
1104                        "interface": "xyz.openbmc_project.Sensor.Value",
1105                        "property": { "name": "Value" }
1106                    }
1107                ],
1108                "state_parameter_name": "dram_dvfs_increase_temp",
1109                "delta": 200
1110            },
1111            {
1112                "name": "set_net_increase_target",
1113                "groups": [
1114                    {
1115                        "name": "pmic temps",
1116                        "interface": "xyz.openbmc_project.Sensor.Value",
1117                        "property": { "name": "Value" }
1118                    }
1119                ],
1120                "state_parameter_name": "pmic_dvfs_increase_temp",
1121                "delta": 200
1122            },
1123            {
1124                "name": "set_net_increase_target",
1125                "groups": [
1126                    {
1127                        "name": "internal memory buffer temps",
1128                        "interface": "xyz.openbmc_project.Sensor.Value",
1129                        "property": { "name": "Value" }
1130                    }
1131                ],
1132                "state_parameter_name": "intmb_dvfs_increase_temp",
1133                "delta": 100
1134            },
1135            {
1136                "name": "set_net_increase_target",
1137                "groups": [
1138                    {
1139                        "name": "dram and external memory buffer temps",
1140                        "interface": "xyz.openbmc_project.Sensor.Value",
1141                        "property": { "name": "Value" }
1142                    }
1143                ],
1144                "state_parameter_name": "dram_extmb_dvfs_increase_temp",
1145                "delta": 200
1146            },
1147            {
1148                "name": "set_net_increase_target",
1149                "groups": [
1150                    {
1151                        "name": "external memory buffer temps",
1152                        "interface": "xyz.openbmc_project.Sensor.Value",
1153                        "property": { "name": "Value" }
1154                    }
1155                ],
1156                "state_parameter_name": "extmb_dvfs_increase_temp",
1157                "delta": 200
1158            },
1159            {
1160                "name": "set_net_increase_target",
1161                "groups": [
1162                    {
1163                        "name": "vdd vrm temps",
1164                        "interface": "xyz.openbmc_project.Sensor.Value",
1165                        "property": { "name": "Value" }
1166                    }
1167                ],
1168                "state": 82.0,
1169                "delta": 300
1170            },
1171            {
1172                "name": "set_net_increase_target",
1173                "groups": [
1174                    {
1175                        "name": "nvme temps",
1176                        "interface": "xyz.openbmc_project.Sensor.Value",
1177                        "property": { "name": "Value" }
1178                    }
1179                ],
1180                "state": 58.0,
1181                "delta": 200
1182            },
1183            {
1184                "name": "set_net_increase_target",
1185                "groups": [
1186                    {
1187                        "name": "planar temps",
1188                        "interface": "xyz.openbmc_project.Sensor.Value",
1189                        "property": { "name": "Value" }
1190                    }
1191                ],
1192                "state": 65.0,
1193                "delta": 255
1194            },
1195            {
1196                "name": "set_net_increase_target",
1197                "groups": [
1198                    {
1199                        "name": "flett temps",
1200                        "interface": "xyz.openbmc_project.Sensor.Value",
1201                        "property": { "name": "Value" }
1202                    }
1203                ],
1204                "state": 80.0,
1205                "delta": 200
1206            },
1207            {
1208                "name": "set_net_increase_target",
1209                "groups": [
1210                    {
1211                        "name": "pcie cable card temps",
1212                        "interface": "xyz.openbmc_project.Sensor.Value",
1213                        "property": { "name": "Value" }
1214                    }
1215                ],
1216                "state": 70.0,
1217                "delta": 255
1218            },
1219            {
1220                "name": "set_net_decrease_target",
1221                "groups": [
1222                    {
1223                        "name": "proc0 core temps",
1224                        "interface": "xyz.openbmc_project.Sensor.Value",
1225                        "property": { "name": "Value" }
1226                    }
1227                ],
1228                "state_parameter_name": "proc_0_core_dvfs_decrease_temp",
1229                "delta": 50
1230            },
1231            {
1232                "name": "set_net_decrease_target",
1233                "groups": [
1234                    {
1235                        "name": "proc1 core temps",
1236                        "interface": "xyz.openbmc_project.Sensor.Value",
1237                        "property": { "name": "Value" }
1238                    }
1239                ],
1240                "state_parameter_name": "proc_1_core_dvfs_decrease_temp",
1241                "delta": 50
1242            },
1243            {
1244                "name": "set_net_decrease_target",
1245                "groups": [
1246                    {
1247                        "name": "proc2 core temps",
1248                        "interface": "xyz.openbmc_project.Sensor.Value",
1249                        "property": { "name": "Value" }
1250                    }
1251                ],
1252                "state_parameter_name": "proc_2_core_dvfs_decrease_temp",
1253                "delta": 50
1254            },
1255            {
1256                "name": "set_net_decrease_target",
1257                "groups": [
1258                    {
1259                        "name": "proc3 core temps",
1260                        "interface": "xyz.openbmc_project.Sensor.Value",
1261                        "property": { "name": "Value" }
1262                    }
1263                ],
1264                "state_parameter_name": "proc_3_core_dvfs_decrease_temp",
1265                "delta": 50
1266            },
1267            {
1268                "name": "set_net_decrease_target",
1269                "groups": [
1270                    {
1271                        "name": "proc0 ioring temp",
1272                        "interface": "xyz.openbmc_project.Sensor.Value",
1273                        "property": { "name": "Value" }
1274                    }
1275                ],
1276                "state_parameter_name": "proc_0_ioring_dvfs_decrease_temp",
1277                "delta": 50
1278            },
1279            {
1280                "name": "set_net_decrease_target",
1281                "groups": [
1282                    {
1283                        "name": "proc1 ioring temp",
1284                        "interface": "xyz.openbmc_project.Sensor.Value",
1285                        "property": { "name": "Value" }
1286                    }
1287                ],
1288                "state_parameter_name": "proc_1_ioring_dvfs_decrease_temp",
1289                "delta": 50
1290            },
1291            {
1292                "name": "set_net_decrease_target",
1293                "groups": [
1294                    {
1295                        "name": "proc2 ioring temp",
1296                        "interface": "xyz.openbmc_project.Sensor.Value",
1297                        "property": { "name": "Value" }
1298                    }
1299                ],
1300                "state_parameter_name": "proc_2_ioring_dvfs_decrease_temp",
1301                "delta": 50
1302            },
1303            {
1304                "name": "set_net_decrease_target",
1305                "groups": [
1306                    {
1307                        "name": "proc3 ioring temp",
1308                        "interface": "xyz.openbmc_project.Sensor.Value",
1309                        "property": { "name": "Value" }
1310                    }
1311                ],
1312                "state_parameter_name": "proc_3_ioring_dvfs_decrease_temp",
1313                "delta": 50
1314            },
1315            {
1316                "name": "set_net_decrease_target",
1317                "groups": [
1318                    {
1319                        "name": "dram temps",
1320                        "interface": "xyz.openbmc_project.Sensor.Value",
1321                        "property": { "name": "Value" }
1322                    }
1323                ],
1324                "state_parameter_name": "dram_dvfs_decrease_temp",
1325                "delta": 50
1326            },
1327            {
1328                "name": "set_net_decrease_target",
1329                "groups": [
1330                    {
1331                        "name": "pmic temps",
1332                        "interface": "xyz.openbmc_project.Sensor.Value",
1333                        "property": { "name": "Value" }
1334                    }
1335                ],
1336                "state_parameter_name": "pmic_dvfs_decrease_temp",
1337                "delta": 50
1338            },
1339            {
1340                "name": "set_net_decrease_target",
1341                "groups": [
1342                    {
1343                        "name": "internal memory buffer temps",
1344                        "interface": "xyz.openbmc_project.Sensor.Value",
1345                        "property": { "name": "Value" }
1346                    }
1347                ],
1348                "state_parameter_name": "intmb_dvfs_decrease_temp",
1349                "delta": 50
1350            },
1351            {
1352                "name": "set_net_decrease_target",
1353                "groups": [
1354                    {
1355                        "name": "dram and external memory buffer temps",
1356                        "interface": "xyz.openbmc_project.Sensor.Value",
1357                        "property": { "name": "Value" }
1358                    }
1359                ],
1360                "state_parameter_name": "dram_extmb_dvfs_decrease_temp",
1361                "delta": 50
1362            },
1363            {
1364                "name": "set_net_decrease_target",
1365                "groups": [
1366                    {
1367                        "name": "external memory buffer temps",
1368                        "interface": "xyz.openbmc_project.Sensor.Value",
1369                        "property": { "name": "Value" }
1370                    }
1371                ],
1372                "state_parameter_name": "extmb_dvfs_decrease_temp",
1373                "delta": 50
1374            },
1375            {
1376                "name": "set_net_decrease_target",
1377                "groups": [
1378                    {
1379                        "name": "vdd vrm temps",
1380                        "interface": "xyz.openbmc_project.Sensor.Value",
1381                        "property": { "name": "Value" }
1382                    }
1383                ],
1384                "state": 79.0,
1385                "delta": 50
1386            },
1387            {
1388                "name": "set_net_decrease_target",
1389                "groups": [
1390                    {
1391                        "name": "nvme temps",
1392                        "interface": "xyz.openbmc_project.Sensor.Value",
1393                        "property": { "name": "Value" }
1394                    }
1395                ],
1396                "state": 55.0,
1397                "delta": 50
1398            },
1399            {
1400                "name": "set_net_decrease_target",
1401                "groups": [
1402                    {
1403                        "name": "planar temps",
1404                        "interface": "xyz.openbmc_project.Sensor.Value",
1405                        "property": { "name": "Value" }
1406                    }
1407                ],
1408                "state": 60.0,
1409                "delta": 50
1410            },
1411            {
1412                "name": "set_net_decrease_target",
1413                "groups": [
1414                    {
1415                        "name": "flett temps",
1416                        "interface": "xyz.openbmc_project.Sensor.Value",
1417                        "property": { "name": "Value" }
1418                    }
1419                ],
1420                "state": 75.0,
1421                "delta": 40
1422            },
1423            {
1424                "name": "set_net_decrease_target",
1425                "groups": [
1426                    {
1427                        "name": "pcie cable card temps",
1428                        "interface": "xyz.openbmc_project.Sensor.Value",
1429                        "property": { "name": "Value" }
1430                    }
1431                ],
1432                "state": 65.0,
1433                "delta": 50
1434            }
1435        ]
1436    },
1437    {
1438        // Remove NVMe temperature objects from cache when they are removed from
1439        // dbus. There's no need to react to their removal.
1440        "name": "remove nvme objects",
1441        "groups": [
1442            {
1443                "name": "nvme temps",
1444                "interface": "xyz.openbmc_project.Sensor.Value",
1445                "property": { "name": "Value" }
1446            },
1447            {
1448                "name": "nvme temps",
1449                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
1450                "property": { "name": "Functional" }
1451            }
1452        ],
1453        "triggers": [
1454            {
1455                "class": "signal",
1456                "signal": "interfaces_removed"
1457            }
1458        ]
1459    },
1460    {
1461        "name": "set pcie floor index",
1462        "groups": [
1463            {
1464                "name": "pcie slots",
1465                "interface": "xyz.openbmc_project.State.Decorator.PowerState",
1466                "property": {
1467                    "name": "PowerState"
1468                }
1469            },
1470            {
1471                "name": "pcie cards",
1472                "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
1473                "property": {
1474                    "name": "Function0DeviceId"
1475                }
1476            },
1477            {
1478                "name": "pcie cards",
1479                "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
1480                "property": {
1481                    "name": "Function0VendorId"
1482                }
1483            },
1484            {
1485                "name": "pcie cards",
1486                "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
1487                "property": {
1488                    "name": "Function0SubsystemId"
1489                }
1490            },
1491            {
1492                "name": "pcie cards",
1493                "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
1494                "property": {
1495                    "name": "Function0SubsystemVendorId"
1496                }
1497            }
1498        ],
1499        "triggers": [
1500            {
1501                "class": "init",
1502                "method": "get_properties"
1503            },
1504            {
1505                "class": "signal",
1506                "signal": "properties_changed"
1507            },
1508            {
1509                "class": "signal",
1510                "signal": "interfaces_added"
1511            }
1512        ],
1513        "actions": [
1514            {
1515                "name": "pcie_card_floors",
1516                "use_config_specific_files": true,
1517                "settle_time": 2
1518            }
1519        ]
1520    },
1521    {
1522        "name": "Set altitude offset parameter",
1523        "groups": [
1524            {
1525                "name": "altitude",
1526                "interface": "xyz.openbmc_project.Sensor.Value",
1527                "property": { "name": "Value" }
1528            }
1529        ],
1530        "triggers": [
1531            {
1532                "class": "init",
1533                "method": "get_properties"
1534            },
1535            {
1536                "class": "signal",
1537                "signal": "interfaces_added"
1538            },
1539            {
1540                // Refresh altitude every 24hrs
1541                "class": "timer",
1542                "type": "repeating",
1543                "interval": 86400000000,
1544                "preload_groups": true
1545            }
1546        ],
1547        "actions": [
1548            {
1549                "name": "set_parameter_from_group_max",
1550                "parameter_name": "altitude_offset",
1551                "modifier": {
1552                    "operator": "less_than",
1553                    "default_value": 3000,
1554                    "value": [
1555                        { "arg_value": 1000, "parameter_value": 0 },
1556                        { "arg_value": 1900, "parameter_value": 1000 },
1557                        { "arg_value": 2800, "parameter_value": 2000 }
1558                    ]
1559                }
1560            }
1561        ]
1562    },
1563    {
1564        "name": "Fan floors",
1565        "groups": [
1566            {
1567                "name": "ambient temp",
1568                "interface": "xyz.openbmc_project.Sensor.Value",
1569                "property": { "name": "Value" }
1570            },
1571            {
1572                "name": "power mode",
1573                "interface": "xyz.openbmc_project.Control.Power.Mode",
1574                "property": { "name": "PowerMode" }
1575            }
1576        ],
1577        "triggers": [
1578            {
1579                "class": "init",
1580                "method": "get_properties"
1581            },
1582            {
1583                "class": "signal",
1584                "signal": "properties_changed"
1585            },
1586            {
1587                "class": "signal",
1588                "signal": "interfaces_added"
1589            },
1590            {
1591                "class": "parameter",
1592                "parameter": "pcie_floor_index"
1593            },
1594            {
1595                "class": "parameter",
1596                "parameter": "altitude_offset"
1597            }
1598        ],
1599        "actions": [
1600            {
1601                "name": "mapped_floor",
1602                "key_group": "ambient temp",
1603                "fan_floors": [
1604                    {
1605                        // Entry valid for ambient temp < 27
1606                        "key": 27,
1607                        "default_floor": 5000,
1608                        "floor_offset_parameter": "altitude_offset",
1609                        "floors": [
1610                            {
1611                                "parameter": "pcie_floor_index",
1612                                "floors": [
1613                                    { "value": 1, "floor": 7000 },
1614                                    { "value": 2, "floor": 8000 },
1615                                    { "value": 3, "floor": 9000 }
1616                                ]
1617                            }
1618                        ]
1619                    },
1620                    {
1621                        // Entry valid for ambient temp < 32
1622                        "key": 32,
1623                        "default_floor": 6000,
1624                        "floor_offset_parameter": "altitude_offset",
1625                        "floors": [
1626                            {
1627                                "parameter": "pcie_floor_index",
1628                                "floors": [
1629                                    { "value": 1, "floor": 8000 },
1630                                    { "value": 2, "floor": 9000 },
1631                                    { "value": 3, "floor": 9500 }
1632                                ]
1633                            }
1634                        ]
1635                    },
1636                    {
1637                        // Entry valid for ambient temp < 37
1638                        "key": 37,
1639                        "default_floor": 7000,
1640                        "floor_offset_parameter": "altitude_offset",
1641                        "floors": [
1642                            {
1643                                "parameter": "pcie_floor_index",
1644                                "floors": [
1645                                    { "value": 1, "floor": 9000 },
1646                                    { "value": 2, "floor": 9500 },
1647                                    { "value": 3, "floor": 10400 }
1648                                ]
1649                            }
1650                        ]
1651                    },
1652                    {
1653                        // Entry valid for ambient temp < 42
1654                        "key": 42,
1655                        "default_floor": 8000,
1656                        "floor_offset_parameter": "altitude_offset",
1657                        "floors": [
1658                            {
1659                                "parameter": "pcie_floor_index",
1660                                "floors": [
1661                                    { "value": 1, "floor": 9500 },
1662                                    { "value": 2, "floor": 10400 },
1663                                    { "value": 3, "floor": 10400 }
1664                                ]
1665                            }
1666                        ]
1667                    }
1668                ]
1669            }
1670        ]
1671    }
1672]
1673