| [ |
| { |
| // Hold fans at the given target when a number of fans are missing. |
| "name": "fan(s) missing", |
| "groups": [ |
| { |
| "name": "fan inventory", |
| "interface": "xyz.openbmc_project.Inventory.Item", |
| "property": { "name": "Present" } |
| } |
| ], |
| "triggers": [ |
| { |
| "class": "init", |
| "method": "get_properties" |
| }, |
| { |
| "class": "signal", |
| "signal": "properties_changed" |
| } |
| ], |
| "actions": [ |
| { |
| "name": "count_state_before_target", |
| "count": 1, |
| "state": false, |
| "target": 10000 |
| } |
| ] |
| }, |
| { |
| // Hold fans at the given target when a number of rotors are nonfunctional. |
| "name": "fan rotor(s) faulted", |
| "groups": [ |
| { |
| "name": "fan0 rotor inventory", |
| "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus", |
| "property": { "name": "Functional" } |
| }, |
| { |
| "name": "fan1 rotor inventory", |
| "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus", |
| "property": { "name": "Functional" } |
| }, |
| { |
| "name": "fan2 rotor inventory", |
| "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus", |
| "property": { "name": "Functional" } |
| }, |
| { |
| "name": "fan4 rotor inventory", |
| "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus", |
| "property": { "name": "Functional" } |
| } |
| ], |
| "triggers": [ |
| { |
| "class": "init", |
| "method": "get_properties" |
| }, |
| { |
| "class": "signal", |
| "signal": "properties_changed" |
| } |
| ], |
| "actions": [ |
| { |
| "name": "count_state_before_target", |
| "count": 1, |
| "state": false, |
| "target": 10000 |
| } |
| ] |
| }, |
| { |
| // Hold fans at the given target when any critical service |
| // is not running for 5 seconds. |
| "name": "service(s) missing", |
| "groups": [ |
| { |
| "name": "fan inventory", |
| "interface": "xyz.openbmc_project.Inventory.Item", |
| "property": { "name": "Present" } |
| }, |
| { |
| "name": "occ objects", |
| "interface": "org.open_power.OCC.Status", |
| "property": { "name": "OccActive" } |
| } |
| ], |
| "triggers": [ |
| { |
| "class": "init", |
| "method": "name_has_owner" |
| }, |
| { |
| "class": "signal", |
| "signal": "name_owner_changed" |
| } |
| ], |
| "actions": [ |
| { |
| "name": "call_actions_based_on_timer", |
| "timer": { |
| "interval": 5000000, |
| "type": "oneshot" |
| }, |
| "actions": [ |
| { |
| "name": "set_target_on_missing_owner", |
| "groups": [ |
| { |
| "name": "fan inventory", |
| "interface": "xyz.openbmc_project.Inventory.Item", |
| "property": { "name": "Present" } |
| }, |
| { |
| "name": "occ objects", |
| "interface": "org.open_power.OCC.Status", |
| "property": { "name": "OccActive" } |
| } |
| ], |
| "target": 10000 |
| } |
| ] |
| } |
| ] |
| }, |
| { |
| // Set a fan floor if an OCC isn't active |
| "name": "Non-active OCC(s)", |
| "groups": [ |
| { |
| "name": "occ objects", |
| "interface": "org.open_power.OCC.Status", |
| "property": { |
| "name": "OccActive" |
| } |
| } |
| ], |
| "triggers": [ |
| { |
| "class": "signal", |
| "signal": "properties_changed" |
| }, |
| { |
| "class": "signal", |
| "signal": "interfaces_added" |
| }, |
| { |
| "class": "init", |
| "method": "get_properties" |
| } |
| ], |
| "actions": [ |
| { |
| "name": "count_state_floor", |
| "count": 1, |
| "state": false, |
| "floor": 10000 |
| } |
| ] |
| }, |
| { |
| "name": "Set Proc 0 Core DVFS parameter", |
| "groups": [ |
| { |
| "name": "proc 0 core dvfs temp", |
| "interface": "xyz.openbmc_project.Sensor.Value", |
| "property": { "name": "Value" } |
| } |
| ], |
| "triggers": [ |
| { |
| "class": "init", |
| "method": "get_properties" |
| }, |
| { |
| "class": "signal", |
| "signal": "interfaces_added" |
| }, |
| { |
| "class": "signal", |
| "signal": "properties_changed" |
| } |
| ], |
| "actions": [ |
| { |
| "name": "set_parameter_from_group_max", |
| "parameter_name": "proc_0_core_dvfs_increase_temp", |
| "modifier": { |
| "operator": "minus", |
| "value": 10 |
| } |
| }, |
| { |
| "name": "set_parameter_from_group_max", |
| "parameter_name": "proc_0_core_dvfs_decrease_temp", |
| "modifier": { |
| "operator": "minus", |
| "value": 13 |
| } |
| } |
| ] |
| }, |
| { |
| "name": "Set Proc 1 Core DVFS parameter", |
| "groups": [ |
| { |
| "name": "proc 1 core dvfs temp", |
| "interface": "xyz.openbmc_project.Sensor.Value", |
| "property": { "name": "Value" } |
| } |
| ], |
| "triggers": [ |
| { |
| "class": "init", |
| "method": "get_properties" |
| }, |
| { |
| "class": "signal", |
| "signal": "interfaces_added" |
| }, |
| { |
| "class": "signal", |
| "signal": "properties_changed" |
| } |
| ], |
| "actions": [ |
| { |
| "name": "set_parameter_from_group_max", |
| "parameter_name": "proc_1_core_dvfs_increase_temp", |
| "modifier": { |
| "operator": "minus", |
| "value": 10 |
| } |
| }, |
| { |
| "name": "set_parameter_from_group_max", |
| "parameter_name": "proc_1_core_dvfs_decrease_temp", |
| "modifier": { |
| "operator": "minus", |
| "value": 13 |
| } |
| } |
| ] |
| }, |
| { |
| "name": "Set Proc 0 IO Ring DVFS parameter", |
| "groups": [ |
| { |
| "name": "proc 0 ioring dvfs temp", |
| "interface": "xyz.openbmc_project.Sensor.Value", |
| "property": { "name": "Value" } |
| } |
| ], |
| "triggers": [ |
| { |
| "class": "init", |
| "method": "get_properties" |
| }, |
| { |
| "class": "signal", |
| "signal": "interfaces_added" |
| }, |
| { |
| "class": "signal", |
| "signal": "properties_changed" |
| } |
| ], |
| "actions": [ |
| { |
| "name": "set_parameter_from_group_max", |
| "parameter_name": "proc_0_ioring_dvfs_increase_temp", |
| "modifier": { |
| "operator": "minus", |
| "value": 10 |
| } |
| }, |
| { |
| "name": "set_parameter_from_group_max", |
| "parameter_name": "proc_0_ioring_dvfs_decrease_temp", |
| "modifier": { |
| "operator": "minus", |
| "value": 13 |
| } |
| } |
| ] |
| }, |
| { |
| "name": "Set Proc 1 IO Ring DVFS parameter", |
| "groups": [ |
| { |
| "name": "proc 1 ioring dvfs temp", |
| "interface": "xyz.openbmc_project.Sensor.Value", |
| "property": { "name": "Value" } |
| } |
| ], |
| "triggers": [ |
| { |
| "class": "init", |
| "method": "get_properties" |
| }, |
| { |
| "class": "signal", |
| "signal": "interfaces_added" |
| }, |
| { |
| "class": "signal", |
| "signal": "properties_changed" |
| } |
| ], |
| "actions": [ |
| { |
| "name": "set_parameter_from_group_max", |
| "parameter_name": "proc_1_ioring_dvfs_increase_temp", |
| "modifier": { |
| "operator": "minus", |
| "value": 10 |
| } |
| }, |
| { |
| "name": "set_parameter_from_group_max", |
| "parameter_name": "proc_1_ioring_dvfs_decrease_temp", |
| "modifier": { |
| "operator": "minus", |
| "value": 13 |
| } |
| } |
| ] |
| }, |
| { |
| // Collect group temperatures each iteration the repeating timer expires |
| "name": "Fan control timer loop", |
| "groups": [ |
| { |
| "name": "proc0 core temps", |
| "interface": "xyz.openbmc_project.Sensor.Value", |
| "property": { "name": "Value" } |
| }, |
| { |
| "name": "proc1 core temps", |
| "interface": "xyz.openbmc_project.Sensor.Value", |
| "property": { "name": "Value" } |
| }, |
| { |
| "name": "proc0 ioring temp", |
| "interface": "xyz.openbmc_project.Sensor.Value", |
| "property": { "name": "Value" } |
| }, |
| { |
| "name": "proc1 ioring temp", |
| "interface": "xyz.openbmc_project.Sensor.Value", |
| "property": { "name": "Value" } |
| }, |
| { |
| "name": "dram temps", |
| "interface": "xyz.openbmc_project.Sensor.Value", |
| "property": { "name": "Value" } |
| }, |
| { |
| "name": "pmic temps", |
| "interface": "xyz.openbmc_project.Sensor.Value", |
| "property": { "name": "Value" } |
| }, |
| { |
| "name": "internal memory buffer temps", |
| "interface": "xyz.openbmc_project.Sensor.Value", |
| "property": { "name": "Value" } |
| }, |
| { |
| "name": "dram and external memory buffer temps", |
| "interface": "xyz.openbmc_project.Sensor.Value", |
| "property": { "name": "Value" } |
| }, |
| { |
| "name": "external memory buffer temps", |
| "interface": "xyz.openbmc_project.Sensor.Value", |
| "property": { "name": "Value" } |
| }, |
| { |
| "name": "vdd vrm temps", |
| "interface": "xyz.openbmc_project.Sensor.Value", |
| "property": { "name": "Value" } |
| } |
| ], |
| "triggers": [ |
| { |
| "class": "timer", |
| "type": "repeating", |
| "interval": 2000000, |
| "preload_groups": true |
| } |
| ] |
| } |
| ] |