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