control:cnfgs:ibm,bonnell: Enable fan control
Check in the JSON files to enable fan control on IBM's Bonnell system.
It is a 1 socket 4 DIMM 2 fan system. It uses the same fan model as the
Rainier 2U, and uses mostly the same settings as the Rainier 2U with the
exception of having some lower floors, though only when there are no hot
PCIe cards present.
The floor values when there are hot PCIe card present may change in the
future.
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Change-Id: I30b42fa4f2c2715ba26bbfef4a3d28dc77373390
diff --git a/control/config_files/p10bmc/ibm,bonnell/events.json b/control/config_files/p10bmc/ibm,bonnell/events.json
index fe51488..b0ce5eb 100644
--- a/control/config_files/p10bmc/ibm,bonnell/events.json
+++ b/control/config_files/p10bmc/ibm,bonnell/events.json
@@ -1 +1,870 @@
-[]
+[
+ {
+ // 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": 18000
+ }
+ ]
+ },
+ {
+ // 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" }
+ }
+ ],
+ "triggers": [
+ {
+ "class": "init",
+ "method": "get_properties"
+ },
+ {
+ "class": "signal",
+ "signal": "properties_changed"
+ }
+ ],
+ "actions": [
+ {
+ "name": "count_state_before_target",
+ "count": 1,
+ "state": false,
+ "target": 18000
+ }
+ ]
+ },
+ {
+ // 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" }
+ },
+ {
+ "name": "nvme temps",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ },
+ {
+ "name": "ambient temp",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ },
+ {
+ "name": "altitude",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ }
+ ],
+ "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" }
+ },
+ {
+ "name": "nvme temps",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ },
+ {
+ "name": "ambient temp",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ },
+ {
+ "name": "altitude",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ }
+ ],
+ "target": 18000
+ }
+ ]
+ }
+ ]
+ },
+ {
+ // Set a fan floor if an OCC isn't active
+ "name": "Non-active OCCs",
+ "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": 18000
+ }
+ ]
+ },
+ {
+ // Set a raised fan floor when any temperature or altitude sensor is
+ // nonfunctional
+ "name": "Nonfunctional temperature sensors",
+ "groups": [
+ {
+ "name": "proc0 core temps",
+ "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
+ "property": { "name": "Functional" }
+ },
+ {
+ "name": "proc0 ioring temp",
+ "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
+ "property": { "name": "Functional" }
+ },
+ {
+ "name": "dram temps",
+ "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
+ "property": { "name": "Functional" }
+ },
+ {
+ "name": "internal memory buffer temps",
+ "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
+ "property": { "name": "Functional" }
+ },
+ {
+ "name": "vdd vrm temps",
+ "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
+ "property": { "name": "Functional" }
+ },
+ {
+ "name": "nvme temps",
+ "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
+ "property": { "name": "Functional" }
+ },
+ {
+ "name": "ambient temp",
+ "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
+ "property": { "name": "Functional" }
+ },
+ {
+ "name": "altitude",
+ "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
+ "property": { "name": "Functional" }
+ }
+ ],
+ "triggers": [
+ {
+ "class": "signal",
+ "signal": "properties_changed"
+ },
+ {
+ "class": "signal",
+ "signal": "interfaces_added"
+ },
+ {
+ "class": "signal",
+ "signal": "interfaces_removed"
+ },
+ {
+ "class": "init",
+ "method": "get_properties"
+ }
+ ],
+ "actions": [
+ {
+ "name": "count_state_floor",
+ "count": 1,
+ "state": false,
+ "floor": 18000
+ }
+ ]
+ },
+ {
+ "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 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
+ }
+ }
+ ]
+ },
+ {
+ // 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": "proc0 ioring temp",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ },
+ {
+ "name": "dram 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": "vdd vrm temps",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ },
+ {
+ "name": "nvme temps",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ }
+ ],
+ "triggers": [
+ {
+ "class": "timer",
+ "type": "repeating",
+ "interval": 2000000,
+ "preload_groups": true
+ }
+ ],
+ "actions": [
+ {
+ "name": "set_net_increase_target",
+ "groups": [
+ {
+ "name": "proc0 core temps",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ }
+ ],
+ "state_parameter_name": "proc_0_core_dvfs_increase_temp",
+ "delta": 300
+ },
+ {
+ "name": "set_net_increase_target",
+ "groups": [
+ {
+ "name": "proc0 ioring temp",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ }
+ ],
+ "state_parameter_name": "proc_0_ioring_dvfs_increase_temp",
+ "delta": 300
+ },
+ {
+ "name": "set_net_increase_target",
+ "groups": [
+ {
+ "name": "dram temps",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ }
+ ],
+ "state": 68.0,
+ "delta": 100
+ },
+ {
+ "name": "set_net_increase_target",
+ "groups": [
+ {
+ "name": "internal memory buffer temps",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ }
+ ],
+ "state": 74.0,
+ "delta": 100
+ },
+ {
+ "name": "set_net_increase_target",
+ "groups": [
+ {
+ "name": "vdd vrm temps",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ }
+ ],
+ "state": 82.0,
+ "delta": 300
+ },
+ {
+ "name": "set_net_increase_target",
+ "groups": [
+ {
+ "name": "nvme temps",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ }
+ ],
+ "state": 58.0,
+ "delta": 200
+ },
+ {
+ "name": "set_net_decrease_target",
+ "groups": [
+ {
+ "name": "proc0 core temps",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ }
+ ],
+ "state_parameter_name": "proc_0_core_dvfs_decrease_temp",
+ "delta": 50
+ },
+ {
+ "name": "set_net_decrease_target",
+ "groups": [
+ {
+ "name": "proc0 ioring temp",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ }
+ ],
+ "state_parameter_name": "proc_0_ioring_dvfs_decrease_temp",
+ "delta": 50
+ },
+ {
+ "name": "set_net_decrease_target",
+ "groups": [
+ {
+ "name": "dram temps",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ }
+ ],
+ "state": 65.0,
+ "delta": 40
+ },
+ {
+ "name": "set_net_decrease_target",
+ "groups": [
+ {
+ "name": "internal memory buffer temps",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ }
+ ],
+ "state": 71.0,
+ "delta": 40
+ },
+ {
+ "name": "set_net_decrease_target",
+ "groups": [
+ {
+ "name": "vdd vrm temps",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ }
+ ],
+ "state": 79.0,
+ "delta": 30
+ },
+ {
+ "name": "set_net_decrease_target",
+ "groups": [
+ {
+ "name": "nvme temps",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ }
+ ],
+ "state": 55.0,
+ "delta": 40
+ }
+ ]
+ },
+ {
+ // Remove NVMe temperature objects from cache when they are removed from
+ // dbus. There's no need to react to their removal.
+ "name": "remove nvme objects",
+ "groups": [
+ {
+ "name": "nvme temps",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ },
+ {
+ "name": "nvme temps",
+ "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
+ "property": { "name": "Functional" }
+ }
+ ],
+ "triggers": [
+ {
+ "class": "signal",
+ "signal": "interfaces_removed"
+ }
+ ]
+ },
+ {
+ "name": "set pcie floor index",
+ "groups": [
+ {
+ "name": "pcie slots",
+ "interface": "xyz.openbmc_project.State.Decorator.PowerState",
+ "property": {
+ "name": "PowerState"
+ }
+ },
+ {
+ "name": "pcie cards",
+ "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
+ "property": {
+ "name": "Function0DeviceId"
+ }
+ },
+ {
+ "name": "pcie cards",
+ "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
+ "property": {
+ "name": "Function0VendorId"
+ }
+ },
+ {
+ "name": "pcie cards",
+ "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
+ "property": {
+ "name": "Function0SubsystemId"
+ }
+ },
+ {
+ "name": "pcie cards",
+ "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
+ "property": {
+ "name": "Function0SubsystemVendorId"
+ }
+ }
+ ],
+ "triggers": [
+ {
+ "class": "init",
+ "method": "get_properties"
+ },
+ {
+ "class": "signal",
+ "signal": "properties_changed"
+ },
+ {
+ "class": "signal",
+ "signal": "interfaces_added"
+ }
+ ],
+ "actions": [
+ {
+ "name": "pcie_card_floors",
+ "use_config_specific_files": true,
+ "settle_time": 2
+ }
+ ]
+ },
+ {
+ "name": "Set altitude offset parameter",
+ "groups": [
+ {
+ "name": "altitude",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ }
+ ],
+ "triggers": [
+ {
+ "class": "init",
+ "method": "get_properties"
+ },
+ {
+ "class": "signal",
+ "signal": "interfaces_added"
+ },
+ {
+ // Refresh altitude every 24hrs
+ "class": "timer",
+ "type": "repeating",
+ "interval": 86400000000,
+ "preload_groups": true
+ }
+ ],
+ "actions": [
+ {
+ "name": "set_parameter_from_group_max",
+ "parameter_name": "ambient_20_altitude_offset",
+ "modifier": {
+ "operator": "less_than",
+ "default_value": 10000,
+ "value": [
+ { "arg_value": 500, "parameter_value": 0 },
+ { "arg_value": 1000, "parameter_value": 700 },
+ { "arg_value": 1500, "parameter_value": 1600 },
+ { "arg_value": 2000, "parameter_value": 2300 },
+ { "arg_value": 2500, "parameter_value": 3200 },
+ { "arg_value": 3300, "parameter_value": 4000 }
+ ]
+ }
+ },
+ {
+ "name": "set_parameter_from_group_max",
+ "parameter_name": "ambient_25_altitude_offset",
+ "modifier": {
+ "operator": "less_than",
+ "default_value": 10000,
+ "value": [
+ { "arg_value": 500, "parameter_value": 0 },
+ { "arg_value": 1000, "parameter_value": 1000 },
+ { "arg_value": 1500, "parameter_value": 2100 },
+ { "arg_value": 2000, "parameter_value": 3100 },
+ { "arg_value": 2500, "parameter_value": 4100 },
+ { "arg_value": 3300, "parameter_value": 4900 }
+ ]
+ }
+ },
+ {
+ "name": "set_parameter_from_group_max",
+ "parameter_name": "ambient_30_altitude_offset",
+ "modifier": {
+ "operator": "less_than",
+ "default_value": 10000,
+ "value": [
+ { "arg_value": 500, "parameter_value": 0 },
+ { "arg_value": 1000, "parameter_value": 1000 },
+ { "arg_value": 1500, "parameter_value": 2100 },
+ { "arg_value": 2000, "parameter_value": 3200 },
+ { "arg_value": 2500, "parameter_value": 4000 },
+ { "arg_value": 3300, "parameter_value": 4800 }
+ ]
+ }
+ },
+ {
+ "name": "set_parameter_from_group_max",
+ "parameter_name": "ambient_35_altitude_offset",
+ "modifier": {
+ "operator": "less_than",
+ "default_value": 10000,
+ "value": [
+ { "arg_value": 500, "parameter_value": 0 },
+ { "arg_value": 1000, "parameter_value": 900 },
+ { "arg_value": 1500, "parameter_value": 1700 },
+ { "arg_value": 2000, "parameter_value": 2500 },
+ { "arg_value": 2500, "parameter_value": 3400 },
+ { "arg_value": 3300, "parameter_value": 4200 }
+ ]
+ }
+ },
+ {
+ "name": "set_parameter_from_group_max",
+ "parameter_name": "ambient_40_altitude_offset",
+ "modifier": {
+ "operator": "less_than",
+ "default_value": 10000,
+ "value": [
+ { "arg_value": 500, "parameter_value": 0 },
+ { "arg_value": 1000, "parameter_value": 1000 },
+ { "arg_value": 1500, "parameter_value": 1900 },
+ { "arg_value": 2000, "parameter_value": 2800 },
+ { "arg_value": 2500, "parameter_value": 3700 },
+ { "arg_value": 3300, "parameter_value": 4500 }
+ ]
+ }
+ }
+ ]
+ },
+ {
+ "name": "Fan floors",
+ "groups": [
+ {
+ "name": "ambient temp",
+ "interface": "xyz.openbmc_project.Sensor.Value",
+ "property": { "name": "Value" }
+ }
+ ],
+ "triggers": [
+ {
+ "class": "init",
+ "method": "get_properties"
+ },
+ {
+ "class": "signal",
+ "signal": "properties_changed"
+ },
+ {
+ "class": "signal",
+ "signal": "interfaces_added"
+ },
+ {
+ "class": "parameter",
+ "parameter": "pcie_floor_index"
+ },
+ {
+ "class": "parameter",
+ "parameter": "ambient_20_altitude_offset"
+ },
+ {
+ "class": "parameter",
+ "parameter": "ambient_25_altitude_offset"
+ },
+ {
+ "class": "parameter",
+ "parameter": "ambient_30_altitude_offset"
+ },
+ {
+ "class": "parameter",
+ "parameter": "ambient_35_altitude_offset"
+ },
+ {
+ "class": "parameter",
+ "parameter": "ambient_40_altitude_offset"
+ }
+ ],
+ "actions": [
+ {
+ "name": "mapped_floor",
+ "key_group": "ambient temp",
+ "fan_floors": [
+ {
+ // Entry valid for temps < 20
+ "key": 20,
+ "default_floor": 5400,
+ "floor_offset_parameter": "ambient_20_altitude_offset",
+ "floors": [
+ {
+ "parameter": "pcie_floor_index",
+ "floors": [
+ { "value": 1, "floor": 5600 },
+ { "value": 2, "floor": 9000 },
+ { "value": 3, "floor": 9000 },
+ { "value": 4, "floor": 9200 },
+ { "value": 5, "floor": 10600 }
+ ]
+ }
+ ]
+ },
+ {
+ // Entry valid for temps < 25
+ "key": 25,
+ "default_floor": 6500,
+ "floor_offset_parameter": "ambient_25_altitude_offset",
+ "floors": [
+ {
+ "parameter": "pcie_floor_index",
+ "floors": [
+ { "value": 1, "floor": 7800 },
+ { "value": 2, "floor": 10700 },
+ { "value": 3, "floor": 11300 },
+ { "value": 4, "floor": 12700 },
+ { "value": 5, "floor": 13900 }
+ ]
+ }
+ ]
+ },
+ {
+ // Entry valid for temps < 30
+ "key": 30,
+ "default_floor": 6500,
+ "floor_offset_parameter": "ambient_30_altitude_offset",
+ "floors": [
+ {
+ "parameter": "pcie_floor_index",
+ "floors": [
+ { "value": 1, "floor": 10300 },
+ { "value": 2, "floor": 12100 },
+ { "value": 3, "floor": 14400 },
+ { "value": 4, "floor": 16300 },
+ { "value": 5, "floor": 17200 }
+ ]
+ }
+ ]
+ },
+ {
+ // Entry valid for temps < 35
+ "key": 35,
+ "default_floor": 8500,
+ "floor_offset_parameter": "ambient_35_altitude_offset",
+ "floors": [
+ {
+ "parameter": "pcie_floor_index",
+ "floors": [
+ { "value": 1, "floor": 12700 },
+ { "value": 2, "floor": 13500 },
+ { "value": 3, "floor": 17400 },
+ { "value": 4, "floor": 18000 },
+ { "value": 5, "floor": 18000 }
+ ]
+ }
+ ]
+ },
+ {
+ // Entry valid for temps < 40
+ "key": 40,
+ "default_floor": 12600,
+ "floor_offset_parameter": "ambient_40_altitude_offset",
+ "floors": [
+ {
+ "parameter": "pcie_floor_index",
+ "floors": [
+ { "value": 1, "floor": 15000 },
+ { "value": 2, "floor": 15500 },
+ { "value": 3, "floor": 18000 },
+ { "value": 4, "floor": 18000 },
+ { "value": 5, "floor": 18000 }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+]