Add Witherspoon thermal policy

Add Witherspoon thermal policy rules for the Witherspoon system.

Do not allow the system to remain running when three or more
POWER9 cores have a temperature of gte 115 degrees C.

Resolves: openbmc/openbmc#1186

Change-Id: Idaf7b78c06de543ada477059867d40df4c86d8c6
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
diff --git a/meta-witherspoon/recipes-phosphor/fans/witherspoon-thermal-policy/thermal-policy.yaml b/meta-witherspoon/recipes-phosphor/fans/witherspoon-thermal-policy/thermal-policy.yaml
new file mode 100644
index 0000000..185ccef
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/fans/witherspoon-thermal-policy/thermal-policy.yaml
@@ -0,0 +1,176 @@
+# Witherspoon thermal policy for PDM.
+#
+# Shut down a Witherspoon system if more than three POWER9 cores
+# have a temperature greater than 115 degrees Celcius.
+
+
+- name: core sensors
+  description: >
+    'Witherspoon has two POWER9 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
+
+- name: log and shutdown
+  description: >
+    'Shut the system down and log an event.'
+  class: callback
+  callback: group
+  members:
+    - shutdown
+    - log
+
+- 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-host-shutdown@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.