# Machine thermal policy for PDM.
#
# Shut down the system if more than three cores
# have a temperature greater than 115 degrees Celcius.


- name: core sensors
  description: >
    'The machine has two processor chips with 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
  oneshot: true

- name: log and shutdown
  description: >
    'Shut the system down and log an event.'
  class: callback
  callback: group
  members:
    - shutdown
    - 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: create criticalhigh error
  description: >
    'Create a CriticalHigh Error log.'
  class: callback
  callback: elog_with_metadata
  paths: core sensors
  properties: core temp
  error: xyz::openbmc_project::Sensor::Threshold::Error::CriticalHigh
  metadata: xyz::openbmc_project::Sensor::Threshold::CriticalHigh::SENSOR_DATA

- 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
