diff options
author | Raptor Engineering Development Team <support@raptorengineering.com> | 2018-01-14 05:14:38 -0600 |
---|---|---|
committer | Raptor Engineering Development Team <support@raptorengineering.com> | 2018-04-12 04:52:37 -0500 |
commit | 2e5a1582f205773d58ab5c0ce22d8ef78c235523 (patch) | |
tree | 3768ecfae985d323fd94185e0cd39d9e2678c6d5 /meta-openbmc-machines/meta-openpower | |
parent | ea2b6d33d46f04aa57ac1a4e36070e32553d7846 (diff) | |
download | talos-openbmc-2e5a1582f205773d58ab5c0ce22d8ef78c235523.tar.gz talos-openbmc-2e5a1582f205773d58ab5c0ce22d8ef78c235523.zip |
Initial port of Witherspoon fan control to Talos
NOTE: Not yet tested on hardware
Mapping likely incorrect
Diffstat (limited to 'meta-openbmc-machines/meta-openpower')
45 files changed, 2933 insertions, 9 deletions
diff --git a/meta-openbmc-machines/meta-openpower/common/recipes-phosphor/occ/openpower-occ-control.inc b/meta-openbmc-machines/meta-openpower/common/recipes-phosphor/occ/openpower-occ-control.inc index cae60508d..ae2115e08 100644 --- a/meta-openbmc-machines/meta-openpower/common/recipes-phosphor/occ/openpower-occ-control.inc +++ b/meta-openbmc-machines/meta-openpower/common/recipes-phosphor/occ/openpower-occ-control.inc @@ -1,5 +1,5 @@ HOMEPAGE = "https://github.com/openbmc/openpower-occ-control" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e" -SRC_URI += "git://github.com/openbmc/openpower-occ-control" +SRC_URI += "git://scm.raptorcs.com/scm/git/openpower-occ-control;protocol=https" SRCREV = "e7d976b4d28ad30f563f300322df1dc6c4c38017" diff --git a/meta-openbmc-machines/meta-openpower/common/recipes-phosphor/vpd/openpower-fru-vpd.inc b/meta-openbmc-machines/meta-openpower/common/recipes-phosphor/vpd/openpower-fru-vpd.inc index 57186bb6e..e1cd4d408 100644 --- a/meta-openbmc-machines/meta-openpower/common/recipes-phosphor/vpd/openpower-fru-vpd.inc +++ b/meta-openbmc-machines/meta-openpower/common/recipes-phosphor/vpd/openpower-fru-vpd.inc @@ -1,5 +1,5 @@ HOMEPAGE = "https://github.com/openbmc/openpower-vpd-parser" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e" -SRC_URI += "git://github.com/openbmc/openpower-vpd-parser" +SRC_URI += "git://scm.raptorcs.com/scm/git/openpower-vpd-parser;protocol=https" SRCREV = "7b9c205f3e4c8237ebf85951a597de2682b8bd93" diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/conf/machine/talos.conf b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/conf/machine/talos.conf index 6f689df85..0f2e6634a 100644 --- a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/conf/machine/talos.conf +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/conf/machine/talos.conf @@ -3,6 +3,10 @@ KERNEL_DEVICETREE = "${KMACHINE}-bmc-opp-${MACHINE}.dtb" UBOOT_MACHINE = "ast_g5_ncsi_config" +OBMC_MACHINE_FEATURES += "obmc-mrw" + +OBMC_POWER_SUPPLY_INSTANCES = "0 1" + PREFERRED_PROVIDER_virtual/p9-vcs-workaround = 'fpga-trigger' require conf/machine/include/ast2500.inc @@ -10,8 +14,19 @@ require conf/machine/include/obmc-bsp-common.inc require conf/machine/include/rcs.inc require conf/machine/include/p9.inc -PHOSPHOR_MRW_URI = "https://git.raptorcs.com/talos-openpower/talos-xml" -PHOSPHOR_MRW_REV = "14b471fbf37f5fb60261de001df83caf5f96d81f" +PHOSPHOR_MRW_URI = "git://scm.raptorcs.com/scm/git/talos-xml;protocol=https" +PHOSPHOR_MRW_REV = "572148010e4bf8dbf9c3578bd5c1ca17d13cee73" + +# Inhibit phosphor-hwmon-config-mrw +VIRTUAL-RUNTIME_phosphor-hwmon-config = "" + +# Inhibit phosphor-fan-presence-mrw-native +PREFERRED_PROVIDER_virtual/phosphor-fan-presence-config = \ + "phosphor-fan-presence-config-native" + +# Inhibit phosphor-fan-control-fan-config-mrw-native +PREFERRED_PROVIDER_virtual/phosphor-fan-control-fan-config = \ + "phosphor-fan-control-fan-config-native" DISTRO_FEATURES_append = "\ obmc-openpower \ diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-kernel/linux/linux-obmc/talos.cfg b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-kernel/linux/linux-obmc/talos.cfg index 2a20c7eaf..41b213f18 100644 --- a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-kernel/linux/linux-obmc/talos.cfg +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-kernel/linux/linux-obmc/talos.cfg @@ -2,3 +2,9 @@ CONFIG_HWMON=y CONFIG_SENSORS_TMP421=y CONFIG_SENSORS_MAX31785=y CONFIG_RTC_DRV_RV8803=y + +CONFIG_DEBUG_LL=y +CONFIG_DEBUG_LL_UART_8250=y +CONFIG_DEBUG_UART_PHYS=0x1e784000 +CONFIG_DEBUG_UART_VIRT=0xe8784000 +CONFIG_EARLY_PRINTK=y diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan%.bbappend b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan%.bbappend new file mode 100644 index 000000000..76aad1558 --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan%.bbappend @@ -0,0 +1,33 @@ +FILESEXTRAPATHS_append := "${THISDIR}/${PN}:" + +# Package configuration +FAN_PACKAGES += " \ + phosphor-cooling-type \ +" + +PACKAGECONFIG += "cooling-type" + +RDEPENDS_phosphor-cooling-type += "libevdev" + +TMPL_COOLING = "phosphor-cooling-type@.service" +INSTFMT_COOLING = "phosphor-cooling-type@{0}.service" +COOLING_TGT = "${SYSTEMD_DEFAULT_TARGET}" +FMT_COOLING = "../${TMPL_COOLING}:${COOLING_TGT}.requires/${INSTFMT_COOLING}" + +FILES_phosphor-cooling-type = "${sbindir}/phosphor-cooling-type" +SYSTEMD_SERVICE_phosphor-cooling-type += "${TMPL_COOLING}" +SYSTEMD_LINK_phosphor-cooling-type += "${@compose_list(d, 'FMT_COOLING', 'OBMC_CHASSIS_INSTANCES')}" + +COOLING_ENV_FMT = "obmc/phosphor-fan/phosphor-cooling-type-{0}.conf" + +SYSTEMD_ENVIRONMENT_FILE_phosphor-cooling-type += "${@compose_list(d, 'COOLING_ENV_FMT', 'OBMC_CHASSIS_INSTANCES')}" + +#These services are protected by the watchdog +SYSTEMD_OVERRIDE_phosphor-fan-control-init += "fan-watchdog-monitor.conf:phosphor-fan-control-init@0.service.d/fan-watchdog-monitor.conf" +SYSTEMD_OVERRIDE_phosphor-fan-control += "fan-watchdog-monitor.conf:phosphor-fan-control@0.service.d/fan-watchdog-monitor.conf" +SYSTEMD_OVERRIDE_phosphor-fan-monitor-init += "fan-watchdog-monitor.conf:phosphor-fan-monitor-init@0.service.d/fan-watchdog-monitor.conf" +SYSTEMD_OVERRIDE_phosphor-fan-monitor += "fan-watchdog-monitor.conf:phosphor-fan-monitor@0.service.d/fan-watchdog-monitor.conf" + +#These services need to be stopped when watchdog expires +SYSTEMD_OVERRIDE_phosphor-fan-control += "fan-watchdog-conflicts.conf:phosphor-fan-control@0.service.d/fan-watchdog-conflicts.conf" +SYSTEMD_OVERRIDE_phosphor-fan-monitor += "fan-watchdog-conflicts.conf:phosphor-fan-monitor@0.service.d/fan-watchdog-conflicts.conf" diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan%/fan-watchdog-conflicts.conf b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan%/fan-watchdog-conflicts.conf new file mode 100644 index 000000000..90b1e810e --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan%/fan-watchdog-conflicts.conf @@ -0,0 +1,2 @@ +[Unit] +Conflicts=obmc-fan-watchdog-takeover.target diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan%/fan-watchdog-monitor.conf b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan%/fan-watchdog-monitor.conf new file mode 100644 index 000000000..240336343 --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan%/fan-watchdog-monitor.conf @@ -0,0 +1,5 @@ +[Unit] +#These overrides allow the fan watchdog to take over when this service dies +OnFailure=talos-fan-watchdog-monitor@%n.service +StartLimitIntervalSec=5 +StartLimitBurst=3 diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan%/obmc/phosphor-fan/phosphor-cooling-type-0.conf b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan%/obmc/phosphor-fan/phosphor-cooling-type-0.conf new file mode 100644 index 000000000..6b74301d1 --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan%/obmc/phosphor-fan/phosphor-cooling-type-0.conf @@ -0,0 +1,6 @@ +OBJPATH="--path=/system/chassis" +AIR="--air" +WATER="" +DEVICE="" +CODE="" + diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan%/phosphor-cooling-type@.service b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan%/phosphor-cooling-type@.service new file mode 100644 index 000000000..9a4f8df42 --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan%/phosphor-cooling-type@.service @@ -0,0 +1,13 @@ +[Unit] +Description=Phosphor Cooling Type +Wants=mapper-wait@-xyz-openbmc_project-inventory.service +After=mapper-wait@-xyz-openbmc_project-inventory.service +ConditionPathExists={envfiledir}/obmc/phosphor-fan/phosphor-cooling-type-%i.conf + +[Service] +EnvironmentFile={envfiledir}/obmc/phosphor-fan/phosphor-cooling-type-%i.conf +ExecStart=/usr/bin/env phosphor-cooling-type ${{OBJPATH}} ${{AIR}} ${{WATER}} ${{DEVICE}} ${{CODE}} +SyslogIdentifier=phosphor-cooling-type + +[Install] +RequiredBy={SYSTEMD_DEFAULT_TARGET} diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-events-config-native.bbappend b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-events-config-native.bbappend new file mode 100644 index 000000000..72d991c7e --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-events-config-native.bbappend @@ -0,0 +1 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-events-config-native/events.yaml b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-events-config-native/events.yaml new file mode 100644 index 000000000..44fb52f22 --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-events-config-native/events.yaml @@ -0,0 +1,825 @@ +groups: + - name: air_cooled_zone0_fans + description: Group of fan inventory objects for air cooled zone 0 + type: /xyz/openbmc_project/inventory + members: + - /system/chassis/motherboard/fan4 + - name: water_and_air_cooled_zone0_fans + description: Group of fan inventory objects for water/air cooled zone 0 + type: /xyz/openbmc_project/inventory + members: + - /system/chassis/motherboard/fan4 + - name: air_cooled_zone1_fans + description: Group of fan inventory objects for air cooled zone 1 + type: /xyz/openbmc_project/inventory + members: + - /system/chassis/motherboard/fan5 + - name: air_cooled_zone2_fans + description: Group of fan inventory objects for air cooled zone 2 + type: /xyz/openbmc_project/inventory + members: + - /system/chassis/motherboard/fan0 + - /system/chassis/motherboard/fan1 + - /system/chassis/motherboard/fan2 + - /system/chassis/motherboard/fan3 + - name: water_and_air_cooled_zone2_fans + description: Group of fan inventory objects for water/air cooled zone 2 + type: /xyz/openbmc_project/inventory + members: + - /system/chassis/motherboard/fan0 + - name: zone2_ambient + description: Group of ambient temperature sensors for zone 2 + type: /xyz/openbmc_project/sensors + members: + - /temperature/ambient + - name: occ0_object + description: Dbus object containing OCC0 properties + type: /org/open_power/control + members: + - /occ0 + - name: occ1_object + description: Dbus object containing OCC1 properties + type: /org/open_power/control + members: + - /occ1 + - name: zone0_cores + description: Group of core temperature sensors for zone 0 + type: /xyz/openbmc_project/sensors + members: + - /temperature/p0_core0_temp + - /temperature/p0_core1_temp + - /temperature/p0_core2_temp + - /temperature/p0_core3_temp + - /temperature/p0_core4_temp + - /temperature/p0_core5_temp + - /temperature/p0_core6_temp + - /temperature/p0_core7_temp + - /temperature/p0_core8_temp + - /temperature/p0_core9_temp + - /temperature/p0_core10_temp + - /temperature/p0_core11_temp + - /temperature/p0_core12_temp + - /temperature/p0_core13_temp + - /temperature/p0_core14_temp + - /temperature/p0_core15_temp + - /temperature/p0_core16_temp + - /temperature/p0_core17_temp + - /temperature/p0_core18_temp + - /temperature/p0_core19_temp + - /temperature/p0_core20_temp + - /temperature/p0_core21_temp + - /temperature/p0_core22_temp + - /temperature/p0_core23_temp + - name: zone1_cores + description: Group of core temperature sensors for zone 1 + type: /xyz/openbmc_project/sensors + members: + - /temperature/p1_core0_temp + - /temperature/p1_core1_temp + - /temperature/p1_core2_temp + - /temperature/p1_core3_temp + - /temperature/p1_core4_temp + - /temperature/p1_core5_temp + - /temperature/p1_core6_temp + - /temperature/p1_core7_temp + - /temperature/p1_core8_temp + - /temperature/p1_core9_temp + - /temperature/p1_core10_temp + - /temperature/p1_core11_temp + - /temperature/p1_core12_temp + - /temperature/p1_core13_temp + - /temperature/p1_core14_temp + - /temperature/p1_core15_temp + - /temperature/p1_core16_temp + - /temperature/p1_core17_temp + - /temperature/p1_core18_temp + - /temperature/p1_core19_temp + - /temperature/p1_core20_temp + - /temperature/p1_core21_temp + - /temperature/p1_core22_temp + - /temperature/p1_core23_temp + - name: zone0_regulators + description: Group of regulator temperature sensors for zone 0 + type: /xyz/openbmc_project/sensors + members: + - /temperature/p0_vdd_temp + - name: zone1_regulators + description: Group of regulator temperature sensors for zone 1 + type: /xyz/openbmc_project/sensors + members: + - /temperature/p1_vdd_temp + - name: zone0_dimms + description: Group of dimm temperature sensors for zone 0 + type: /xyz/openbmc_project/sensors + members: + - /temperature/dimm0_temp + - /temperature/dimm1_temp + - /temperature/dimm2_temp + - /temperature/dimm3_temp + - /temperature/dimm4_temp + - /temperature/dimm5_temp + - /temperature/dimm6_temp + - /temperature/dimm7_temp + - name: zone1_dimms + description: Group of dimm temperature sensors for zone 1 + type: /xyz/openbmc_project/sensors + members: + - /temperature/dimm8_temp + - /temperature/dimm9_temp + - /temperature/dimm10_temp + - /temperature/dimm11_temp + - /temperature/dimm12_temp + - /temperature/dimm13_temp + - /temperature/dimm14_temp + - /temperature/dimm15_temp + - name: zone0_gpu_cores + description: Group of gpu core temperature sensors for zone 0 + type: /xyz/openbmc_project/sensors + members: + - /temperature/gpu0_core_temp + - /temperature/gpu1_core_temp + - /temperature/gpu2_core_temp + - /temperature/gpu3_core_temp + - /temperature/gpu4_core_temp + - /temperature/gpu5_core_temp + - name: zone0_gpu_memory + description: Group of gpu memory temperature sensors for zone 0 + type: /xyz/openbmc_project/sensors + members: + - /temperature/gpu0_mem_temp + - /temperature/gpu1_mem_temp + - /temperature/gpu2_mem_temp + - /temperature/gpu3_mem_temp + - /temperature/gpu4_mem_temp + - /temperature/gpu5_mem_temp + - name: zone0_pcie + description: Group of pcie temperature sensors for zone 0 + type: /xyz/openbmc_project/sensors + members: + - /temperature/pcie + +matches: + - name: propertiesChanged + description: > + A property changed match + parameters: + - object + - interface + signal: propertySignal + - name: interfacesAdded + description: > + An interfaces added match + parameters: + - object + signal: objectSignal + - name: interfacesRemoved + description: > + An interfaces removed match + parameters: + - object + signal: objectSignal + - name: nameOwnerChanged + description: > + A name owner changed match + parameters: + - object + - interface + signal: ownerSignal + +signals: + - name: propertySignal + description: > + Handle property signals + parameters: + - type + - object + - interface + - property + handler: setProperty + - name: objectSignal + description: > + Handle object signals + parameters: + - type + - object + - interface + - property + handler: setProperty + - name: ownerSignal + description: > + Handle owner signals + parameters: + - object + - interface + handler: setService + +handlers: + - name: setProperty + description: > + Sets a value for the given object/interface/property + parameters: + - type + - object + - interface + - property + - name: setService + description: > + Sets the service name(s) for the given group + parameters: + - group + +preconditions: + - name: property_states_match + description: > + All defined properties must match the values given to + enable a set speed event otherwise fan speeds are set to full + parameters: + - groups + +actions: + - name: call_actions_based_on_timer + description: > + Sets up a list of actions to be invoked when the defined timer + expires (or for each expiration of a repeating timer) + parameters: + - timer + - actions + - name: default_floor_on_missing_owner + description: > + Set the fan floor to the default floor + - name: set_speed_on_missing_owner + description: > + Set fans to the given speed when any service within the group + no longer exists + parameters: + - speed + - name: set_request_speed_base_with_max + description: > + Set the base request speed of a zone to the max value of a group for + calculating a new target speed + - name: count_state_before_speed + description: Set the speed when a number of properties at a state + parameters: + - count + - property + - speed + - name: set_floor_from_average_sensor_value + description: Set floor speed from first entry with average less than key + parameters: + - map + - name: set_ceiling_from_average_sensor_value + description: Set ceiling speed based on key transition values with average + parameters: + - map + - name: set_net_increase_speed + description: > + Set the speed increase delta based on a factor applied to + the delta increase size times the given value and property's + value difference + parameters: + - property + - factor + - delta + - name: set_net_decrease_speed + description: > + Set the speed decrease delta based on a factor applied to + the delta decrease size times the given value and property's + value difference + parameters: + - property + - factor + - delta + +events: + - name: missing_before_high_speed_air_zone0 + zone_conditions: + - name: air_cooled_chassis + zones: + - 0 + group: air_cooled_zone0_fans + interface: xyz.openbmc_project.Inventory.Item + property: + name: Present + type: bool + matches: + - name: propertiesChanged + actions: + - name: count_state_before_speed + count: 1 + property: false + speed: + value: 100 + type: uint64_t + - name: missing_before_high_speed_air_zone1 + zone_conditions: + - name: air_cooled_chassis + zones: + - 1 + group: air_cooled_zone1_fans + interface: xyz.openbmc_project.Inventory.Item + property: + name: Present + type: bool + matches: + - name: propertiesChanged + actions: + - name: count_state_before_speed + count: 1 + property: false + speed: + value: 100 + type: uint64_t + - name: missing_before_high_speed_air_zone2 + zone_conditions: + - name: air_cooled_chassis + zones: + - 2 + group: air_cooled_zone2_fans + interface: xyz.openbmc_project.Inventory.Item + property: + name: Present + type: bool + matches: + - name: propertiesChanged + actions: + - name: count_state_before_speed + count: 1 + property: false + speed: + value: 100 + type: uint64_t + - name: fails_before_high_speed_air_zone0 + zone_conditions: + - name: air_cooled_chassis + zones: + - 0 + group: air_cooled_zone0_fans + interface: xyz.openbmc_project.State.Decorator.OperationalStatus + property: + name: Functional + type: bool + matches: + - name: propertiesChanged + actions: + - name: count_state_before_speed + count: 1 + property: false + speed: + value: 100 + type: uint64_t + - name: fails_before_high_speed_air_zone1 + zone_conditions: + - name: air_cooled_chassis + zones: + - 0 + group: air_cooled_zone1_fans + interface: xyz.openbmc_project.State.Decorator.OperationalStatus + property: + name: Functional + type: bool + matches: + - name: propertiesChanged + actions: + - name: count_state_before_speed + count: 1 + property: false + speed: + value: 100 + type: uint64_t + - name: fails_before_high_speed_air_zone2 + zone_conditions: + - name: air_cooled_chassis + zones: + - 1 + group: air_cooled_zone2_fans + interface: xyz.openbmc_project.State.Decorator.OperationalStatus + property: + name: Functional + type: bool + matches: + - name: propertiesChanged + actions: + - name: count_state_before_speed + count: 1 + property: false + speed: + value: 100 + type: uint64_t + - name: missing_before_high_speed_water_and_air_zone0 + zone_conditions: + - name: water_and_air_cooled_chassis + zones: + - 0 + group: water_and_air_cooled_zone0_fans + interface: xyz.openbmc_project.Inventory.Item + property: + name: Present + type: bool + matches: + - name: propertiesChanged + actions: + - name: count_state_before_speed + count: 1 + property: false + speed: + value: 100 + type: uint64_t + - name: missing_before_high_speed_water_and_air_zone2 + zone_conditions: + - name: water_and_air_cooled_chassis + zones: + - 2 + group: water_and_air_cooled_zone2_fans + interface: xyz.openbmc_project.Inventory.Item + property: + name: Present + type: bool + matches: + - name: propertiesChanged + actions: + - name: count_state_before_speed + count: 1 + property: false + speed: + value: 100 + type: uint64_t + - name: fails_before_high_speed_water_and_air_zone0 + zone_conditions: + - name: water_and_air_cooled_chassis + zones: + - 0 + group: water_and_air_cooled_zone0_fans + interface: xyz.openbmc_project.State.Decorator.OperationalStatus + property: + name: Functional + type: bool + matches: + - name: propertiesChanged + actions: + - name: count_state_before_speed + count: 1 + property: false + speed: + value: 100 + type: uint64_t + - name: fails_before_high_speed_water_and_air_zone2 + zone_conditions: + - name: water_and_air_cooled_chassis + zones: + - 2 + group: water_and_air_cooled_zone2_fans + interface: xyz.openbmc_project.State.Decorator.OperationalStatus + property: + name: Functional + type: bool + matches: + - name: propertiesChanged + actions: + - name: count_state_before_speed + count: 1 + property: false + speed: + value: 100 + type: uint64_t + - name: set_air_cooled_speed_boundaries_based_on_ambient + zone_conditions: + - name: air_cooled_chassis + zones: + - 0 + group: zone2_ambient + interface: xyz.openbmc_project.Sensor.Value + property: + name: Value + type: int64_t + matches: + - name: propertiesChanged + actions: + - name: set_floor_from_average_sensor_value + map: + value: + - 27000: 33 + - 32000: 44 + - 37000: 50 + - 40000: 55 + type: std::map<int64_t, uint64_t> + - name: set_ceiling_from_average_sensor_value + map: + value: + - 248: 69 + - 27000: 100 + type: std::map<int64_t, uint64_t> + - name: set_water_cooled_speed_boundaries_based_on_ambient + zone_conditions: + - name: water_and_air_cooled_chassis + zones: + - 0 + group: zone2_ambient + interface: xyz.openbmc_project.Sensor.Value + property: + name: Value + type: int64_t + matches: + - name: propertiesChanged + actions: + - name: set_floor_from_average_sensor_value + map: + value: + - 27000: 29 + - 32000: 41 + - 37000: 48 + - 40000: 55 + type: std::map<int64_t, uint64_t> + - name: set_ceiling_from_average_sensor_value + map: + value: + - 248: 69 + - 27000: 100 + type: std::map<int64_t, uint64_t> + - name: speed_changes_based_on_regulator_temps + zone_conditions: + - name: air_cooled_chassis + zones: + - 0 + - name: water_and_air_cooled_chassis + zones: + - 0 + group: zone0_regulators + interface: xyz.openbmc_project.Sensor.Value + property: + name: Value + type: int64_t + matches: + - name: interfacesAdded + - name: propertiesChanged + actions: + - name: set_net_increase_speed + property: 85000 + factor: + value: 1000 + type: int64_t + delta: + value: 4 + type: uint64_t + - name: set_net_decrease_speed + property: 82000 + factor: + value: 1000 + type: int64_t + delta: + value: 1 + type: uint64_t + timer: + interval: 5 + - name: speed_changes_based_on_pcie_temps + zone_conditions: + - name: air_cooled_chassis + zones: + - 0 + - name: water_and_air_cooled_chassis + zones: + - 0 + group: zone0_pcie + interface: xyz.openbmc_project.Sensor.Value + property: + name: Value + type: int64_t + matches: + - name: interfacesAdded + - name: propertiesChanged + actions: + - name: set_net_increase_speed + property: 55000 + factor: + value: 1000 + type: int64_t + delta: + value: 4 + type: uint64_t + - name: set_net_decrease_speed + property: 52000 + factor: + value: 1000 + type: int64_t + delta: + value: 1 + type: uint64_t + timer: + interval: 5 + - name: occ_active_speed_changes + precondition: + name: property_states_match + groups: + - name: occ0_object + interface: org.open_power.OCC.Status + property: + name: OccActive + type: bool + value: true + - name: occ1_object + interface: org.open_power.OCC.Status + property: + name: OccActive + type: bool + value: true + matches: + - name: interfacesAdded + - name: propertiesChanged + events: + - name: speed_changes_based_on_core_temps_zone0 + zone_conditions: + - name: air_cooled_chassis + zones: + - 0 + group: zone0_cores + interface: xyz.openbmc_project.Sensor.Value + property: + name: Value + type: int64_t + matches: + - name: interfacesAdded + - name: propertiesChanged + actions: + - name: set_net_increase_speed + property: 73000 + factor: + value: 1000 + type: int64_t + delta: + value: 4 + type: uint64_t + - name: set_net_decrease_speed + property: 70000 + factor: + value: 1000 + type: int64_t + delta: + value: 1 + type: uint64_t + timer: + interval: 5 + - name: speed_changes_based_on_core_temps_zone1 + zone_conditions: + - name: air_cooled_chassis + zones: + - 1 + group: zone1_cores + interface: xyz.openbmc_project.Sensor.Value + property: + name: Value + type: int64_t + matches: + - name: interfacesAdded + - name: propertiesChanged + actions: + - name: set_net_increase_speed + property: 73000 + factor: + value: 1000 + type: int64_t + delta: + value: 4 + type: uint64_t + - name: set_net_decrease_speed + property: 70000 + factor: + value: 1000 + type: int64_t + delta: + value: 1 + type: uint64_t + timer: + interval: 5 + - name: speed_changes_based_on_dimm_temps_zone0 + zone_conditions: + - name: air_cooled_chassis + zones: + - 0 + - name: water_and_air_cooled_chassis + zones: + - 0 + group: zone0_dimms + interface: xyz.openbmc_project.Sensor.Value + property: + name: Value + type: int64_t + matches: + - name: interfacesAdded + - name: propertiesChanged + actions: + - name: set_net_increase_speed + property: 64000 + factor: + value: 1000 + type: int64_t + delta: + value: 4 + type: uint64_t + - name: set_net_decrease_speed + property: 61000 + factor: + value: 1000 + type: int64_t + delta: + value: 1 + type: uint64_t + timer: + interval: 5 + - name: speed_changes_based_on_dimm_temps_zone1 + zone_conditions: + - name: air_cooled_chassis + zones: + - 1 + - name: water_and_air_cooled_chassis + zones: + - 2 + group: zone1_dimms + interface: xyz.openbmc_project.Sensor.Value + property: + name: Value + type: int64_t + matches: + - name: interfacesAdded + - name: propertiesChanged + actions: + - name: set_net_increase_speed + property: 64000 + factor: + value: 1000 + type: int64_t + delta: + value: 4 + type: uint64_t + - name: set_net_decrease_speed + property: 61000 + factor: + value: 1000 + type: int64_t + delta: + value: 1 + type: uint64_t + timer: + interval: 5 + - name: speed_changes_based_on_gpu_core_temps + zone_conditions: + - name: air_cooled_chassis + zones: + - 0 + group: zone0_gpu_cores + interface: xyz.openbmc_project.Sensor.Value + property: + name: Value + type: int64_t + matches: + - name: interfacesAdded + - name: propertiesChanged + actions: + - name: set_net_increase_speed + property: 78000 + factor: + value: 1000 + type: int64_t + delta: + value: 6 + type: uint64_t + - name: set_net_decrease_speed + property: 75000 + factor: + value: 1000 + type: int64_t + delta: + value: 1 + type: uint64_t + timer: + interval: 5 + - name: speed_changes_based_on_gpu_memory_temps + zone_conditions: + - name: air_cooled_chassis + zones: + - 0 + group: zone0_gpu_memory + interface: xyz.openbmc_project.Sensor.Value + property: + name: Value + type: int64_t + matches: + - name: interfacesAdded + - name: propertiesChanged + actions: + - name: set_net_increase_speed + property: 80000 + factor: + value: 1000 + type: int64_t + delta: + value: 6 + type: uint64_t + - name: set_net_decrease_speed + property: 77000 + factor: + value: 1000 + type: int64_t + delta: + value: 1 + type: uint64_t + timer: + interval: 5 diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-fan-config%.bbappend b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-fan-config%.bbappend new file mode 100644 index 000000000..72d991c7e --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-fan-config%.bbappend @@ -0,0 +1 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-fan-config%/fans.yaml b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-fan-config%/fans.yaml new file mode 100755 index 000000000..5bda3ccdb --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-fan-config%/fans.yaml @@ -0,0 +1,31 @@ +fans: + - inventory: /system/chassis/motherboard/fan4 + cooling_zone: 0 + cooling_profile: all + sensors: + - fan4 + - inventory: /system/chassis/motherboard/fan5 + cooling_zone: 1 + cooling_profile: air + sensors: + - fan5 + - inventory: /system/chassis/motherboard/fan0 + cooling_zone: 2 + cooling_profile: all + sensors: + - fan0 + - inventory: /system/chassis/motherboard/fan1 + cooling_zone: 2 + cooling_profile: air + sensors: + - fan1 + - inventory: /system/chassis/motherboard/fan2 + cooling_zone: 2 + cooling_profile: air + sensors: + - fan2 + - inventory: /system/chassis/motherboard/fan3 + cooling_zone: 2 + cooling_profile: air + sensors: + - fan3 diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config-native.bbappend b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config-native.bbappend new file mode 100644 index 000000000..72d991c7e --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config-native.bbappend @@ -0,0 +1 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config-native/zone_conditions.yaml b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config-native/zone_conditions.yaml new file mode 100644 index 000000000..0c8b3c5ff --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config-native/zone_conditions.yaml @@ -0,0 +1,18 @@ +conditions: + - name: air_cooled_chassis + type: getProperty + properties: + - property: WaterCooled + interface: xyz.openbmc_project.Inventory.Decorator.CoolingType + path: /xyz/openbmc_project/inventory/system/chassis + type: bool + value: false + + - name: water_and_air_cooled_chassis + type: getProperty + properties: + - property: WaterCooled + interface: xyz.openbmc_project.Inventory.Decorator.CoolingType + path: /xyz/openbmc_project/inventory/system/chassis + type: bool + value: true diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-zone-config-native.bbappend b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-zone-config-native.bbappend new file mode 100644 index 000000000..6d4804d12 --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-zone-config-native.bbappend @@ -0,0 +1,2 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" + diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-zone-config-native/zones.yaml b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-zone-config-native/zones.yaml new file mode 100644 index 000000000..86458021a --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-control-zone-config-native/zones.yaml @@ -0,0 +1,56 @@ +manager_configuration: + power_on_delay: 20 + +zone_configuration: + +#Air cooled zones +- zone_conditions: + - name: air_cooled_chassis + + zones: + - zone: 0 + cooling_profiles: + - air + - all + full_speed: 100 + default_floor: 76 + increase_delay: 5 + decrease_interval: 1 + - zone: 1 + cooling_profiles: + - air + - all + full_speed: 100 + default_floor: 76 + increase_delay: 5 + decrease_interval: 1 + - zone: 2 + cooling_profiles: + - air + - all + full_speed: 100 + default_floor: 76 + increase_delay: 5 + decrease_interval: 1 + +#Water cooled zones +- zone_conditions: + - name: water_and_air_cooled_chassis + + zones: + - zone: 0 + cooling_profiles: + - water + - all + full_speed: 100 + default_floor: 76 + increase_delay: 5 + decrease_interval: 1 + - zone: 2 + cooling_profiles: + - water + - all + full_speed: 100 + default_floor: 76 + increase_delay: 5 + decrease_interval: 1 diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-monitor-config-native.bbappend b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-monitor-config-native.bbappend new file mode 100644 index 000000000..72d991c7e --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-monitor-config-native.bbappend @@ -0,0 +1 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-monitor-config-native/monitor.yaml b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-monitor-config-native/monitor.yaml new file mode 100644 index 000000000..de86a5d4a --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-monitor-config-native/monitor.yaml @@ -0,0 +1,58 @@ +fans: + - inventory: /system/chassis/motherboard/fan0 + allowed_out_of_range_time: 30 + deviation: 15 + num_sensors_nonfunc_for_fan_nonfunc: 1 + sensors: + - name: fan0 + has_target: true + + - inventory: /system/chassis/motherboard/fan1 + allowed_out_of_range_time: 30 + deviation: 15 + num_sensors_nonfunc_for_fan_nonfunc: 1 + sensors: + - name: fan1 + has_target: true + + - inventory: /system/chassis/motherboard/fan2 + allowed_out_of_range_time: 30 + deviation: 15 + num_sensors_nonfunc_for_fan_nonfunc: 1 + sensors: + - name: fan2 + has_target: true + + - inventory: /system/chassis/motherboard/fan3 + allowed_out_of_range_time: 30 + deviation: 15 + num_sensors_nonfunc_for_fan_nonfunc: 1 + sensors: + - name: fan3 + has_target: true + + - inventory: /system/chassis/motherboard/fan4 + allowed_out_of_range_time: 30 + deviation: 15 + num_sensors_nonfunc_for_fan_nonfunc: 1 + sensors: + - name: fan4 + has_target: true + + - inventory: /system/chassis/motherboard/fan5 + allowed_out_of_range_time: 30 + deviation: 15 + num_sensors_nonfunc_for_fan_nonfunc: 1 + sensors: + - name: fan5 + has_target: true + +sensor_trust_groups: + - class: NonzeroSpeed + sensors: + - name: fan0 + - name: fan1 + - name: fan2 + - name: fan3 + - name: fan4 + - name: fan5 diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-presence-config-native%.bbappend b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-presence-config-native%.bbappend new file mode 100644 index 000000000..72d991c7e --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-presence-config-native%.bbappend @@ -0,0 +1 @@ +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-presence-config-native%/config.yaml b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-presence-config-native%/config.yaml new file mode 100644 index 000000000..1e67ce56d --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/phosphor-fan-presence-config-native%/config.yaml @@ -0,0 +1,53 @@ +- name: fan0 + path: /system/chassis/motherboard/fan0 + methods: + - type: tach + sensors: + - fan0 + rpolicy: + type: anyof + +- name: fan1 + path: /system/chassis/motherboard/fan1 + methods: + - type: tach + sensors: + - fan1 + rpolicy: + type: anyof + +- name: fan2 + path: /system/chassis/motherboard/fan2 + methods: + - type: tach + sensors: + - fan2 + rpolicy: + type: anyof + +- name: fan3 + path: /system/chassis/motherboard/fan3 + methods: + - type: tach + sensors: + - fan3 + rpolicy: + type: anyof + +- name: fan4 + path: /system/chassis/motherboard/fan4 + methods: + - type: tach + sensors: + - fan4 + rpolicy: + type: anyof + +- name: fan5 + path: /system/chassis/motherboard/fan5 + methods: + - type: tach + sensors: + - fan5 + rpolicy: + type: anyof diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-policy-native.bb b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-policy-native.bb new file mode 100644 index 000000000..df6848d3c --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-policy-native.bb @@ -0,0 +1,16 @@ +SUMMARY = "Fan policy for Talos" +PR = "r1" + +inherit native +inherit obmc-phosphor-license +inherit phosphor-dbus-monitor + +SRC_URI += "file://air-cooled.yaml" +SRC_URI += "file://water-cooled.yaml" +SRC_URI += "file://fan-errors.yaml" + +do_install() { + install -D ${WORKDIR}/air-cooled.yaml ${D}${config_dir}/air-cooled.yaml + install -D ${WORKDIR}/water-cooled.yaml ${D}${config_dir}/water-cooled.yaml + install -D ${WORKDIR}/fan-errors.yaml ${D}${config_dir}/fan-errors.yaml +} diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-policy/air-cooled.yaml b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-policy/air-cooled.yaml new file mode 100644 index 000000000..f98b3d8fe --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-policy/air-cooled.yaml @@ -0,0 +1,241 @@ +# Air cooled Talos fan policy for PDM. +# +# An air cooled Talos requires a minimum of one functional fan. +# If the number of functional fans drops below that +# power the system off. + +- name: fans + description: > + 'An air cooled Talos has six fans to monitor.' + class: group + group: path + members: + - meta: FAN + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0 + - meta: FAN + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1 + - meta: FAN + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2 + - meta: FAN + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3 + - meta: FAN + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan4 + - meta: FAN + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan5 + +- name: chassis state + description: > + 'Talos has a single chassis to monitor.' + class: group + group: path + members: + - meta: CHASSISSTATE + path: /xyz/openbmc_project/state/chassis0 + +- name: chassis + description: > + 'Talos has a single chassis to monitor.' + class: group + group: path + members: + - meta: CHASSIS + path: /xyz/openbmc_project/inventory/system/chassis + +- name: fan present + description: > + 'Monitor the presence state of each fan.' + class: group + group: property + type: boolean + members: + - interface: xyz.openbmc_project.Inventory.Item + meta: PRESENT + property: Present + +- name: fan functional + description: > + 'Monitor the functional state of each fan.' + class: group + group: property + type: boolean + members: + - interface: xyz.openbmc_project.State.Decorator.OperationalStatus + meta: FUNCTIONAL + property: Functional + +- name: chassis powered + description: > + 'Monitor the chassis power state.' + class: group + group: property + type: string + members: + - interface: xyz.openbmc_project.State.Chassis + meta: CHASSIS_STATE + property: CurrentPowerState + +- name: chassis air cooled + description: > + 'Monitor the chassis cooling type.' + class: group + group: property + type: boolean + members: + - interface: xyz.openbmc_project.Inventory.Decorator.CoolingType + meta: COOLING_TYPE + property: WaterCooled + +- name: watch fan present + description: > + 'Trigger logic on fan presence state changes.' + class: watch + watch: property + paths: fans + properties: fan present + callback: check cooling type + +- name: watch fan functional + description: > + 'Trigger logic on fan functional state changes.' + class: watch + watch: property + paths: fans + properties: fan functional + callback: check cooling type + +- name: watch chassis state + description: > + 'Trigger logic on chassis power state changes.' + class: watch + watch: property + paths: chassis state + properties: chassis powered + callback: check cooling type + +- name: watch cooling type + description: > + 'Maintain a cache of the chassis cooling type.' + class: watch + watch: property + paths: chassis + properties: chassis air cooled + +- name: check cooling type + description: > + 'If this condition passes the chassis is air cooled.' + class: condition + condition: count + paths: chassis + properties: chassis air cooled + callback: check power + countop: '==' + countbound: 0 + op: '==' + bound: true + +- name: check power + description: > + 'If the chassis has power, check fans.' + class: condition + condition: count + paths: chassis state + properties: chassis powered + callback: check fans + countop: '>' + countbound: 0 + op: '==' + bound: xyz.openbmc_project.State.Chassis.PowerState.On + +- name: check fans + description: > + 'Verify there are at least three functional fans, power off if not.' + class: callback + callback: group + members: + - check group presence + - check group functional + +- name: check group presence + description: > + 'If this condition passes more than one fan has been unplugged + for more than 25 seconds. Shut the system down. Count present + fans rather than non-present fans since the latter would pass + if the fan has not been created for some reason. + + For a more detailed definition of unplugged, consult the documentation + of xyz.openbmc_project.Inventory.Item and/or the documentation + of the fan inventory object implementation.' + class: condition + condition: count + paths: fans + properties: fan present + defer: 25000000us + callback: log and shutdown + countop: '<' + countbound: 1 + op: '==' + bound: true + +- name: check group functional + description: > + 'If this condition passes more than one fan in the group has been + marked as nonfunctional for five seconds. Shut the system down. + + For a more detailed definition of nonfunctional, consult the documentation + of xyz.openbmc_project.State.Decorator.OperationalStatus and/or the + documentation of the fan inventory object implementation.' + class: condition + condition: count + paths: fans + properties: fan functional + defer: 5000000us + callback: log and shutdown + countop: '>' + countbound: 1 + op: '==' + bound: false + +- name: log and shutdown + description: > + 'Shut the system down, log an event in the journal, and create an + error log.' + class: callback + callback: group + members: + - shutdown + - log + - create shutdown error + +- name: shutdown + description: > + 'Shut down the system.' + class: callback + callback: method + service: org.freedesktop.systemd1 + path: /org/freedesktop/systemd1 + interface: org.freedesktop.systemd1.Manager + method: StartUnit + args: + - value: obmc-chassis-hard-poweroff@0.target + type: string + - value: replace + type: string + +- name: log + description: > + 'Log a shutdown event to the systemd journal.' + class: callback + callback: journal + paths: chassis state + properties: chassis powered + severity: ERR + message: Shutting down system. There are not enough functional fans. + +- name: create shutdown error + description: > + 'Create a Fan Shutdown Error log.' + class: callback + callback: elog + paths: chassis state + properties: chassis powered + error: xyz::openbmc_project::State::Shutdown::Inventory::Error::Fan diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-policy/fan-errors.yaml b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-policy/fan-errors.yaml new file mode 100644 index 000000000..486e536ad --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-policy/fan-errors.yaml @@ -0,0 +1,894 @@ +# Talos fan error policy for PDM. +# +# * Create a NotPresent error if fan 0, 1, 2, 3, 4, 5, or 6 is not present for more +# than 20 seconds. +# * Create a Nonfunctional error if fan 0, 1, 2, 3, 4, 5, or 6 is not +# functional for any amount of time. +# +# The system must be powered on in both of these cases. +# If a water cooled system, don't create errors for fans 1, 2, 3, 5, or 6. +# Note: An error is created each time the chassis powers on. +# +# * Watch for fans to become functional, and then resolve their errors + +- name: fan0 + class: group + group: path + members: + - meta: FAN + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0 + +- name: fan1 + class: group + group: path + members: + - meta: FAN + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1 + +- name: fan2 + class: group + group: path + members: + - meta: FAN + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2 + +- name: fan3 + class: group + group: path + members: + - meta: FAN + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3 + +- name: fan4 + class: group + group: path + members: + - meta: FAN + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan4 + +- name: fan5 + class: group + group: path + members: + - meta: FAN + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan5 + +- name: chassis state + description: > + 'Talos has a single chassis to monitor.' + class: group + group: path + members: + - meta: CHASSISSTATE + path: /xyz/openbmc_project/state/chassis0 + +- name: chassis + description: > + 'Talos has a single chassis to monitor.' + class: group + group: path + members: + - meta: CHASSIS + path: /xyz/openbmc_project/inventory/system/chassis + + +- name: fan present + description: > + 'Monitor the presence state of each fan.' + class: group + group: property + type: boolean + members: + - interface: xyz.openbmc_project.Inventory.Item + meta: PRESENT + property: Present + +- name: fan functional + description: > + 'Monitor the functional state of each fan.' + class: group + group: property + type: boolean + members: + - interface: xyz.openbmc_project.State.Decorator.OperationalStatus + meta: FUNCTIONAL + property: Functional + +- name: chassis powered + description: > + 'Monitor the chassis power state.' + class: group + group: property + type: string + members: + - interface: xyz.openbmc_project.State.Chassis + meta: CHASSIS_STATE + property: CurrentPowerState + +- name: chassis air cooled + description: > + 'The chassis cooling type.' + class: group + group: property + type: boolean + members: + - interface: xyz.openbmc_project.Inventory.Decorator.CoolingType + meta: COOLING_TYPE + property: WaterCooled + +- name: watch chassis state + description: > + 'Trigger logic on chassis power state changes.' + class: watch + watch: property + paths: chassis state + properties: chassis powered + callback: check power + +- name: watch fan0 presence + description: > + 'Trigger logic on fan0 presence state changes.' + class: watch + watch: property + paths: fan0 + properties: fan present + callback: check power fan0 presence + +- name: watch fan0 functional + description: > + 'Trigger logic on fan0 functional state changes.' + class: watch + watch: property + paths: fan0 + properties: fan functional + callback: check power fan0 functional + +- name: watch fan1 presence + description: > + 'Trigger logic on fan1 presence state changes.' + class: watch + watch: property + paths: fan1 + properties: fan present + callback: check power fan1 presence + +- name: watch fan1 functional + description: > + 'Trigger logic on fan1 functional state changes.' + class: watch + watch: property + paths: fan1 + properties: fan functional + callback: check power fan1 functional + +- name: watch fan2 presence + description: > + 'Trigger logic on fan2 presence state changes.' + class: watch + watch: property + paths: fan2 + properties: fan present + callback: check power fan2 presence + +- name: watch fan2 functional + description: > + 'Trigger logic on fan2 functional state changes.' + class: watch + watch: property + paths: fan2 + properties: fan functional + callback: check power fan2 functional + +- name: watch fan3 presence + description: > + 'Trigger logic on fan3 presence state changes.' + class: watch + watch: property + paths: fan3 + properties: fan present + callback: check power fan3 presence + +- name: watch fan3 functional + description: > + 'Trigger logic on fan3 functional state changes.' + class: watch + watch: property + paths: fan3 + properties: fan functional + callback: check power fan3 functional + +- name: watch fan4 presence + description: > + 'Trigger logic on fan4 presence state changes.' + class: watch + watch: property + paths: fan4 + properties: fan present + callback: check power fan4 presence + +- name: watch fan4 functional + description: > + 'Trigger logic on fan4 functional state changes.' + class: watch + watch: property + paths: fan4 + properties: fan functional + callback: check power fan4 functional + +- name: watch fan0 functional for resolving error logs + description: > + 'On fan functional state changes, check if errors need to be resolved.' + class: watch + watch: property + paths: fan0 + properties: fan functional + callback: resolve fan0 errors if functional + +- name: watch fan1 functional for resolving error logs + description: > + 'On fan functional state changes, check if errors need to be resolved.' + class: watch + watch: property + paths: fan1 + properties: fan functional + callback: resolve fan1 errors if functional + +- name: watch fan2 functional for resolving error logs + description: > + 'On fan functional state changes, check if errors need to be resolved.' + class: watch + watch: property + paths: fan2 + properties: fan functional + callback: resolve fan2 errors if functional + +- name: watch fan3 functional for resolving error logs + description: > + 'On fan functional state changes, check if errors need to be resolved.' + class: watch + watch: property + paths: fan3 + properties: fan functional + callback: resolve fan3 errors if functional + +- name: watch fan4 functional for resolving error logs + description: > + 'On fan functional state changes, check if errors need to be resolved.' + class: watch + watch: property + paths: fan4 + properties: fan functional + callback: resolve fan4 errors if functional + +- name: watch fan5 functional for resolving error logs + description: > + 'On fan functional state changes, check if errors need to be resolved.' + class: watch + watch: property + paths: fan5 + properties: fan functional + callback: resolve fan5 errors if functional + +- name: check power + description: > + 'If the chassis has power, check all fans.' + class: condition + condition: count + paths: chassis state + properties: chassis powered + callback: check fans + countop: '>' + countbound: 0 + op: '==' + bound: xyz.openbmc_project.State.Chassis.PowerState.On + +- name: check power fan0 presence + description: > + 'If the chassis has power, check presence of fan0.' + class: condition + condition: count + paths: chassis state + properties: chassis powered + callback: check fan0 presence + countop: '>' + countbound: 0 + op: '==' + bound: xyz.openbmc_project.State.Chassis.PowerState.On + +- name: check power fan0 functional + description: > + 'If the chassis has power, check functional of fan0.' + class: condition + condition: count + paths: chassis state + properties: chassis powered + callback: check fan0 functional + countop: '>' + countbound: 0 + op: '==' + bound: xyz.openbmc_project.State.Chassis.PowerState.On + +- name: check power fan1 presence + description: > + 'If the chassis has power, check presence of fan1.' + class: condition + condition: count + paths: chassis state + properties: chassis powered + callback: check fan1 presence + countop: '>' + countbound: 0 + op: '==' + bound: xyz.openbmc_project.State.Chassis.PowerState.On + +- name: check power fan1 functional + description: > + 'If the chassis has power, check functional of fan1.' + class: condition + condition: count + paths: chassis state + properties: chassis powered + callback: check fan1 functional + countop: '>' + countbound: 0 + op: '==' + bound: xyz.openbmc_project.State.Chassis.PowerState.On + +- name: check power fan2 presence + description: > + 'If the chassis has power, check presence of fan2.' + class: condition + condition: count + paths: chassis state + properties: chassis powered + callback: check fan2 presence + countop: '>' + countbound: 0 + op: '==' + bound: xyz.openbmc_project.State.Chassis.PowerState.On + +- name: check power fan2 functional + description: > + 'If the chassis has power, check functional of fan2.' + class: condition + condition: count + paths: chassis state + properties: chassis powered + callback: check fan2 functional + countop: '>' + countbound: 0 + op: '==' + bound: xyz.openbmc_project.State.Chassis.PowerState.On + +- name: check power fan3 presence + description: > + 'If the chassis has power, check presence of fan3.' + class: condition + condition: count + paths: chassis state + properties: chassis powered + callback: check fan3 presence + countop: '>' + countbound: 0 + op: '==' + bound: xyz.openbmc_project.State.Chassis.PowerState.On + +- name: check power fan3 functional + description: > + 'If the chassis has power, check functional of fan3.' + class: condition + condition: count + paths: chassis state + properties: chassis powered + callback: check fan3 functional + countop: '>' + countbound: 0 + op: '==' + bound: xyz.openbmc_project.State.Chassis.PowerState.On + +- name: check power fan4 functional + description: > + 'If the chassis has power, check functional of fan4.' + class: condition + condition: count + paths: chassis state + properties: chassis powered + callback: check fan4 functional + countop: '>' + countbound: 0 + op: '==' + bound: xyz.openbmc_project.State.Chassis.PowerState.On + +- name: check power fan5 functional + description: > + 'If the chassis has power, check functional of fan5.' + class: condition + condition: count + paths: chassis state + properties: chassis powered + callback: check fan5 functional + countop: '>' + countbound: 0 + op: '==' + bound: xyz.openbmc_project.State.Chassis.PowerState.On + +- name: check fans + description: > + 'Verify each of the 3 fans are present.' + class: callback + callback: group + members: + - check fan0 presence + - check fan1 presence + - check fan2 presence + - check fan3 presence + - check fan4 presence + - check fan5 presence + - check fan0 functional + - check fan1 functional + - check fan2 functional + - check fan3 functional + - check fan4 functional + - check fan5 functional + +- name: check fan0 presence + description: > + 'If this condition passes fan0 has been unplugged for more than 20 seconds.' + class: condition + condition: count + paths: fan0 + properties: fan present + defer: 20000000us + callback: notpresent fan0 error + countop: '<' + countbound: 1 + op: '==' + bound: true + +- name: check fan0 functional + description: > + 'If this condition passes fan0 has been marked as nonfunctional.' + class: condition + condition: count + paths: fan0 + properties: fan functional + callback: nonfunctional fan0 error + countop: '>' + countbound: 0 + op: '==' + bound: false + +- name: check fan1 presence + description: > + 'If this condition passes fan1 has been unplugged for more than 20 seconds. + Fan 1 is not in a water cooled Talos, so check for cooling type + before creating an error.' + class: condition + condition: count + paths: fan1 + properties: fan present + defer: 20000000us + callback: check cooling type notpresent error + countop: '<' + countbound: 1 + op: '==' + bound: true + +- name: check fan1 functional + description: > + 'If this condition passes fan1 has been marked as nonfunctional. + Fan 1 is not in a water cooled Talos, so check for cooling type + before creating an error.' + class: condition + condition: count + paths: fan1 + properties: fan functional + callback: check cooling type nonfunctional error + countop: '>' + countbound: 0 + op: '==' + bound: false + +- name: check fan2 presence + description: > + 'If this condition passes fan2 has been unplugged for more than 20 seconds. + Fan 2 is not in a water cooled Talos, so check for cooling type + before creating an error.' + class: condition + condition: count + paths: fan2 + properties: fan present + defer: 20000000us + callback: check cooling type notpresent error + countop: '<' + countbound: 1 + op: '==' + bound: true + +- name: check fan2 functional + description: > + 'If this condition passes fan2 has been marked as nonfunctional. + Fan 2 is not in a water cooled Talos, so check for cooling type + before creating an error.' + class: condition + condition: count + paths: fan2 + properties: fan functional + callback: check cooling type nonfunctional error + countop: '>' + countbound: 0 + op: '==' + bound: false + +- name: check fan3 presence + description: > + 'If this condition passes fan3 has been unplugged for more than 20 seconds. + Fan 3 is not in a water cooled Talos, so check for cooling type + before creating an error.' + class: condition + condition: count + paths: fan3 + properties: fan present + defer: 20000000us + callback: check cooling type notpresent error + countop: '<' + countbound: 1 + op: '==' + bound: true + +- name: check fan3 functional + description: > + 'If this condition passes fan3 has been marked as nonfunctional. + Fan 3 is not in a water cooled Talos, so check for cooling type + before creating an error.' + class: condition + condition: count + paths: fan3 + properties: fan functional + callback: check cooling type nonfunctional error + countop: '>' + countbound: 0 + op: '==' + bound: false + +- name: check fan4 presence + description: > + 'If this condition passes fan4 has been unplugged for more than 20 seconds.' + class: condition + condition: count + paths: fan4 + properties: fan present + defer: 20000000us + callback: notpresent fan4 error + countop: '<' + countbound: 1 + op: '==' + bound: true + +- name: check fan4 functional + description: > + 'If this condition passes fan4 has been marked as nonfunctional.' + class: condition + condition: count + paths: fan4 + properties: fan functional + callback: nonfunctional fan4 error + countop: '>' + countbound: 0 + op: '==' + bound: false + +- name: check fan5 presence + description: > + 'If this condition passes fan5 has been unplugged for more than 20 seconds. + Fan 5 is not in a water cooled Talos, so check for cooling type + before creating an error.' + class: condition + condition: count + paths: fan5 + properties: fan present + defer: 20000000us + callback: check cooling type notpresent error + countop: '<' + countbound: 1 + op: '==' + bound: true + +- name: check fan5 functional + description: > + 'If this condition passes fan5 has been marked as nonfunctional. + Fan 5 is not in a water cooled Talos, so check for cooling type + before creating an error.' + class: condition + condition: count + paths: fan5 + properties: fan functional + callback: check cooling type nonfunctional error + countop: '>' + countbound: 0 + op: '==' + bound: false + +- name: check cooling type nonfunctional error + description: > + 'If this condition passes the chassis is air cooled and will create a + nonfunctional error for fans 1, 2, 3, 5, and 6.' + class: condition + condition: count + paths: chassis + properties: chassis air cooled + callback: nonfunctional fan1 error + countop: '==' + countbound: 0 + op: '==' + bound: true + +- name: check cooling type notpresent error + description: > + 'If this condition passes the chassis is air cooled and will create a + notpresent error for fans 1, 2, 3, 5, and 6.' + class: condition + condition: count + paths: chassis + properties: chassis air cooled + callback: notpresent fan1 error + countop: '==' + countbound: 0 + op: '==' + bound: true + +- name: notpresent fan0 error + class: callback + callback: elog + paths: fan0 + properties: fan present + error: xyz::openbmc_project::Inventory::Error::NotPresent + metadata: + - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH + value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0 + type: string + +- name: nonfunctional fan0 error + class: callback + callback: elog + paths: fan0 + properties: fan functional + error: xyz::openbmc_project::Inventory::Error::Nonfunctional + metadata: + - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH + value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0 + type: string + +- name: notpresent fan1 error + class: callback + callback: elog + paths: fan1 + properties: fan present + error: xyz::openbmc_project::Inventory::Error::NotPresent + metadata: + - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH + value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1 + type: string + +- name: nonfunctional fan1 error + class: callback + callback: elog + paths: fan1 + properties: fan functional + error: xyz::openbmc_project::Inventory::Error::Nonfunctional + metadata: + - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH + value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1 + type: string + +- name: notpresent fan2 error + class: callback + callback: elog + paths: fan2 + properties: fan present + error: xyz::openbmc_project::Inventory::Error::NotPresent + metadata: + - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH + value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2 + type: string + +- name: nonfunctional fan2 error + class: callback + callback: elog + paths: fan2 + properties: fan functional + error: xyz::openbmc_project::Inventory::Error::Nonfunctional + metadata: + - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH + value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2 + type: string + +- name: notpresent fan3 error + class: callback + callback: elog + paths: fan3 + properties: fan present + error: xyz::openbmc_project::Inventory::Error::NotPresent + metadata: + - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH + value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3 + type: string + +- name: nonfunctional fan3 error + class: callback + callback: elog + paths: fan3 + properties: fan functional + error: xyz::openbmc_project::Inventory::Error::Nonfunctional + metadata: + - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH + value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3 + type: string + +- name: notpresent fan4 error + class: callback + callback: elog + paths: fan4 + properties: fan present + error: xyz::openbmc_project::Inventory::Error::NotPresent + metadata: + - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH + value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan4 + type: string + +- name: nonfunctional fan4 error + class: callback + callback: elog + paths: fan4 + properties: fan functional + error: xyz::openbmc_project::Inventory::Error::Nonfunctional + metadata: + - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH + value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan4 + type: string + +- name: notpresent fan5 error + class: callback + callback: elog + paths: fan5 + properties: fan present + error: xyz::openbmc_project::Inventory::Error::NotPresent + metadata: + - name: xyz::openbmc_project::Inventory::NotPresent::CALLOUT_INVENTORY_PATH + value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan5 + type: string + +- name: nonfunctional fan5 error + class: callback + callback: elog + paths: fan5 + properties: fan functional + error: xyz::openbmc_project::Inventory::Error::Nonfunctional + metadata: + - name: xyz::openbmc_project::Inventory::Nonfunctional::CALLOUT_INVENTORY_PATH + value: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan5 + type: string + +- name: resolve fan0 errors if functional + description: > + 'If fan0 is functional, call the resolve fan0 errors callback.' + class: condition + condition: count + paths: fan0 + properties: fan functional + callback: resolve fan0 errors + countop: '>' + countbound: 0 + op: '==' + bound: true + +#Go ahead and do this on water cooled as well +- name: resolve fan1 errors if functional + description: > + 'If fan1 is functional, call the resolve fan1 errors callback.' + class: condition + condition: count + paths: fan1 + properties: fan functional + callback: resolve fan1 errors + countop: '>' + countbound: 0 + op: '==' + bound: true + +#Go ahead and do this on water cooled as well +- name: resolve fan2 errors if functional + description: > + 'If fan2 is functional, call the resolve fan2 errors callback.' + class: condition + condition: count + paths: fan2 + properties: fan functional + callback: resolve fan2 errors + countop: '>' + countbound: 0 + op: '==' + bound: true + +#Go ahead and do this on water cooled as well +- name: resolve fan3 errors if functional + description: > + 'If fan3 is functional, call the resolve fan3 errors callback.' + class: condition + condition: count + paths: fan3 + properties: fan functional + callback: resolve fan3 errors + countop: '>' + countbound: 0 + op: '==' + bound: true + +- name: resolve fan4 errors if functional + description: > + 'If fan4 is functional, call the resolve fan4 errors callback.' + class: condition + condition: count + paths: fan4 + properties: fan functional + callback: resolve fan4 errors + countop: '>' + countbound: 0 + op: '==' + bound: true + +#Go ahead and do this on water cooled as well +- name: resolve fan5 errors if functional + description: > + 'If fan5 is functional, call the resolve fan5 errors callback.' + class: condition + condition: count + paths: fan5 + properties: fan functional + callback: resolve fan5 errors + countop: '>' + countbound: 0 + op: '==' + bound: true + +- name: resolve fan0 errors + class: callback + callback: resolve callout + paths: fan0 + properties: fan functional + callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0 + +- name: resolve fan1 errors + class: callback + callback: resolve callout + paths: fan1 + properties: fan functional + callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1 + +- name: resolve fan2 errors + class: callback + callback: resolve callout + paths: fan2 + properties: fan functional + callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2 + +- name: resolve fan3 errors + class: callback + callback: resolve callout + paths: fan3 + properties: fan functional + callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3 + +- name: resolve fan4 errors + class: callback + callback: resolve callout + paths: fan4 + properties: fan functional + callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan4 + +- name: resolve fan5 errors + class: callback + callback: resolve callout + paths: fan5 + properties: fan functional + callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan5 diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-policy/water-cooled.yaml b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-policy/water-cooled.yaml new file mode 100644 index 000000000..689633a52 --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-policy/water-cooled.yaml @@ -0,0 +1,233 @@ +# Water cooled Talos fan policy for PDM. +# +# A water cooled Talos requires a minimum of one functional fan and one functional pump. +# If the number of functional rotors drops below that +# power the system off. + +- name: fans + description: > + 'A water cooled Talos has two rotors to monitor.' + class: group + group: path + members: + - meta: FAN + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0 + - meta: FAN + path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan4 + +- name: chassis state + description: > + 'Talos has a single chassis to monitor.' + class: group + group: path + members: + - meta: CHASSISSTATE + path: /xyz/openbmc_project/state/chassis0 + +- name: chassis + description: > + 'Talos has a single chassis to monitor.' + class: group + group: path + members: + - meta: CHASSIS + path: /xyz/openbmc_project/inventory/system/chassis + +- name: fan present + description: > + 'Monitor the presence state of each fan.' + class: group + group: property + type: boolean + members: + - interface: xyz.openbmc_project.Inventory.Item + meta: PRESENT + property: Present + +- name: fan functional + description: > + 'Monitor the functional state of each fan.' + class: group + group: property + type: boolean + members: + - interface: xyz.openbmc_project.State.Decorator.OperationalStatus + meta: FUNCTIONAL + property: Functional + +- name: chassis powered + description: > + 'Monitor the chassis power state.' + class: group + group: property + type: string + members: + - interface: xyz.openbmc_project.State.Chassis + meta: CHASSIS_STATE + property: CurrentPowerState + +- name: chassis water cooled + description: > + 'Monitor the chassis cooling type.' + class: group + group: property + type: boolean + members: + - interface: xyz.openbmc_project.Inventory.Decorator.CoolingType + meta: COOLING_TYPE + property: WaterCooled + +- name: watch fan present + description: > + 'Trigger logic on fan presence state changes.' + class: watch + watch: property + paths: fans + properties: fan present + callback: check cooling type + +- name: watch fan functional + description: > + 'Trigger logic on fan functional state changes.' + class: watch + watch: property + paths: fans + properties: fan functional + callback: check cooling type + +- name: watch chassis state + description: > + 'Trigger logic on chassis power state changes.' + class: watch + watch: property + paths: chassis state + properties: chassis powered + callback: check cooling type + +- name: watch cooling type + description: > + 'Maintain a cache of the chassis cooling type.' + class: watch + watch: property + paths: chassis + properties: chassis water cooled + +- name: check cooling type + description: > + 'If this condition passes the chassis is water cooled.' + class: condition + condition: count + paths: chassis + properties: chassis water cooled + callback: check power + countop: '==' + countbound: 1 + op: '==' + bound: true + +- name: check power + description: > + 'If the chassis has power, check fans.' + class: condition + condition: count + paths: chassis state + properties: chassis powered + callback: check fans + countop: '>' + countbound: 0 + op: '==' + bound: xyz.openbmc_project.State.Chassis.PowerState.On + +- name: check fans + description: > + 'Verify there are at least two functional fans, power off if not.' + class: callback + callback: group + members: + - check group presence + - check group functional + +- name: check group presence + description: > + 'If this condition passes more than one fan has been unplugged + for more than 25 seconds. Shut the system down. Count present + fans rather than non-present fans since the latter would pass + if the fan has not been created for some reason. + + For a more detailed definition of unplugged, consult the documentation + of xyz.openbmc_project.Inventory.Item and/or the documentation + of the fan inventory object implementation.' + class: condition + condition: count + paths: fans + properties: fan present + defer: 25000000us + callback: log and shutdown + countop: '<' + countbound: 1 + op: '==' + bound: true + +- name: check group functional + description: > + 'If this condition passes more than one fan in the group has been marked + as nonfunctional for five seconds. Shut the system down. + + For a more detailed definition of nonfunctional, consult the documentation + of xyz.openbmc_project.State.Decorator.OperationalStatus and/or the + documentation of the fan inventory object implementation.' + class: condition + condition: count + paths: fans + properties: fan functional + defer: 5000000us + callback: log and shutdown + countop: '>' + countbound: 1 + op: '==' + bound: false + +- name: log and shutdown + description: > + 'Shut the system down, log an event in the journal, and create an + error log.' + class: callback + callback: group + members: + - shutdown + - log + - create shutdown error + +- name: shutdown + description: > + 'Shut down the system.' + class: callback + callback: method + service: org.freedesktop.systemd1 + path: /org/freedesktop/systemd1 + interface: org.freedesktop.systemd1.Manager + method: StartUnit + args: + - value: obmc-chassis-hard-poweroff@0.target + type: string + - value: replace + type: string + +- name: log + description: > + 'Log a shutdown event to the systemd journal.' + class: callback + callback: journal + paths: chassis state + properties: chassis powered + severity: ERR + message: Shutting down system. There are not enough functional fans. + +- name: create shutdown error + description: > + 'Create a Fan Shutdown Error log.' + class: callback + callback: elog + paths: chassis state + properties: chassis powered + error: xyz::openbmc_project::State::Shutdown::Inventory::Error::Fan diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-watchdog.bb b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-watchdog.bb new file mode 100644 index 000000000..19be898dd --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-watchdog.bb @@ -0,0 +1,22 @@ +SUMMARY = "Talos fan watchdog services" +PR = "r1" + +inherit obmc-phosphor-license +inherit obmc-phosphor-systemd + +RDEPENDS_${PN} += "virtual/obmc-gpio-monitor" +RDEPENDS_${PN} += "busybox" + +RESET_SERVICE = "talos-reset-fan-watchdog.service" +TGTFMT = "obmc-chassis-poweron@0.target" +RESET_FMT = "../${RESET_SERVICE}:${TGTFMT}.requires/${RESET_SERVICE}" + +MONITOR_SERVICE = "talos-fan-watchdog-monitor@.service" + +WATCHDOG_SERVICE = "talos-fan-watchdog.service" +WATCHDOG_FMT = "../${WATCHDOG_SERVICE}:${TGTFMT}.requires/${WATCHDOG_SERVICE}" + +SYSTEMD_SERVICE_${PN} += "${RESET_SERVICE} ${MONITOR_SERVICE} ${WATCHDOG_SERVICE}" +SYSTEMD_LINK_${PN} += "${RESET_FMT} ${WATCHDOG_FMT}" +SYSTEMD_ENVIRONMENT_FILE_${PN} += "obmc/talos-fan-watchdog/reset-fan-watchdog.conf" +SYSTEMD_ENVIRONMENT_FILE_${PN} += "obmc/talos-fan-watchdog/fan-watchdog.conf" diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-watchdog/obmc/talos-fan-watchdog/fan-watchdog.conf b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-watchdog/obmc/talos-fan-watchdog/fan-watchdog.conf new file mode 100644 index 000000000..b54faae3b --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-watchdog/obmc/talos-fan-watchdog/fan-watchdog.conf @@ -0,0 +1,3 @@ +TIMEOUT=3 +INTERVAL=1 +DEVICE=/dev/watchdog0 diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-watchdog/obmc/talos-fan-watchdog/reset-fan-watchdog.conf b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-watchdog/obmc/talos-fan-watchdog/reset-fan-watchdog.conf new file mode 100644 index 000000000..b4e5ce74e --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-watchdog/obmc/talos-fan-watchdog/reset-fan-watchdog.conf @@ -0,0 +1,4 @@ +GPIO_PATH=/dev/gpiochip0 +GPIO=109 +DELAY=1 +ACTION=low_high diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-watchdog/talos-fan-watchdog-monitor@.service b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-watchdog/talos-fan-watchdog-monitor@.service new file mode 100644 index 000000000..945561b50 --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-watchdog/talos-fan-watchdog-monitor@.service @@ -0,0 +1,10 @@ +[Unit] +Description=Fan Watchdog Failure Monitor + +#This can get called every time a process dies, so ensure it's never limited +StartLimitIntervalSec=0 + +[Service] +Type=oneshot +ExecStart=/usr/bin/env phosphor-unit-failure-monitor --source %i --target obmc-fan-watchdog-takeover.target --action start +SyslogIdentifier=phosphor-unit-failure-monitor diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-watchdog/talos-fan-watchdog.service b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-watchdog/talos-fan-watchdog.service new file mode 100644 index 000000000..c4696f72b --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-watchdog/talos-fan-watchdog.service @@ -0,0 +1,13 @@ +[Unit] +Description=Talos Fan Watchdog Daemon +Wants=phosphor-fan-control-init@0.service +Before=phosphor-fan-control-init@0.service +Conflicts=obmc-fan-watchdog-takeover.target + +[Service] +EnvironmentFile={envfiledir}/obmc/talos-fan-watchdog/fan-watchdog.conf +ExecStart=/sbin/watchdog -T ${{TIMEOUT}} -t ${{INTERVAL}} -F ${{DEVICE}} +KillSignal=SIGKILL + +[Install] +RequiredBy=obmc-chassis-poweron@0.target diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-watchdog/talos-reset-fan-watchdog.service b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-watchdog/talos-reset-fan-watchdog.service new file mode 100644 index 000000000..934892bc4 --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-fan-watchdog/talos-reset-fan-watchdog.service @@ -0,0 +1,12 @@ +[Unit] +Description=Talos Fan Watchdog Reset +Wants=phosphor-fan-control-init@0.service +Before=phosphor-fan-control-init@0.service +Conflicts=obmc-chassis-poweroff@0.target + +[Service] +Type=oneshot +RemainAfterExit=yes +EnvironmentFile={envfiledir}/obmc/talos-fan-watchdog/reset-fan-watchdog.conf +ExecStart=/usr/bin/env phosphor-gpio-util -p ${{GPIO_PATH}} -g ${{GPIO}} -a ${{ACTION}} -d ${{DELAY}} +SyslogIdentifier=phosphor-gpio-util diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-thermal-policy-native.bb b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-thermal-policy-native.bb new file mode 100644 index 000000000..1b20e53a5 --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-thermal-policy-native.bb @@ -0,0 +1,12 @@ +SUMMARY = "Thermal policy for Talos" +PR = "r1" + +inherit native +inherit obmc-phosphor-license +inherit phosphor-dbus-monitor + +SRC_URI += "file://thermal-policy.yaml" + +do_install() { + install -D ${WORKDIR}/thermal-policy.yaml ${D}${config_dir}/thermal-policy.yaml +} diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-thermal-policy/thermal-policy.yaml b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-thermal-policy/thermal-policy.yaml new file mode 100644 index 000000000..28ba81cad --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/fans/talos-thermal-policy/thermal-policy.yaml @@ -0,0 +1,200 @@ +# Talos thermal policy for PDM. +# +# Shut down a Talos system if more than three POWER9 cores +# have a temperature greater than 115 degrees Celcius. + + +- name: core sensors + description: > + 'Talos has two POWER9 chips with up to 24 cores each.' + class: group + group: path + members: + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core0_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core1_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core2_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core3_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core4_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core5_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core6_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core7_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core8_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core9_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core10_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core11_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core12_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core13_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core14_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core15_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core16_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core17_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core18_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core19_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core20_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core21_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core22_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p0_core23_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core0_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core1_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core2_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core3_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core4_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core5_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core6_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core7_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core8_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core9_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core10_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core11_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core12_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core13_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core14_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core15_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core16_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core17_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core18_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core19_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core20_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core21_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core22_temp + - meta: SENSOR + path: /xyz/openbmc_project/sensors/temperature/p1_core23_temp + +- name: core temp + description: > + 'Monitor the temperature of each core.' + class: group + group: property + type: int64 + members: + - interface: xyz.openbmc_project.Sensor.Value + meta: TEMP + property: Value + +- name: watch core temps + description: > + 'Trigger logic on core temp changes.' + class: watch + watch: property + paths: core sensors + properties: core temp + callback: check temps + +- name: check temps + description: > + 'If this condition passes at least three cores are running + too hot. Shut the system down.' + class: condition + condition: count + paths: core sensors + properties: core temp + callback: log and shutdown + countop: '>=' + countbound: 3 + op: '>=' + bound: 115000 + +- name: log and shutdown + description: > + 'Shut the system down and log an event.' + class: callback + callback: group + members: + - shutdown + - log + - create criticalhigh error + - create shutdown error + +- name: shutdown + description: > + 'Shut down the system.' + class: callback + callback: method + service: org.freedesktop.systemd1 + path: /org/freedesktop/systemd1 + interface: org.freedesktop.systemd1.Manager + method: StartUnit + args: + - value: obmc-chassis-hard-poweroff@0.target + type: string + - value: replace + type: string + +- name: log + description: > + 'Log a shutdown event to the systemd journal.' + class: callback + callback: journal + paths: core sensors + properties: core temp + severity: ERR + message: The system is too hot. Shutting down. + +- name: create criticalhigh error + description: > + 'Create a CriticalHigh Error log.' + class: callback + callback: elog + paths: core sensors + properties: core temp + error: xyz::openbmc_project::Sensor::Threshold::Error::CriticalHigh + metadata: + - name: xyz::openbmc_project::Sensor::Threshold::CriticalHigh::SENSOR_TYPE + value: temperature + type: string + +- name: create shutdown error + description: > + 'Create a SystemShutdown Error log.' + class: callback + callback: elog + paths: core sensors + properties: core temp + error: xyz::openbmc_project::State::Shutdown::ThermalEvent::Error::Processor diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/ipmi/phosphor-ipmi-fru-read-bmc-inventory%/bmc-fru-config.yaml b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/ipmi/phosphor-ipmi-fru-read-bmc-inventory%/bmc-fru-config.yaml new file mode 100644 index 000000000..8009eadaf --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/ipmi/phosphor-ipmi-fru-read-bmc-inventory%/bmc-fru-config.yaml @@ -0,0 +1,36 @@ +50: + /system/chassis/motherboard/fan0: + xyz.openbmc_project.Inventory.Item: + PrettyName: + IPMIFruProperty: Product Name + IPMIFruSection: Product +51: + /system/chassis/motherboard/fan1: + xyz.openbmc_project.Inventory.Item: + PrettyName: + IPMIFruProperty: Product Name + IPMIFruSection: Product +52: + /system/chassis/motherboard/fan2: + xyz.openbmc_project.Inventory.Item: + PrettyName: + IPMIFruProperty: Product Name + IPMIFruSection: Product +53: + /system/chassis/motherboard/fan3: + xyz.openbmc_project.Inventory.Item: + PrettyName: + IPMIFruProperty: Product Name + IPMIFruSection: Product +54: + /system/chassis/motherboard/fan4: + xyz.openbmc_project.Inventory.Item: + PrettyName: + IPMIFruProperty: Product Name + IPMIFruSection: Product +55: + /system/chassis/motherboard/fan5: + xyz.openbmc_project.Inventory.Item: + PrettyName: + IPMIFruProperty: Product Name + IPMIFruSection: Product diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend index 239a3fffc..7a7c879e1 100644 --- a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend @@ -1 +1 @@ -RDEPENDS_${PN}-inventory += " openpower-occ-control" +RDEPENDS_${PN}-inventory += " openpower-fru-vpd openpower-occ-control phosphor-cooling-type" diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon%.bbappend b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon%.bbappend index eb5e22324..c24c1bd2c 100644 --- a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon%.bbappend +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon%.bbappend @@ -1,12 +1,25 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" -OCCS = " \ +TALOS_CHIPS = " \ + pwm-tacho-controller@1e786000 \ + i2c@1e78a000/i2c-bus@440/max31785@52 \ + i2c@1e78a000/i2c-bus@440/power-supply@68 \ + i2c@1e78a000/i2c-bus@440/power-supply@69 \ + " +TALOS_ITEMSFMT = "ahb/apb/{0}.conf" +TALOS_ITEMS = "${@compose_list(d, 'TALOS_ITEMSFMT', 'TALOS_CHIPS')}" + +TALOS_OCCS = " \ sbefifo@2400/occ@1/occ-hwmon@1 \ hub@3400/cfam@1,0/sbefifo@2400/occ@2/occ-hwmon@2 \ " -OCCSFMT = "gpio-fsi/cfam@0,0/{0}.conf" -OCCITEMS = "${@compose_list(d, 'OCCSFMT', 'OCCS')}" +TALOS_OCCSFMT = "gpio-fsi/cfam@0,0/{0}.conf" +TALOS_OCCITEMS = "${@compose_list(d, 'TALOS_OCCSFMT', 'TALOS_OCCS')}" ENVS = "obmc/hwmon/{0}" -SYSTEMD_ENVIRONMENT_FILE_${PN} += "${@compose_list(d, 'ENVS', 'OCCITEMS')}" +SYSTEMD_ENVIRONMENT_FILE_${PN} += "${@compose_list(d, 'ENVS', 'TALOS_ITEMS')}" +SYSTEMD_ENVIRONMENT_FILE_${PN} += "${@compose_list(d, 'ENVS', 'TALOS_OCCITEMS')}" + +SYSTEMD_ENVIRONMENT_FILE_max31785-msl += "obmc/hwmon-max31785/talos.conf" +SYSTEMD_LINK_max31785-msl += "../phosphor-max31785-msl@.service:${SYSTEMD_DEFAULT_TARGET}.wants/phosphor-max31785-msl@talos.service" diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon%/obmc/hwmon-max31785/talos.conf b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon%/obmc/hwmon-max31785/talos.conf new file mode 100644 index 000000000..0fc81037c --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon%/obmc/hwmon-max31785/talos.conf @@ -0,0 +1,3 @@ +BUS=12 +PATHS="/system/chassis/motherboard/fan0 /system/chassis/motherboard/fan1 /system/chassis/motherboard/fan2 /system/chassis/motherboard/fan3 /system/chassis/motherboard/fan4 /system/chassis/motherboard/fan5" +REVISION=0x3030 diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon%/obmc/hwmon/ahb/apb/i2c@1e78a000/i2c-bus@440/max31785@52.conf b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon%/obmc/hwmon/ahb/apb/i2c@1e78a000/i2c-bus@440/max31785@52.conf new file mode 100644 index 000000000..e9db1d41d --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon%/obmc/hwmon/ahb/apb/i2c@1e78a000/i2c-bus@440/max31785@52.conf @@ -0,0 +1,13 @@ +LABEL_fan1 = "fan0" +LABEL_fan2 = "fan1" +LABEL_fan3 = "fan2" +LABEL_fan4 = "fan3" +LABEL_fan5 = "fan5" +LABEL_fan6 = "fan4" + +ENABLE_fan1 = "1" +ENABLE_fan2 = "1" +ENABLE_fan3 = "1" +ENABLE_fan4 = "1" +ENABLE_fan5 = "1" +ENABLE_fan6 = "1" diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon%/obmc/hwmon/ahb/apb/i2c@1e78a000/i2c-bus@440/power-supply@68.conf b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon%/obmc/hwmon/ahb/apb/i2c@1e78a000/i2c-bus@440/power-supply@68.conf new file mode 100644 index 000000000..e463b517c --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon%/obmc/hwmon/ahb/apb/i2c@1e78a000/i2c-bus@440/power-supply@68.conf @@ -0,0 +1,23 @@ +LABEL_in1="ps1_input_voltage" +WARNHI_in1="290000" +WARNLO_in1="200000" +CRITHI_in1="300000" +CRITLO_in1="180000" + +LABEL_in2="ps1_output_voltage" +WARNHI_in2="12700" +WARNLO_in2="0" +CRITHI_in2="13000" +CRITLO_in2="0" + +LABEL_curr1="ps1_output_current" +WARNHI_curr1="170000" +WARNLO_curr1="0" +CRITHI_curr1="180000" +CRITLO_curr1="0" + +LABEL_power1="ps1_input_power" +WARNHI_power1="2350000000" +WARNLO_power1="0" +CRITHI_power1="2500000000" +CRITLO_power1="0" diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon%/obmc/hwmon/ahb/apb/i2c@1e78a000/i2c-bus@440/power-supply@69.conf b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon%/obmc/hwmon/ahb/apb/i2c@1e78a000/i2c-bus@440/power-supply@69.conf new file mode 100644 index 000000000..2fadbdec0 --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon%/obmc/hwmon/ahb/apb/i2c@1e78a000/i2c-bus@440/power-supply@69.conf @@ -0,0 +1,23 @@ +LABEL_in1="ps0_input_voltage" +WARNHI_in1="290000" +WARNLO_in1="200000" +CRITHI_in1="300000" +CRITLO_in1="180000" + +LABEL_in2="ps0_output_voltage" +WARNHI_in2="12700" +WARNLO_in2="0" +CRITHI_in2="13000" +CRITLO_in2="0" + +LABEL_curr1="ps0_output_current" +WARNHI_curr1="170000" +WARNLO_curr1="0" +CRITHI_curr1="180000" +CRITLO_curr1="0" + +LABEL_power1="ps0_input_power" +WARNHI_power1="2350000000" +WARNLO_power1="0" +CRITHI_power1="2500000000" +CRITLO_power1="0" diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon%/obmc/hwmon/ahb/apb/pwm-tacho-controller@1e786000.conf b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon%/obmc/hwmon/ahb/apb/pwm-tacho-controller@1e786000.conf new file mode 100644 index 000000000..cfa98a3c8 --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon%/obmc/hwmon/ahb/apb/pwm-tacho-controller@1e786000.conf @@ -0,0 +1 @@ +LABEL_fan15 = "fan6" diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon/70-hwmon.rules b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon/70-hwmon.rules new file mode 100644 index 000000000..070d88f51 --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon/70-hwmon.rules @@ -0,0 +1 @@ +SUBSYSTEM=="hwmon", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="xyz.openbmc_project.Hwmon@%E{OF_FULLNAME}.service" diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon/70-iio.rules b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon/70-iio.rules new file mode 100644 index 000000000..f332d11ac --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon/70-iio.rules @@ -0,0 +1 @@ +SUBSYSTEM=="iio", ACTION=="add", TAG+="systemd", ENV{SYSTEMD_WANTS}+="xyz.openbmc_project.Hwmon@%E{OF_FULLNAME}.service" diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon/phosphor-max31785-msl@.service b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon/phosphor-max31785-msl@.service new file mode 100644 index 000000000..d9de6c081 --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon/phosphor-max31785-msl@.service @@ -0,0 +1,11 @@ +[Unit] +Description=Phosphor MAX31785 MSL +ConditionFileNotEmpty={envfiledir}/obmc/hwmon-max31785/%I.conf +Wants=mapper-wait@-xyz-openbmc_project-inventory.service +After=mapper-wait@-xyz-openbmc_project-inventory.service + +[Service] +Type=oneshot +ExecStart=/usr/bin/env max31785-msl -p "${{PATHS}}" -b ${{BUS}} -r ${{REVISION}} +EnvironmentFile={envfiledir}/obmc/hwmon-max31785/%I.conf +SyslogIdentifier=max31785-msl diff --git a/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon/xyz.openbmc_project.Hwmon@.service b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon/xyz.openbmc_project.Hwmon@.service new file mode 100644 index 000000000..8dca3ad4b --- /dev/null +++ b/meta-openbmc-machines/meta-openpower/meta-rcs/meta-talos/recipes-phosphor/sensors/phosphor-hwmon/xyz.openbmc_project.Hwmon@.service @@ -0,0 +1,11 @@ +[Unit] +Description=Phosphor Hwmon Poller +ConditionFileNotEmpty=/etc/default/obmc/hwmon/%I.conf +StopWhenUnneeded=true +After=xyz.openbmc_project.ObjectMapper.service + +[Service] +Restart=always +ExecStart=/usr/bin/env phosphor-hwmon-readd -o %f +SyslogIdentifier=phosphor-hwmon-readd +EnvironmentFile=/etc/default/obmc/hwmon/%I.conf |