Add mihawk sensor, fan control and d-bus monitor

Most of mihawk's sensors are different from witherspoon, so I temporarily
added the mihawk part and did not change the witherspoon.

Add mihawk version of fan control and d-bus monitor.
Mihawk does not have a water cooled mode, so another independent folder is added.

Tested: 1.Shut down the system if more than three cores
          have a temperature greater than 100 degrees Celcius.
        2.Fan control support cpu core, dimm, Onboard.
        3.Confirm that sensor is able to return normally via REST.

Signed-off-by: Ben Pai <Ben_Pai@wistron.com>
Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Change-Id: I346fd70fe435eef4a745dc5863ce023037e0f151
diff --git a/meta-witherspoon/recipes-phosphor/dbus/fan-policy.bb b/meta-witherspoon/recipes-phosphor/dbus/fan-policy.bb
index 1219464..e53d9c0 100644
--- a/meta-witherspoon/recipes-phosphor/dbus/fan-policy.bb
+++ b/meta-witherspoon/recipes-phosphor/dbus/fan-policy.bb
@@ -9,15 +9,20 @@
 FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
 
 SRC_URI += "file://air-cooled.yaml"
-SRC_URI += "file://water-cooled.yaml"
+SRC_URI_append_ibm-ac-server = " file://water-cooled.yaml"
 SRC_URI += "file://fan-errors.yaml"
 
-do_install() {
+do_install_append_ibm-ac-server() {
         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
 }
 
+do_install_append_mihawk() {
+        install -D ${WORKDIR}/air-cooled.yaml ${D}${config_dir}/air-cooled.yaml
+        install -D ${WORKDIR}/fan-errors.yaml ${D}${config_dir}/fan-errors.yaml
+}
+
 FILES_${PN} += "${config_dir}/air-cooled.yaml"
-FILES_${PN} += "${config_dir}/water-cooled.yaml"
+FILES_${PN}_append_ibm-ac-server = " ${config_dir}/water-cooled.yaml"
 FILES_${PN} += "${config_dir}/fan-errors.yaml"
diff --git a/meta-witherspoon/recipes-phosphor/dbus/fan-policy/mihawk/air-cooled.yaml b/meta-witherspoon/recipes-phosphor/dbus/fan-policy/mihawk/air-cooled.yaml
new file mode 100644
index 0000000..52232e3
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/dbus/fan-policy/mihawk/air-cooled.yaml
@@ -0,0 +1,339 @@
+# Air cooled mihawk fan policy for PDM.
+#
+# An air cooled mihawk requires a minimum of three functional fans
+# enclosures or six functional fan rotors across all enclosures.
+# If the number of functional fan enclosures is below three, soft poweroff
+# the system, whereas if the number of fan rotors drop below six, an
+# immediate hard poweroff of the system occurs.
+
+- name: fan enclosures
+  description: >
+    'An air cooled mihawk has 6 fan enclosures 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: fan rotors
+  description: >
+    'An air cooled Witherspoon has eight fan rotors to monitor.'
+  class: group
+  group: path
+  members:
+    - meta: FAN
+      path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0/fan0_0
+    - meta: FAN
+      path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0/fan0_1
+    - meta: FAN
+      path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1/fan1_0
+    - meta: FAN
+      path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1/fan1_1
+    - meta: FAN
+      path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2/fan2_0
+    - meta: FAN
+      path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2/fan2_1
+    - meta: FAN
+      path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3/fan3_0
+    - meta: FAN
+      path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3/fan3_1
+    - meta: FAN
+      path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan4/fan4_0
+    - meta: FAN
+      path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan4/fan4_1
+    - meta: FAN
+      path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan5/fan5_0
+    - meta: FAN
+      path: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan5/fan5_1
+
+- name: chassis state
+  description: >
+    'Witherspoon has a single chassis to monitor.'
+  class: group
+  group: path
+  members:
+    - meta: CHASSISSTATE
+      path: /xyz/openbmc_project/state/chassis0
+
+- name: chassis
+  description: >
+    'Witherspoon 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 enclosure presence state changes.'
+  class: watch
+  watch: property
+  paths: fan enclosures
+  properties: fan present
+  callback: check cooling type
+
+- name: watch fan functional
+  description: >
+    'Trigger logic on fan enclosure functional state changes.'
+  class: watch
+  watch: property
+  paths: fan enclosures
+  properties: fan functional
+  callback: check cooling type
+
+- name: watch fan rotor functional
+  description: >
+    'Trigger logic on fan rotor functional state changes.'
+  class: watch
+  watch: property
+  paths: fan rotors
+  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 fan enclosures and at least
+    six functional fan rotors, power off if not.'
+  class: callback
+  callback: group
+  members:
+    - check group presence
+    - check group functional enclosures
+    - check group functional rotors
+
+- 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: fan enclosures
+  properties: fan present
+  defer: 25000000us
+  callback: log and shutdown
+  countop: '<'
+  countbound: 6
+  op: '=='
+  bound: true
+
+- name: check group functional enclosures
+  description: >
+    'If this condition passes more than one fan enclosure in the group has been
+    marked as nonfunctional for 25 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: fan enclosures
+  properties: fan functional
+  defer: 25000000us
+  callback: log and shutdown
+  countop: '>'
+  countbound: 1
+  op: '=='
+  bound: false
+
+- name: check group functional rotors
+  description: >
+    'If this condition passes more than two fan rotors in the group have been
+    marked as nonfunctional for 25 seconds.  Immediately power off.
+    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: fan rotors
+  properties: fan functional
+  defer: 25000000us
+  callback: log and poweroff
+  countop: '>'
+  countbound: 1
+  op: '=='
+  bound: false
+
+- name: log and poweroff
+  description: >
+    'Immediately poweroff, log an event in the journal, and create an
+     error log.'
+  class: callback
+  callback: group
+  members:
+    - hard poweroff
+    - log hard poweroff
+    - create shutdown error
+
+- 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 shutdown
+    - create shutdown error
+
+- name: hard poweroff
+  description: >
+    'Immediately power off 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: 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 hard poweroff
+  description: >
+    'Log a hard poweroff event to the systemd journal.'
+  class: callback
+  callback: journal
+  paths: chassis state
+  properties: chassis powered
+  severity: ERR
+  message: Immediate poweroff of system. There are not enough functional fans.
+
+- name: log shutdown
+  description: >
+    'Log a shutdown event to the systemd journal.'
+  class: callback
+  callback: journal
+  paths: chassis state
+  properties: chassis powered
+  severity: ERR
+  message: Request shutdown of 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-witherspoon/recipes-phosphor/dbus/fan-policy/mihawk/fan-errors.yaml b/meta-witherspoon/recipes-phosphor/dbus/fan-policy/mihawk/fan-errors.yaml
new file mode 100644
index 0000000..65cfbeb
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/dbus/fan-policy/mihawk/fan-errors.yaml
@@ -0,0 +1,905 @@
+# Witherspoon fan error policy for PDM.
+#
+# * Create a NotPresent error if fan 0, 1, 2, 3, 4, or 5 is not present for more
+#   than 20 seconds.
+# * Create a Nonfunctional error if fan 0, 1, 2, 3, 4, or 5 is not
+#   functional for any amount of time.
+#
+# The system must be powered on in both of these cases.
+# Note: An error is created each time the chassis powers on.
+#
+# * Watch for fans to become both present and 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: >
+    'Witherspoon has a single chassis to monitor.'
+  class: group
+  group: path
+  members:
+    - meta: CHASSISSTATE
+      path: /xyz/openbmc_project/state/chassis0
+
+- name: chassis
+  description: >
+    'Witherspoon 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: fan present and functional
+  description: >
+    'Monitor the present and functional state of each fan.'
+  class: group
+  group: property
+  type: boolean
+  members:
+    - interface: xyz.openbmc_project.Inventory.Item
+      meta: PRESENT
+      property: Present
+    - 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 fan5 presence
+  description: >
+    'Trigger logic on fan5 presence state changes.'
+  class: watch
+  watch: property
+  paths: fan5
+  properties: fan present
+  callback: check power fan5 presence
+
+- name: watch fan5 functional
+  description: >
+    'Trigger logic on fan5 functional state changes.'
+  class: watch
+  watch: property
+  paths: fan5
+  properties: fan functional
+  callback: check power fan5 functional
+
+- name: watch fan0 present and functional for resolving error logs
+  description: >
+    'On fan present or functional state changes, check if errors need to be resolved.'
+  class: watch
+  watch: property
+  paths: fan0
+  properties: fan present and functional
+  callback: resolve fan0 errors if present and functional
+
+- name: watch fan1 present and functional for resolving error logs
+  description: >
+    'On fan present or functional state changes, check if errors need to be resolved.'
+  class: watch
+  watch: property
+  paths: fan1
+  properties: fan present and functional
+  callback: resolve fan1 errors if present and functional
+
+- name: watch fan2 present and functional for resolving error logs
+  description: >
+    'On fan present or functional state changes, check if errors need to be resolved.'
+  class: watch
+  watch: property
+  paths: fan2
+  properties: fan present and functional
+  callback: resolve fan2 errors if present and functional
+
+- name: watch fan3 present and functional for resolving error logs
+  description: >
+    'On fan present or functional state changes, check if errors need to be resolved.'
+  class: watch
+  watch: property
+  paths: fan3
+  properties: fan present and functional
+  callback: resolve fan3 errors if present and functional
+
+- name: watch fan4 present and functional for resolving error logs
+  description: >
+    'On fan present or functional state changes, check if errors need to be resolved.'
+  class: watch
+  watch: property
+  paths: fan4
+  properties: fan present and functional
+  callback: resolve fan4 errors if present and functional
+
+- name: watch fan5 present and functional for resolving error logs
+  description: >
+    'On fan present or functional state changes, check if errors need to be resolved.'
+  class: watch
+  watch: property
+  paths: fan5
+  properties: fan present and functional
+  callback: resolve fan5 errors if present and 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 presence
+  description: >
+    'If the chassis has power, check presence of fan4.'
+  class: condition
+  condition: count
+  paths: chassis state
+  properties: chassis powered
+  callback: check fan4 presence
+  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 presence
+  description: >
+    'If the chassis has power, check presence of fan5.'
+  class: condition
+  condition: count
+  paths: chassis state
+  properties: chassis powered
+  callback: check fan5 presence
+  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 12 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.'
+  class: condition
+  condition: count
+  paths: fan1
+  properties: fan present
+  defer: 20000000us
+  callback: notpresent fan1 error
+  countop: '<'
+  countbound: 1
+  op: '=='
+  bound: true
+
+- name: check fan1 functional
+  description: >
+    'If this condition passes fan1 has been marked as nonfunctional.'
+  class: condition
+  condition: count
+  paths: fan1
+  properties: fan functional
+  callback: nonfunctional fan1 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.'
+  class: condition
+  condition: count
+  paths: fan2
+  properties: fan present
+  defer: 20000000us
+  callback: notpresent fan2 error
+  countop: '<'
+  countbound: 1
+  op: '=='
+  bound: true
+
+- name: check fan2 functional
+  description: >
+    'If this condition passes fan2 has been marked as nonfunctional.'
+  class: condition
+  condition: count
+  paths: fan2
+  properties: fan functional
+  callback: nonfunctional fan2 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.'
+  class: condition
+  condition: count
+  paths: fan3
+  properties: fan present
+  defer: 20000000us
+  callback: notpresent fan3 error
+  countop: '<'
+  countbound: 1
+  op: '=='
+  bound: true
+
+- name: check fan3 functional
+  description: >
+    'If this condition passes fan3 has been marked as nonfunctional.'
+  class: condition
+  condition: count
+  paths: fan3
+  properties: fan functional
+  callback: nonfunctional fan3 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.'
+  class: condition
+  condition: count
+  paths: fan5
+  properties: fan present
+  defer: 20000000us
+  callback: notpresent fan5 error
+  countop: '<'
+  countbound: 1
+  op: '=='
+  bound: true
+
+- name: check fan5 functional
+  description: >
+    'If this condition passes fan5 has been marked as nonfunctional.'
+  class: condition
+  condition: count
+  paths: fan5
+  properties: fan functional
+  callback: nonfunctional fan5 error
+  countop: '>'
+  countbound: 0
+  op: '=='
+  bound: false
+
+- 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 present and functional
+  description: >
+    'If fan0 is present and functional, call the resolve fan0 errors callback.'
+  class: condition
+  condition: count
+  paths: fan0
+  properties: fan present and functional
+  callback: resolve fan0 errors
+  countop: '=='
+  countbound: 2
+  op: '=='
+  bound: true
+
+- name: resolve fan1 errors if present and functional
+  description: >
+    'If fan1 is present and functional, call the resolve fan1 errors callback.'
+  class: condition
+  condition: count
+  paths: fan1
+  properties: fan present and functional
+  callback: resolve fan1 errors
+  countop: '=='
+  countbound: 2
+  op: '=='
+  bound: true
+
+- name: resolve fan2 errors if present and functional
+  description: >
+    'If fan2 is present and functional, call the resolve fan2 errors callback.'
+  class: condition
+  condition: count
+  paths: fan2
+  properties: fan present and functional
+  callback: resolve fan2 errors
+  countop: '=='
+  countbound: 2
+  op: '=='
+  bound: true
+
+- name: resolve fan3 errors if present and functional
+  description: >
+    'If fan3 is present and functional, call the resolve fan3 errors callback.'
+  class: condition
+  condition: count
+  paths: fan3
+  properties: fan present and functional
+  callback: resolve fan3 errors
+  countop: '=='
+  countbound: 2
+  op: '=='
+  bound: true
+
+- name: resolve fan4 errors if present and functional
+  description: >
+    'If fan4 is present and functional, call the resolve fan4 errors callback.'
+  class: condition
+  condition: count
+  paths: fan4
+  properties: fan present and functional
+  callback: resolve fan4 errors
+  countop: '=='
+  countbound: 2
+  op: '=='
+  bound: true
+
+- name: resolve fan5 errors if present and functional
+  description: >
+    'If fan5 is present and functional, call the resolve fan5 errors callback.'
+  class: condition
+  condition: count
+  paths: fan5
+  properties: fan present and functional
+  callback: resolve fan5 errors
+  countop: '=='
+  countbound: 2
+  op: '=='
+  bound: true
+
+- name: resolve fan0 errors
+  class: callback
+  callback: resolve callout
+  paths: fan0
+  properties: fan present and functional
+  callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan0
+
+- name: resolve fan1 errors
+  class: callback
+  callback: resolve callout
+  paths: fan1
+  properties: fan present and functional
+  callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan1
+
+- name: resolve fan2 errors
+  class: callback
+  callback: resolve callout
+  paths: fan2
+  properties: fan present and functional
+  callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan2
+
+- name: resolve fan3 errors
+  class: callback
+  callback: resolve callout
+  paths: fan3
+  properties: fan present and functional
+  callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan3
+
+- name: resolve fan4 errors
+  class: callback
+  callback: resolve callout
+  paths: fan4
+  properties: fan present and functional
+  callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan4
+
+- name: resolve fan5 errors
+  class: callback
+  callback: resolve callout
+  paths: fan5
+  properties: fan present and functional
+  callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/fan5
diff --git a/meta-witherspoon/recipes-phosphor/dbus/phosphor-dbus-monitor-config.bbappend b/meta-witherspoon/recipes-phosphor/dbus/phosphor-dbus-monitor-config.bbappend
index 185db10..3a18960 100644
--- a/meta-witherspoon/recipes-phosphor/dbus/phosphor-dbus-monitor-config.bbappend
+++ b/meta-witherspoon/recipes-phosphor/dbus/phosphor-dbus-monitor-config.bbappend
@@ -2,3 +2,7 @@
 PHOSPHOR_DBUS_MONITOR_CONFIGS_append_ibm-ac-server = " thermal-policy"
 PHOSPHOR_DBUS_MONITOR_CONFIGS_append_ibm-ac-server = " power-supply-policy"
 PHOSPHOR_DBUS_MONITOR_CONFIGS_append_ibm-ac-server = " events-policy"
+PHOSPHOR_DBUS_MONITOR_CONFIGS_append_mihawk = " fan-policy"
+PHOSPHOR_DBUS_MONITOR_CONFIGS_append_mihawk = " thermal-policy"
+PHOSPHOR_DBUS_MONITOR_CONFIGS_append_mihawk = " power-supply-policy"
+PHOSPHOR_DBUS_MONITOR_CONFIGS_append_mihawk = " events-policy"
diff --git a/meta-witherspoon/recipes-phosphor/dbus/phosphor-dbus-monitor_%.bbappend b/meta-witherspoon/recipes-phosphor/dbus/phosphor-dbus-monitor_%.bbappend
index 8e1bf41..5c9d0b1 100644
--- a/meta-witherspoon/recipes-phosphor/dbus/phosphor-dbus-monitor_%.bbappend
+++ b/meta-witherspoon/recipes-phosphor/dbus/phosphor-dbus-monitor_%.bbappend
@@ -1 +1,2 @@
 SYSTEMD_LINK_phosphor-msl-verify_append_ibm-ac-server = " ../phosphor-msl-verify.service:obmc-chassis-poweron@0.target.requires/phosphor-msl-verify.service"
+SYSTEMD_LINK_phosphor-msl-verify_append_mihawk = " ../phosphor-msl-verify.service:obmc-chassis-poweron@0.target.requires/phosphor-msl-verify.service"
diff --git a/meta-witherspoon/recipes-phosphor/dbus/thermal-policy.bb b/meta-witherspoon/recipes-phosphor/dbus/thermal-policy.bb
index 9fb7d25..5631ec4 100644
--- a/meta-witherspoon/recipes-phosphor/dbus/thermal-policy.bb
+++ b/meta-witherspoon/recipes-phosphor/dbus/thermal-policy.bb
@@ -8,7 +8,7 @@
 
 FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:"
 
-SRC_URI += "file://thermal-policy.yaml"
+SRC_URI = "file://thermal-policy.yaml"
 
 do_install() {
         install -D ${WORKDIR}/thermal-policy.yaml ${D}${config_dir}/thermal-policy.yaml
diff --git a/meta-witherspoon/recipes-phosphor/dbus/thermal-policy/thermal-policy.yaml b/meta-witherspoon/recipes-phosphor/dbus/thermal-policy/ibm-ac-server/thermal-policy.yaml
similarity index 100%
rename from meta-witherspoon/recipes-phosphor/dbus/thermal-policy/thermal-policy.yaml
rename to meta-witherspoon/recipes-phosphor/dbus/thermal-policy/ibm-ac-server/thermal-policy.yaml
diff --git a/meta-witherspoon/recipes-phosphor/dbus/thermal-policy/mihawk/thermal-policy.yaml b/meta-witherspoon/recipes-phosphor/dbus/thermal-policy/mihawk/thermal-policy.yaml
new file mode 100644
index 0000000..f8e89b2
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/dbus/thermal-policy/mihawk/thermal-policy.yaml
@@ -0,0 +1,187 @@
+# Mihawk thermal policy for PDM.
+#
+# Shut down the system if more than three cores
+# have a temperature greater than 100 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
diff --git a/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-control-events-config/mihawk/events.yaml b/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-control-events-config/mihawk/events.yaml
new file mode 100644
index 0000000..b7fd1f7
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-control-events-config/mihawk/events.yaml
@@ -0,0 +1,586 @@
+groups:
+    - name: zone0_control_mode
+      description: Thermal control mode for zone 0
+      service: xyz.openbmc_project.Control.Thermal
+      type: /xyz/openbmc_project/control/thermal
+      members:
+          - /0
+    - 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/fan0
+          - /system/chassis/motherboard/fan1
+          - /system/chassis/motherboard/fan2
+          - /system/chassis/motherboard/fan3
+          - /system/chassis/motherboard/fan4
+          - /system/chassis/motherboard/fan5
+    - name: zone0_ambient
+      description: Group of ambient temperature sensors for zone 0
+      type: /xyz/openbmc_project/sensors
+      members:
+          - /temperature/ambient_temp
+    - 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
+          - /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_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
+          - /temperature/dimm8_temp
+          - /temperature/dimm9_temp
+          - /temperature/dimm10_temp
+          - /temperature/dimm11_temp
+          - /temperature/dimm12_temp
+          - /temperature/dimm13_temp
+          - /temperature/dimm14_temp
+          - /temperature/dimm15_temp
+          - /temperature/dimm16_temp
+          - /temperature/dimm17_temp
+          - /temperature/dimm18_temp
+          - /temperature/dimm19_temp
+          - /temperature/dimm20_temp
+          - /temperature/dimm21_temp
+          - /temperature/dimm22_temp
+          - /temperature/dimm23_temp
+          - /temperature/dimm24_temp
+          - /temperature/dimm25_temp
+          - /temperature/dimm26_temp
+          - /temperature/dimm27_temp
+          - /temperature/dimm28_temp
+          - /temperature/dimm29_temp
+          - /temperature/dimm30_temp
+          - /temperature/dimm31_temp
+    - name: zone0_onboard
+      description: Group of onboard temperature sensors for zone 0
+      type: /xyz/openbmc_project/sensors
+      members:
+          - /temperature/p0_pcie_temp
+          - /temperature/p1_pcie_temp
+    - name: zone0_vrd
+      description: Group of vrd temperature sensors for zone 0
+      type: /xyz/openbmc_project/sensors
+      members:
+          - /temperature/p0_vcs_temp
+          - /temperature/p0_vdn_temp
+          - /temperature/p1_vcs_temp
+          - /temperature/p1_vdn_temp
+          - /temperature/p0_vdd_temp
+          - /temperature/p1_vdd_temp
+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:
+          name: objectSignal
+          parameters:
+              - object
+              - interface
+          handler: removeInterface
+    - 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 and ownership status for the given group
+      parameters:
+          - group
+    - name: removeInterface
+      description: >
+          Removes an interface(and all associated properties) on the
+          given object from use within all event actions
+      parameters:
+          - object
+          - interface
+
+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
+    - name: use_alternate_events_on_state
+      description: >
+          Replaces a set of default events with an alternate set of events
+          when all the group properties are at a given state
+      parameters:
+          - property
+          - defevents
+          - altevents
+
+events:
+    - name: missing_before_high_speed_air
+      groups:
+          - name: air_cooled_zone0_fans
+            zone_conditions:
+                - name: air_cooled_chassis
+                  zones:
+                      - 0
+            interface: xyz.openbmc_project.Inventory.Item
+            property:
+                name: Present
+                type: bool
+      matches:
+          - name: interfacesAdded
+          - name: propertiesChanged
+      actions:
+          - name: count_state_before_speed
+            count: 1
+            property:
+                value: false
+                type: bool
+            speed:
+                value: 255
+                type: uint64_t
+    - name: fails_before_high_speed_air
+      groups:
+          - name: air_cooled_zone0_fans
+            zone_conditions:
+                - name: air_cooled_chassis
+                  zones:
+                      - 0
+            interface: xyz.openbmc_project.State.Decorator.OperationalStatus
+            property:
+                name: Functional
+                type: bool
+      matches:
+          - name: propertiesChanged
+      actions:
+          - name: count_state_before_speed
+            count: 1
+            property:
+                value: false
+                type: bool
+            speed:
+                value: 255
+                type: uint64_t
+    - name: set_air_cooled_speed_boundaries_based_on_ambient
+      groups:
+          - name: zone0_control_mode
+            zone_conditions:
+                - name: air_cooled_chassis
+                  zones:
+                      - 0
+            interface: xyz.openbmc_project.Control.ThermalMode
+            property:
+                name: Current
+                type: std::string
+      matches:
+          - name: propertiesChanged
+      actions:
+          - name: use_alternate_events_on_state
+            property:
+                value: CUSTOM
+                type: std::string
+            defevents:
+                - name: default_floor_boundary
+                  groups:
+                      - name: zone0_ambient
+                        zone_conditions:
+                            - name: air_cooled_chassis
+                              zones:
+                                  - 0
+                        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:
+                                - 25000: 85
+                                - 26000: 85
+                                - 28000: 97
+                                - 31000: 116
+                                - 33000: 128
+                                - 36000: 148
+                                - 38000: 160
+                                - 41000: 255
+                            type: std::map<int64_t, uint64_t>
+                      - name: set_ceiling_from_average_sensor_value
+                        map:
+                            value:
+                                - 25000: 255
+                                - 27000: 255
+                            type: std::map<int64_t, uint64_t>
+            altevents:
+                - name: alternate_floor_boundary
+                  groups:
+                      - name: zone0_ambient
+                        zone_conditions:
+                            - name: air_cooled_chassis
+                              zones:
+                                  - 0
+                        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:
+                                - 25000: 255
+                                - 26000: 255
+                                - 28000: 255
+                                - 31000: 255
+                                - 33000: 255
+                                - 36000: 255
+                                - 38000: 255
+                                - 41000: 255
+                            type: std::map<int64_t, uint64_t>
+                      - name: set_ceiling_from_average_sensor_value
+                        map:
+                            value:
+                                - 25000: 255
+                                - 27000: 255
+                            type: std::map<int64_t, uint64_t>
+    - 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
+                groups:
+                    - name: zone0_cores
+                      zone_conditions:
+                          - name: air_cooled_chassis
+                            zones:
+                                - 0
+                      interface: xyz.openbmc_project.Sensor.Value
+                      property:
+                          name: Value
+                          type: int64_t
+                matches:
+                    - name: interfacesAdded
+                    - name: propertiesChanged
+                    - name: interfacesRemoved
+                actions:
+                    - name: set_net_increase_speed
+                      property:
+                          value: 75000
+                          type: int64_t
+                      factor:
+                          value: 1000
+                          type: int64_t
+                      delta:
+                          value: 13
+                          type: uint64_t
+                    - name: set_net_decrease_speed
+                      property:
+                          value: 70000
+                          type: int64_t
+                      factor:
+                          value: 7000
+                          type: int64_t
+                      delta:
+                          value: 5
+                          type: uint64_t
+                timer:
+                    interval: 1
+              - name: speed_changes_based_on_dimm_temps
+                groups:
+                    - name: zone0_dimms
+                      interface: xyz.openbmc_project.Sensor.Value
+                      property:
+                          name: Value
+                          type: int64_t
+                matches:
+                    - name: interfacesAdded
+                    - name: propertiesChanged
+                    - name: interfacesRemoved
+                actions:
+                    - name: set_net_increase_speed
+                      property:
+                          value: 80000
+                          type: int64_t
+                      factor:
+                          value: 1000
+                          type: int64_t
+                      delta:
+                          value: 8
+                          type: uint64_t
+                    - name: set_net_decrease_speed
+                      property:
+                          value: 75000
+                          type: int64_t
+                      factor:
+                          value: 3000
+                          type: int64_t
+                      delta:
+                          value: 3
+                          type: uint64_t
+                timer:
+                    interval: 5
+              - name: speed_changes_based_on_onboard_temps
+                groups:
+                    - name: zone0_onboard
+                      zone_conditions:
+                          - name: air_cooled_chassis
+                            zones:
+                                - 0
+                      interface: xyz.openbmc_project.Sensor.Value
+                      property:
+                          name: Value
+                          type: int64_t
+                matches:
+                    - name: interfacesAdded
+                    - name: propertiesChanged
+                    - name: interfacesRemoved
+                actions:
+                    - name: set_net_increase_speed
+                      property:
+                          value: 50000
+                          type: int64_t
+                      factor:
+                          value: 1000
+                          type: int64_t
+                      delta:
+                          value: 8
+                          type: uint64_t
+                    - name: set_net_decrease_speed
+                      property:
+                          value: 47000
+                          type: int64_t
+                      factor:
+                          value: 3000
+                          type: int64_t
+                      delta:
+                          value: 3
+                          type: uint64_t
+                timer:
+                    interval: 10
+              - name: speed_changes_based_on_vrd_temps
+                groups:
+                    - name: zone0_vrd
+                      zone_conditions:
+                          - name: air_cooled_chassis
+                            zones:
+                                - 0
+                      interface: xyz.openbmc_project.Sensor.Value
+                      property:
+                          name: Value
+                          type: int64_t
+                matches:
+                    - name: interfacesAdded
+                    - name: propertiesChanged
+                    - name: interfacesRemoved
+                actions:
+                    - name: set_net_increase_speed
+                      property:
+                          value: 90000
+                          type: int64_t
+                      factor:
+                          value: 1000
+                          type: int64_t
+                      delta:
+                          value: 5
+                          type: uint64_t
+                    - name: set_net_decrease_speed
+                      property:
+                          value: 85000
+                          type: int64_t
+                      factor:
+                          value: 3000
+                          type: int64_t
+                      delta:
+                          value: 3
+                          type: uint64_t
+                timer:
+                    interval: 10
diff --git a/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-control-fan-config/mihawk/fans.yaml b/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-control-fan-config/mihawk/fans.yaml
new file mode 100644
index 0000000..9133fa1
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-control-fan-config/mihawk/fans.yaml
@@ -0,0 +1,31 @@
+fans:
+  - inventory: /system/chassis/motherboard/fan0
+    cooling_zone: 0
+    sensors:
+      - fan0_0
+    target_interface: xyz.openbmc_project.Control.FanPwm
+  - inventory: /system/chassis/motherboard/fan1
+    cooling_zone: 0
+    sensors:
+      - fan1_0
+    target_interface: xyz.openbmc_project.Control.FanPwm
+  - inventory: /system/chassis/motherboard/fan2
+    cooling_zone: 0
+    sensors:
+      - fan2_0
+    target_interface: xyz.openbmc_project.Control.FanPwm
+  - inventory: /system/chassis/motherboard/fan3
+    cooling_zone: 0
+    sensors:
+      - fan3_0
+    target_interface: xyz.openbmc_project.Control.FanPwm
+  - inventory: /system/chassis/motherboard/fan4
+    cooling_zone: 0
+    sensors:
+      - fan4_0
+    target_interface: xyz.openbmc_project.Control.FanPwm
+  - inventory: /system/chassis/motherboard/fan5
+    cooling_zone: 0
+    sensors:
+      - fan5_0
+    target_interface: xyz.openbmc_project.Control.FanPwm
diff --git a/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config/mihawk/zone_conditions.yaml b/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config/mihawk/zone_conditions.yaml
new file mode 100644
index 0000000..7dc99b6
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-control-zone-conditions-config/mihawk/zone_conditions.yaml
@@ -0,0 +1,9 @@
+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
diff --git a/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-control-zone-config/mihawk/zones.yaml b/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-control-zone-config/mihawk/zones.yaml
new file mode 100644
index 0000000..4deb252
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-control-zone-config/mihawk/zones.yaml
@@ -0,0 +1,42 @@
+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: 255
+      default_floor: 195
+      increase_delay: 5
+      decrease_interval: 30
+      interfaces:
+          - name: xyz.openbmc_project.Control.ThermalMode
+            properties:
+                - name: Supported
+                  type: array[string]
+                  values:
+                      - value: DEFAULT
+                        description: >
+                            Default thermal control mode
+                      - value: CUSTOM
+                        description: >
+                            Custom thermal control mode for handling the use of
+                            optical cables located behind the GPU exhaust that
+                            could produce overtemp warnings without this mode
+                            enabled.
+                - name: Current
+                  type: string
+                  persist: true
+                  values:
+                      - value: DEFAULT
+                        description: >
+                            Set current thermal control mode to the
+                            default which will be replaced on startup if
+                            another selected mode was persisted.
\ No newline at end of file
diff --git a/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-monitor-config/mihawk/monitor.yaml b/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-monitor-config/mihawk/monitor.yaml
new file mode 100644
index 0000000..076349d
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-monitor-config/mihawk/monitor.yaml
@@ -0,0 +1,96 @@
+fans:
+  - inventory: /system/chassis/motherboard/fan0
+    allowed_out_of_range_time: 10
+    deviation: 15
+    num_sensors_nonfunc_for_fan_nonfunc: 1
+    sensors:
+      - name: fan0_0
+        has_target: true
+        target_interface: xyz.openbmc_project.Control.FanPwm
+        factor: 70
+        offset: 1200
+      - name: fan0_1
+        has_target: false
+        target_interface: xyz.openbmc_project.Control.FanPwm
+        factor: 70
+        offset: 1200
+
+  - inventory: /system/chassis/motherboard/fan1
+    allowed_out_of_range_time: 10
+    deviation: 15
+    num_sensors_nonfunc_for_fan_nonfunc: 1
+    sensors:
+      - name: fan1_0
+        has_target: true
+        target_interface: xyz.openbmc_project.Control.FanPwm
+        factor: 70
+        offset: 1200
+      - name: fan1_1
+        has_target: false
+        target_interface: xyz.openbmc_project.Control.FanPwm
+        factor: 70
+        offset: 1200
+
+  - inventory: /system/chassis/motherboard/fan2
+    allowed_out_of_range_time: 10
+    deviation: 15
+    num_sensors_nonfunc_for_fan_nonfunc: 1
+    sensors:
+      - name: fan2_0
+        has_target: true
+        target_interface: xyz.openbmc_project.Control.FanPwm
+        factor: 70
+        offset: 1200
+      - name: fan2_1
+        has_target: false
+        target_interface: xyz.openbmc_project.Control.FanPwm
+        factor: 70
+        offset: 1200
+
+  - inventory: /system/chassis/motherboard/fan3
+    allowed_out_of_range_time: 10
+    deviation: 15
+    num_sensors_nonfunc_for_fan_nonfunc: 1
+    sensors:
+      - name: fan3_0
+        has_target: true
+        target_interface: xyz.openbmc_project.Control.FanPwm
+        factor: 70
+        offset: 1200
+      - name: fan3_1
+        has_target: false
+        target_interface: xyz.openbmc_project.Control.FanPwm
+        factor: 70
+        offset: 1200
+
+  - inventory: /system/chassis/motherboard/fan4
+    allowed_out_of_range_time: 10
+    deviation: 15
+    num_sensors_nonfunc_for_fan_nonfunc: 1
+    sensors:
+      - name: fan4_0
+        has_target: true
+        target_interface: xyz.openbmc_project.Control.FanPwm
+        factor: 70
+        offset: 1200
+      - name: fan4_1
+        has_target: false
+        target_interface: xyz.openbmc_project.Control.FanPwm
+        factor: 70
+        offset: 1200
+
+  - inventory: /system/chassis/motherboard/fan5
+    allowed_out_of_range_time: 10
+    deviation: 15
+    num_sensors_nonfunc_for_fan_nonfunc: 1
+    sensors:
+      - name: fan5_0
+        has_target: true
+        target_interface: xyz.openbmc_project.Control.FanPwm
+        factor: 70
+        offset: 1200
+      - name: fan5_1
+        has_target: false
+        target_interface: xyz.openbmc_project.Control.FanPwm
+        factor: 70
+        offset: 1200
diff --git a/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-presence-config/mihawk/config.yaml b/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-presence-config/mihawk/config.yaml
new file mode 100644
index 0000000..9cb5ecd
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/fans/phosphor-fan-presence-config/mihawk/config.yaml
@@ -0,0 +1,47 @@
+- name: fan0
+  path: /system/chassis/motherboard/fan0
+  methods:
+    - type: gpio
+      key: 9
+      physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
+      devpath: /dev/input/by-path/platform-gpio-keys-polled-event
+
+- name: fan1
+  path: /system/chassis/motherboard/fan1
+  methods:
+    - type: gpio
+      key: 10
+      physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
+      devpath: /dev/input/by-path/platform-gpio-keys-polled-event
+
+- name: fan2
+  path: /system/chassis/motherboard/fan2
+  methods:
+    - type: gpio
+      key: 11
+      physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
+      devpath: /dev/input/by-path/platform-gpio-keys-polled-event
+
+- name: fan3
+  path: /system/chassis/motherboard/fan3
+  methods:
+    - type: gpio
+      key: 12
+      physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
+      devpath: /dev/input/by-path/platform-gpio-keys-polled-event
+
+- name: fan4
+  path: /system/chassis/motherboard/fan4
+  methods:
+    - type: gpio
+      key: 13
+      physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
+      devpath: /dev/input/by-path/platform-gpio-keys-polled-event
+
+- name: fan5
+  path: /system/chassis/motherboard/fan5
+  methods:
+    - type: gpio
+      key: 14
+      physpath: /sys/devices/platform/ahb/ahb:apb/ahb:apb:bus@1e78a000/1e78a100.i2c-bus/i2c-3/3-0060
+      devpath: /dev/input/by-path/platform-gpio-keys-polled-event
diff --git a/meta-witherspoon/recipes-phosphor/fans/phosphor-fan/mihawk/obmc/phosphor-fan/phosphor-cooling-type-0.conf b/meta-witherspoon/recipes-phosphor/fans/phosphor-fan/mihawk/obmc/phosphor-fan/phosphor-cooling-type-0.conf
new file mode 100644
index 0000000..21fcfcb
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/fans/phosphor-fan/mihawk/obmc/phosphor-fan/phosphor-cooling-type-0.conf
@@ -0,0 +1,3 @@
+OBJPATH="--path=/system/chassis"
+AIR="--air"
+
diff --git a/meta-witherspoon/recipes-phosphor/fans/phosphor-fan/mihawk/phosphor-cooling-type@.service b/meta-witherspoon/recipes-phosphor/fans/phosphor-fan/mihawk/phosphor-cooling-type@.service
new file mode 100644
index 0000000..9232b13
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/fans/phosphor-fan/mihawk/phosphor-cooling-type@.service
@@ -0,0 +1,15 @@
+[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]
+Type=oneshot
+RemainAfterExit=yes
+EnvironmentFile={envfiledir}/obmc/phosphor-fan/phosphor-cooling-type-%i.conf
+ExecStart=/usr/bin/env phosphor-cooling-type ${{OBJPATH}} ${{AIR}}
+SyslogIdentifier=phosphor-cooling-type
+
+[Install]
+RequiredBy=multi-user.target
diff --git a/meta-witherspoon/recipes-phosphor/fans/phosphor-fan_%.bbappend b/meta-witherspoon/recipes-phosphor/fans/phosphor-fan_%.bbappend
index 88c32ff..085857c 100644
--- a/meta-witherspoon/recipes-phosphor/fans/phosphor-fan_%.bbappend
+++ b/meta-witherspoon/recipes-phosphor/fans/phosphor-fan_%.bbappend
@@ -3,9 +3,14 @@
 # Package configuration
 FAN_PACKAGES_append_ibm-ac-server = " \
         phosphor-cooling-type \
-"
+        "
+
+FAN_PACKAGES_append_mihawk = " \
+        phosphor-cooling-type \
+        "
 
 PACKAGECONFIG_append_ibm-ac-server = " cooling-type"
+PACKAGECONFIG_append_mihawk = " cooling-type"
 
 TMPL_COOLING = "phosphor-cooling-type@.service"
 INSTFMT_COOLING = "phosphor-cooling-type@{0}.service"
@@ -15,10 +20,14 @@
 FILES_phosphor-cooling-type_append_ibm-ac-server = " ${bindir}/phosphor-cooling-type"
 SYSTEMD_SERVICE_phosphor-cooling-type_append_ibm-ac-server = " ${TMPL_COOLING}"
 SYSTEMD_LINK_phosphor-cooling-type_append_ibm-ac-server = " ${@compose_list(d, 'FMT_COOLING', 'OBMC_CHASSIS_INSTANCES')}"
+FILES_phosphor-cooling-type_append_mihawk = " ${bindir}/phosphor-cooling-type"
+SYSTEMD_SERVICE_phosphor-cooling-type_append_mihawk = " ${TMPL_COOLING}"
+SYSTEMD_LINK_phosphor-cooling-type_append_mihawk = " ${@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_append_ibm-ac-server = " ${@compose_list(d, 'COOLING_ENV_FMT', 'OBMC_CHASSIS_INSTANCES')}"
+SYSTEMD_ENVIRONMENT_FILE_phosphor-cooling-type_append_mihawk = " ${@compose_list(d, 'COOLING_ENV_FMT', 'OBMC_CHASSIS_INSTANCES')}"
 
 #These services are protected by the watchdog
 SYSTEMD_OVERRIDE_phosphor-fan-control_witherspoon += "fan-watchdog-monitor.conf:phosphor-fan-control-init@0.service.d/fan-watchdog-monitor.conf"
diff --git a/meta-witherspoon/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend b/meta-witherspoon/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend
index b2e466d..f32ba3e 100644
--- a/meta-witherspoon/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend
+++ b/meta-witherspoon/recipes-phosphor/packagegroups/packagegroup-obmc-apps.bbappend
@@ -1,5 +1,5 @@
 RDEPENDS_${PN}-inventory_append_ibm-ac-server = " openpower-fru-vpd openpower-occ-control phosphor-cooling-type virtual/obmc-gpio-presence"
-RDEPENDS_${PN}-inventory_append_mihawk = " openpower-fru-vpd openpower-occ-control virtual/obmc-gpio-presence id-button"
+RDEPENDS_${PN}-inventory_append_mihawk = " openpower-fru-vpd openpower-occ-control virtual/obmc-gpio-presence id-button phosphor-cooling-type"
 RDEPENDS_${PN}-fan-control_append_ibm-ac-server = " witherspoon-fan-watchdog"
 RDEPENDS_${PN}-extras_append_ibm-ac-server = " witherspoon-pfault-analysis witherspoon-power-supply-sync phosphor-webui"
 RDEPENDS_${PN}-extras_append_mihawk = " phosphor-webui phosphor-image-signing"
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@100/power-supply@58.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@100/power-supply@58.conf
new file mode 100644
index 0000000..61b4253
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@100/power-supply@58.conf
@@ -0,0 +1,4 @@
+LABEL_in1="ps1_input_voltage"
+LABEL_in2="ps1_output_voltage"
+LABEL_curr1="ps1_output_current"
+LABEL_power1="ps1_input_power"
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@100/power-supply@5b.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@100/power-supply@5b.conf
new file mode 100644
index 0000000..92838e1
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@100/power-supply@5b.conf
@@ -0,0 +1,4 @@
+LABEL_in1="ps0_input_voltage"
+LABEL_in2="ps0_output_voltage"
+LABEL_curr1="ps0_output_current"
+LABEL_power1="ps0_input_power"
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@140/ir35221@70.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@140/ir35221@70.conf
new file mode 100644
index 0000000..3c25a4a
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@140/ir35221@70.conf
@@ -0,0 +1,11 @@
+LABEL_temp1 = "p0_vdd_temp"
+WARNHI_temp1 = "100000"
+WARNLO_temp1 = "0"
+CRITHI_temp1 = "105000"
+CRITLO_temp1 = "0"
+
+LABEL_temp2 = "p0_vcs_temp"
+WARNHI_temp2 = "100000"
+WARNLO_temp2 = "0"
+CRITHI_temp2 = "105000"
+CRITLO_temp2 = "0"
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@140/ir35221@72.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@140/ir35221@72.conf
new file mode 100644
index 0000000..7f1f4d8
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@140/ir35221@72.conf
@@ -0,0 +1,5 @@
+LABEL_temp1 = "p0_vdn_temp"
+WARNHI_temp1 = "100000"
+WARNLO_temp1 = "0"
+CRITHI_temp1 = "105000"
+CRITLO_temp1 = "0"
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@180/ir35221@70.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@180/ir35221@70.conf
new file mode 100644
index 0000000..5f0985d
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@180/ir35221@70.conf
@@ -0,0 +1,11 @@
+LABEL_temp1 = "p1_vdd_temp"
+WARNHI_temp1 = "100000"
+WARNLO_temp1 = "0"
+CRITHI_temp1 = "105000"
+CRITLO_temp1 = "0"
+
+LABEL_temp2 = "p1_vcs_temp"
+WARNHI_temp2 = "100000"
+WARNLO_temp2 = "0"
+CRITHI_temp2 = "105000"
+CRITLO_temp2 = "0"
\ No newline at end of file
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@180/ir35221@72.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@180/ir35221@72.conf
new file mode 100644
index 0000000..4383728
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@180/ir35221@72.conf
@@ -0,0 +1,5 @@
+LABEL_temp1 = "p1_vdn_temp"
+WARNHI_temp1 = "100000"
+WARNLO_temp1 = "0"
+CRITHI_temp1 = "105000"
+CRITLO_temp1 = "0"
\ No newline at end of file
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@400/emc1403@4c.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@400/emc1403@4c.conf
new file mode 100644
index 0000000..7c7b248
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@400/emc1403@4c.conf
@@ -0,0 +1,2 @@
+LABEL_temp2 = "ambient_temp"
+
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@400/tmp275@48.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@400/tmp275@48.conf
new file mode 100644
index 0000000..4f89e7f
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@400/tmp275@48.conf
@@ -0,0 +1,2 @@
+LABEL_temp1 = "p1_pcie_temp"
+
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@400/tmp275@49.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@400/tmp275@49.conf
new file mode 100644
index 0000000..959c66f
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@400/tmp275@49.conf
@@ -0,0 +1,2 @@
+LABEL_temp1 = "p0_pcie_temp"
+
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@440/pca9545@70/i2c@3/tmp275@48.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@440/pca9545@70/i2c@3/tmp275@48.conf
new file mode 100644
index 0000000..82f0658
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/bus@1e78a000/i2c-bus@440/pca9545@70/i2c@3/tmp275@48.conf
@@ -0,0 +1,2 @@
+LABEL_temp1 = "M2_riser_temp"
+
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/pwm-tacho-controller@1e786000.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/pwm-tacho-controller@1e786000.conf
new file mode 100644
index 0000000..5d14ebc
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/ahb/apb/pwm-tacho-controller@1e786000.conf
@@ -0,0 +1,25 @@
+LABEL_fan1 = "fan0_0"
+LABEL_fan2 = "fan0_1"
+LABEL_fan3 = "fan1_0"
+LABEL_fan4 = "fan1_1"
+LABEL_fan5 = "fan2_0"
+LABEL_fan6 = "fan2_1"
+LABEL_fan7 = "fan3_0"
+LABEL_fan8 = "fan3_1" 
+LABEL_fan9 = "fan4_0"
+LABEL_fan10 = "fan4_1"
+LABEL_fan11 = "fan5_0"
+LABEL_fan12 = "fan5_1"
+
+PWM_TARGET_fan1 = "1"
+PWM_TARGET_fan2 = "1"
+PWM_TARGET_fan3 = "2"
+PWM_TARGET_fan4 = "2"
+PWM_TARGET_fan5 = "3"
+PWM_TARGET_fan6 = "3"
+PWM_TARGET_fan7 = "4"
+PWM_TARGET_fan8 = "4"
+PWM_TARGET_fan9 = "5"
+PWM_TARGET_fan10 = "5"
+PWM_TARGET_fan11 = "6"
+PWM_TARGET_fan12 = "6"
\ No newline at end of file
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/devices/platform/gpio-fsi/fsi0/slave@00--00/00--00--00--06/sbefifo1-dev0/occ-hwmon.1.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/devices/platform/gpio-fsi/fsi0/slave@00--00/00--00--00--06/sbefifo1-dev0/occ-hwmon.1.conf
new file mode 100644
index 0000000..f47b49a
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/devices/platform/gpio-fsi/fsi0/slave@00--00/00--00--00--06/sbefifo1-dev0/occ-hwmon.1.conf
@@ -0,0 +1,290 @@
+MODE_temp1 = "label"
+MODE_temp2 = "label"
+MODE_temp3 = "label"
+MODE_temp4 = "label"
+MODE_temp5 = "label"
+MODE_temp6 = "label"
+MODE_temp7 = "label"
+MODE_temp8 = "label"
+MODE_temp9 = "label"
+MODE_temp10 = "label"
+MODE_temp11 = "label"
+MODE_temp12 = "label"
+MODE_temp13 = "label"
+MODE_temp14 = "label"
+MODE_temp15 = "label"
+MODE_temp16 = "label"
+MODE_temp17 = "label"
+MODE_temp18 = "label"
+MODE_temp19 = "label"
+MODE_temp20 = "label"
+MODE_temp21 = "label"
+MODE_temp22 = "label"
+MODE_temp23 = "label"
+MODE_temp24 = "label"
+MODE_temp25 = "label"
+MODE_temp26 = "label"
+MODE_temp27 = "label"
+MODE_temp28 = "label"
+MODE_temp29 = "label"
+MODE_temp30 = "label"
+MODE_temp31 = "label"
+MODE_temp32 = "label"
+MODE_temp33 = "label"
+MODE_temp34 = "label"
+MODE_temp35 = "label"
+MODE_temp36 = "label"
+MODE_temp37 = "label"
+MODE_temp38 = "label"
+MODE_temp39 = "label"
+MODE_temp40 = "label"
+LABEL_temp17 = "p0_core0_temp"
+WARNHI_temp17 = "85000"
+WARNLO_temp17 = "0"
+CRITHI_temp17 = "90000"
+CRITLO_temp17 = "0"
+
+LABEL_temp20 = "p0_core1_temp"
+WARNHI_temp20 = "85000"
+WARNLO_temp20 = "0"
+CRITHI_temp20 = "90000"
+CRITLO_temp20 = "0"
+
+LABEL_temp23 = "p0_core2_temp"
+WARNHI_temp23 = "85000"
+WARNLO_temp23 = "0"
+CRITHI_temp23 = "90000"
+CRITLO_temp23 = "0"
+
+LABEL_temp26 = "p0_core3_temp"
+WARNHI_temp26 = "85000"
+WARNLO_temp26 = "0"
+CRITHI_temp26 = "90000"
+CRITLO_temp26 = "0"
+
+LABEL_temp29 = "p0_core4_temp"
+WARNHI_temp29 = "85000"
+WARNLO_temp29 = "0"
+CRITHI_temp29 = "90000"
+CRITLO_temp29 = "0"
+
+LABEL_temp32 = "p0_core5_temp"
+WARNHI_temp32 = "85000"
+WARNLO_temp32 = "0"
+CRITHI_temp32 = "90000"
+CRITLO_temp32 = "0"
+
+LABEL_temp35 = "p0_core6_temp"
+WARNHI_temp35 = "85000"
+WARNLO_temp35 = "0"
+CRITHI_temp35 = "90000"
+CRITLO_temp35 = "0"
+
+LABEL_temp38 = "p0_core7_temp"
+WARNHI_temp38 = "85000"
+WARNLO_temp38 = "0"
+CRITHI_temp38 = "90000"
+CRITLO_temp38 = "0"
+
+LABEL_temp41 = "p0_core8_temp"
+WARNHI_temp41 = "85000"
+WARNLO_temp41 = "0"
+CRITHI_temp41 = "90000"
+CRITLO_temp41 = "0"
+
+LABEL_temp44 = "p0_core9_temp"
+WARNHI_temp44 = "85000"
+WARNLO_temp44 = "0"
+CRITHI_temp44 = "90000"
+CRITLO_temp44 = "0"
+
+LABEL_temp47 = "p0_core10_temp"
+WARNHI_temp47 = "85000"
+WARNLO_temp47 = "0"
+CRITHI_temp47 = "90000"
+CRITLO_temp47 = "0"
+
+LABEL_temp50 = "p0_core11_temp"
+WARNHI_temp50 = "85000"
+WARNLO_temp50 = "0"
+CRITHI_temp50 = "90000"
+CRITLO_temp50 = "0"
+
+LABEL_temp53 = "p0_core12_temp"
+WARNHI_temp53 = "85000"
+WARNLO_temp53 = "0"
+CRITHI_temp53 = "90000"
+CRITLO_temp53 = "0"
+
+LABEL_temp56 = "p0_core13_temp"
+WARNHI_temp56 = "85000"
+WARNLO_temp56 = "0"
+CRITHI_temp56 = "90000"
+CRITLO_temp56 = "0"
+
+LABEL_temp59 = "p0_core14_temp"
+WARNHI_temp59 = "85000"
+WARNLO_temp59 = "0"
+CRITHI_temp59 = "90000"
+CRITLO_temp59 = "0"
+
+LABEL_temp62 = "p0_core15_temp"
+WARNHI_temp62 = "85000"
+WARNLO_temp62 = "0"
+CRITHI_temp62 = "90000"
+CRITLO_temp62 = "0"
+
+LABEL_temp65 = "p0_core16_temp"
+WARNHI_temp65 = "85000"
+WARNLO_temp65 = "0"
+CRITHI_temp65 = "90000"
+CRITLO_temp65 = "0"
+
+LABEL_temp68 = "p0_core17_temp"
+WARNHI_temp68 = "85000"
+WARNLO_temp68 = "0"
+CRITHI_temp68 = "90000"
+CRITLO_temp68 = "0"
+
+LABEL_temp71 = "p0_core18_temp"
+WARNHI_temp71 = "85000"
+WARNLO_temp71 = "0"
+CRITHI_temp71 = "90000"
+CRITLO_temp71 = "0"
+
+LABEL_temp74 = "p0_core19_temp"
+WARNHI_temp74 = "85000"
+WARNLO_temp74 = "0"
+CRITHI_temp74 = "90000"
+CRITLO_temp74 = "0"
+
+LABEL_temp77 = "p0_core20_temp"
+WARNHI_temp77 = "85000"
+WARNLO_temp77 = "0"
+CRITHI_temp77 = "90000"
+CRITLO_temp77 = "0"
+
+LABEL_temp80 = "p0_core21_temp"
+WARNHI_temp80 = "85000"
+WARNLO_temp80 = "0"
+CRITHI_temp80 = "90000"
+CRITLO_temp80 = "0"
+
+LABEL_temp83 = "p0_core22_temp"
+WARNHI_temp83 = "85000"
+WARNLO_temp83 = "0"
+CRITHI_temp83 = "90000"
+CRITLO_temp83 = "0"
+
+LABEL_temp86 = "p0_core23_temp"
+WARNHI_temp86 = "85000"
+WARNLO_temp86 = "0"
+CRITHI_temp86 = "90000"
+CRITLO_temp86 = "0"
+
+LABEL_temp165 = "dimm0_temp"
+WARNHI_temp165 = "85000"
+WARNLO_temp165 = "0"
+CRITHI_temp165 = "95000"
+CRITLO_temp165 = "0"
+
+LABEL_temp167 = "dimm1_temp"
+WARNHI_temp167 = "85000"
+WARNLO_temp167 = "0"
+CRITHI_temp167 = "95000"
+CRITLO_temp167 = "0"
+
+LABEL_temp169 = "dimm2_temp"
+WARNHI_temp169 = "85000"
+WARNLO_temp169 = "0"
+CRITHI_temp169 = "95000"
+CRITLO_temp169 = "0"
+
+LABEL_temp171 = "dimm3_temp"
+WARNHI_temp171 = "85000"
+WARNLO_temp171 = "0"
+CRITHI_temp171 = "95000"
+CRITLO_temp171 = "0"
+
+LABEL_temp173 = "dimm4_temp"
+WARNHI_temp173 = "85000"
+WARNLO_temp173 = "0"
+CRITHI_temp173 = "95000"
+CRITLO_temp173 = "0"
+
+LABEL_temp175 = "dimm5_temp"
+WARNHI_temp175 = "85000"
+WARNLO_temp175 = "0"
+CRITHI_temp175 = "95000"
+CRITLO_temp175 = "0"
+
+LABEL_temp177 = "dimm6_temp"
+WARNHI_temp177 = "85000"
+WARNLO_temp177 = "0"
+CRITHI_temp177 = "95000"
+CRITLO_temp177 = "0"
+
+LABEL_temp179 = "dimm7_temp"
+WARNHI_temp179 = "85000"
+WARNLO_temp179 = "0"
+CRITHI_temp179 = "95000"
+CRITLO_temp179 = "0"
+
+LABEL_temp197 = "dimm16_temp"
+WARNHI_temp197 = "85000"
+WARNLO_temp197 = "0"
+CRITHI_temp197 = "95000"
+CRITLO_temp197 = "0"
+
+LABEL_temp199 = "dimm17_temp"
+WARNHI_temp199 = "85000"
+WARNLO_temp199 = "0"
+CRITHI_temp199 = "95000"
+CRITLO_temp199 = "0"
+
+LABEL_temp201 = "dimm18_temp"
+WARNHI_temp201 = "85000"
+WARNLO_temp201 = "0"
+CRITHI_temp201 = "95000"
+CRITLO_temp201 = "0"
+
+LABEL_temp203 = "dimm19_temp"
+WARNHI_temp203 = "85000"
+WARNLO_temp203 = "0"
+CRITHI_temp203 = "95000"
+CRITLO_temp203 = "0"
+
+LABEL_temp205 = "dimm20_temp"
+WARNHI_temp205 = "85000"
+WARNLO_temp205 = "0"
+CRITHI_temp205 = "95000"
+CRITLO_temp205 = "0"
+
+LABEL_temp207 = "dimm21_temp"
+WARNHI_temp207 = "85000"
+WARNLO_temp207 = "0"
+CRITHI_temp207 = "95000"
+CRITLO_temp207 = "0"
+
+LABEL_temp209 = "dimm22_temp"
+WARNHI_temp209 = "85000"
+WARNLO_temp209 = "0"
+CRITHI_temp209 = "95000"
+CRITLO_temp209 = "0"
+
+LABEL_temp211 = "dimm23_temp"
+WARNHI_temp211 = "85000"
+WARNLO_temp211 = "0"
+CRITHI_temp211 = "95000"
+CRITLO_temp211 = "0"
+
+LABEL_power2 = "io_b_power"
+LABEL_power3 = "io_a_power"
+LABEL_power4 = "p1_mem_power"
+LABEL_power5 = "p1_vdd_power"
+LABEL_power6 = "p0_mem_power"
+LABEL_power7 = "p0_vdd_power"
+LABEL_power8 = "fans_power"
+LABEL_power9 = "storage_b_power"
+LABEL_power10 = "storage_a_power"
+LABEL_power11 = "gpu0_power"
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/devices/platform/gpio-fsi/fsi0/slave@00--00/00--00--00--0a/fsi1/slave@01--00/01--01--00--06/sbefifo2-dev0/occ-hwmon.2.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/devices/platform/gpio-fsi/fsi0/slave@00--00/00--00--00--0a/fsi1/slave@01--00/01--01--00--06/sbefifo2-dev0/occ-hwmon.2.conf
new file mode 100644
index 0000000..ba53cd9
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/devices/platform/gpio-fsi/fsi0/slave@00--00/00--00--00--0a/fsi1/slave@01--00/01--01--00--06/sbefifo2-dev0/occ-hwmon.2.conf
@@ -0,0 +1,280 @@
+MODE_temp1 = "label"
+MODE_temp2 = "label"
+MODE_temp3 = "label"
+MODE_temp4 = "label"
+MODE_temp5 = "label"
+MODE_temp6 = "label"
+MODE_temp7 = "label"
+MODE_temp8 = "label"
+MODE_temp9 = "label"
+MODE_temp10 = "label"
+MODE_temp11 = "label"
+MODE_temp12 = "label"
+MODE_temp13 = "label"
+MODE_temp14 = "label"
+MODE_temp15 = "label"
+MODE_temp16 = "label"
+MODE_temp17 = "label"
+MODE_temp18 = "label"
+MODE_temp19 = "label"
+MODE_temp20 = "label"
+MODE_temp21 = "label"
+MODE_temp22 = "label"
+MODE_temp23 = "label"
+MODE_temp24 = "label"
+MODE_temp25 = "label"
+MODE_temp26 = "label"
+MODE_temp27 = "label"
+MODE_temp28 = "label"
+MODE_temp29 = "label"
+MODE_temp30 = "label"
+MODE_temp31 = "label"
+MODE_temp32 = "label"
+MODE_temp33 = "label"
+MODE_temp34 = "label"
+MODE_temp35 = "label"
+MODE_temp36 = "label"
+MODE_temp37 = "label"
+MODE_temp38 = "label"
+MODE_temp39 = "label"
+MODE_temp40 = "label"
+LABEL_temp91 = "p1_core0_temp"
+WARNHI_temp91 = "85000"
+WARNLO_temp91 = "0"
+CRITHI_temp91 = "90000"
+CRITLO_temp91 = "0"
+
+LABEL_temp94 = "p1_core1_temp"
+WARNHI_temp94 = "85000"
+WARNLO_temp94 = "0"
+CRITHI_temp94 = "90000"
+CRITLO_temp94 = "0"
+
+LABEL_temp97 = "p1_core2_temp"
+WARNHI_temp97 = "85000"
+WARNLO_temp97 = "0"
+CRITHI_temp97 = "90000"
+CRITLO_temp97 = "0"
+
+LABEL_temp100 = "p1_core3_temp"
+WARNHI_temp100 = "85000"
+WARNLO_temp100 = "0"
+CRITHI_temp100 = "90000"
+CRITLO_temp100 = "0"
+
+LABEL_temp103 = "p1_core4_temp"
+WARNHI_temp103 = "85000"
+WARNLO_temp103 = "0"
+CRITHI_temp103 = "90000"
+CRITLO_temp103 = "0"
+
+LABEL_temp106 = "p1_core5_temp"
+WARNHI_temp106 = "85000"
+WARNLO_temp106 = "0"
+CRITHI_temp106 = "90000"
+CRITLO_temp106 = "0"
+
+LABEL_temp109 = "p1_core6_temp"
+WARNHI_temp109 = "85000"
+WARNLO_temp109 = "0"
+CRITHI_temp109 = "90000"
+CRITLO_temp109 = "0"
+
+LABEL_temp112 = "p1_core7_temp"
+WARNHI_temp112 = "85000"
+WARNLO_temp112 = "0"
+CRITHI_temp112 = "90000"
+CRITLO_temp112 = "0"
+
+LABEL_temp115 = "p1_core8_temp"
+WARNHI_temp115 = "85000"
+WARNLO_temp115 = "0"
+CRITHI_temp115 = "90000"
+CRITLO_temp115 = "0"
+
+LABEL_temp118 = "p1_core9_temp"
+WARNHI_temp118 = "85000"
+WARNLO_temp118 = "0"
+CRITHI_temp118 = "90000"
+CRITLO_temp118 = "0"
+
+LABEL_temp121 = "p1_core10_temp"
+WARNHI_temp121 = "85000"
+WARNLO_temp121 = "0"
+CRITHI_temp121 = "90000"
+CRITLO_temp121 = "0"
+
+LABEL_temp124 = "p1_core11_temp"
+WARNHI_temp124 = "85000"
+WARNLO_temp124 = "0"
+CRITHI_temp124 = "90000"
+CRITLO_temp124 = "0"
+
+LABEL_temp127 = "p1_core12_temp"
+WARNHI_temp127 = "85000"
+WARNLO_temp127 = "0"
+CRITHI_temp127 = "90000"
+CRITLO_temp127 = "0"
+
+LABEL_temp130 = "p1_core13_temp"
+WARNHI_temp130 = "85000"
+WARNLO_temp130 = "0"
+CRITHI_temp130 = "90000"
+CRITLO_temp130 = "0"
+
+LABEL_temp133 = "p1_core14_temp"
+WARNHI_temp133 = "85000"
+WARNLO_temp133 = "0"
+CRITHI_temp133 = "90000"
+CRITLO_temp133 = "0"
+
+LABEL_temp136 = "p1_core15_temp"
+WARNHI_temp136 = "85000"
+WARNLO_temp136 = "0"
+CRITHI_temp136 = "90000"
+CRITLO_temp136 = "0"
+
+LABEL_temp139 = "p1_core16_temp"
+WARNHI_temp139 = "85000"
+WARNLO_temp139 = "0"
+CRITHI_temp139 = "90000"
+CRITLO_temp139 = "0"
+
+LABEL_temp142 = "p1_core17_temp"
+WARNHI_temp142 = "85000"
+WARNLO_temp142 = "0"
+CRITHI_temp142 = "90000"
+CRITLO_temp142 = "0"
+
+LABEL_temp145 = "p1_core18_temp"
+WARNHI_temp145 = "85000"
+WARNLO_temp145 = "0"
+CRITHI_temp145 = "90000"
+CRITLO_temp145 = "0"
+
+LABEL_temp148 = "p1_core19_temp"
+WARNHI_temp148 = "85000"
+WARNLO_temp148 = "0"
+CRITHI_temp148 = "90000"
+CRITLO_temp148 = "0"
+
+LABEL_temp151 = "p1_core20_temp"
+WARNHI_temp151 = "85000"
+WARNLO_temp151 = "0"
+CRITHI_temp151 = "90000"
+CRITLO_temp151 = "0"
+
+LABEL_temp154 = "p1_core21_temp"
+WARNHI_temp154 = "85000"
+WARNLO_temp154 = "0"
+CRITHI_temp154 = "90000"
+CRITLO_temp154 = "0"
+
+LABEL_temp157 = "p1_core22_temp"
+WARNHI_temp157 = "85000"
+WARNLO_temp157 = "0"
+CRITHI_temp157 = "90000"
+CRITLO_temp157 = "0"
+
+LABEL_temp160 = "p1_core23_temp"
+WARNHI_temp160 = "85000"
+WARNLO_temp160 = "0"
+CRITHI_temp160 = "90000"
+CRITLO_temp160 = "0"
+
+LABEL_temp181 = "dimm8_temp"
+WARNHI_temp181 = "85000"
+WARNLO_temp181 = "0"
+CRITHI_temp181 = "95000"
+CRITLO_temp181 = "0"
+
+LABEL_temp183 = "dimm9_temp"
+WARNHI_temp183 = "85000"
+WARNLO_temp183 = "0"
+CRITHI_temp183 = "95000"
+CRITLO_temp183 = "0"
+
+LABEL_temp185 = "dimm10_temp"
+WARNHI_temp185 = "85000"
+WARNLO_temp185 = "0"
+CRITHI_temp185 = "95000"
+CRITLO_temp185 = "0"
+
+LABEL_temp187 = "dimm11_temp"
+WARNHI_temp187 = "85000"
+WARNLO_temp187 = "0"
+CRITHI_temp187 = "95000"
+CRITLO_temp187 = "0"
+
+LABEL_temp189 = "dimm12_temp"
+WARNHI_temp189 = "85000"
+WARNLO_temp189 = "0"
+CRITHI_temp189 = "95000"
+CRITLO_temp189 = "0"
+
+LABEL_temp191 = "dimm13_temp"
+WARNHI_temp191 = "85000"
+WARNLO_temp191 = "0"
+CRITHI_temp191 = "95000"
+CRITLO_temp191 = "0"
+
+LABEL_temp193 = "dimm14_temp"
+WARNHI_temp193 = "85000"
+WARNLO_temp193 = "0"
+CRITHI_temp193 = "95000"
+CRITLO_temp193 = "0"
+
+LABEL_temp195 = "dimm15_temp"
+WARNHI_temp195 = "85000"
+WARNLO_temp195 = "0"
+CRITHI_temp195 = "95000"
+CRITLO_temp195 = "0"
+
+LABEL_temp213 = "dimm24_temp"
+WARNHI_temp213 = "85000"
+WARNLO_temp213 = "0"
+CRITHI_temp213 = "95000"
+CRITLO_temp213 = "0"
+
+LABEL_temp215 = "dimm25_temp"
+WARNHI_temp215 = "85000"
+WARNLO_temp215 = "0"
+CRITHI_temp215 = "95000"
+CRITLO_temp215 = "0"
+
+LABEL_temp217 = "dimm26_temp"
+WARNHI_temp217 = "85000"
+WARNLO_temp217 = "0"
+CRITHI_temp217 = "95000"
+CRITLO_temp217 = "0"
+
+LABEL_temp219 = "dimm27_temp"
+WARNHI_temp219 = "85000"
+WARNLO_temp219 = "0"
+CRITHI_temp219 = "95000"
+CRITLO_temp219 = "0"
+
+LABEL_temp221 = "dimm28_temp"
+WARNHI_temp221 = "85000"
+WARNLO_temp221 = "0"
+CRITHI_temp221 = "95000"
+CRITLO_temp221 = "0"
+
+LABEL_temp223 = "dimm29_temp"
+WARNHI_temp223 = "85000"
+WARNLO_temp223 = "0"
+CRITHI_temp223 = "95000"
+CRITLO_temp223 = "0"
+
+LABEL_temp225 = "dimm30_temp"
+WARNHI_temp225 = "85000"
+WARNLO_temp225 = "0"
+CRITHI_temp225 = "95000"
+CRITLO_temp225 = "0"
+
+LABEL_temp227 = "dimm31_temp"
+WARNHI_temp227 = "85000"
+WARNLO_temp227 = "0"
+CRITHI_temp227 = "95000"
+CRITLO_temp227 = "0"
+
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-12v.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-12v.conf
new file mode 100644
index 0000000..81d3aa5
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-12v.conf
@@ -0,0 +1,2 @@
+LABEL_in1=12V
+GAIN_in1=7.5
\ No newline at end of file
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-3v.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-3v.conf
new file mode 100644
index 0000000..d7e4a92
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-3v.conf
@@ -0,0 +1,2 @@
+LABEL_in1=3V
+GAIN_in1=3
\ No newline at end of file
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-5v.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-5v.conf
new file mode 100644
index 0000000..b9ea49e
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-5v.conf
@@ -0,0 +1,2 @@
+LABEL_in1=5V
+GAIN_in1=3
\ No newline at end of file
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-battery.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-battery.conf
new file mode 100644
index 0000000..6f7341c
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-battery.conf
@@ -0,0 +1,9 @@
+LABEL_in1=vbat
+GAIN_in1=2.368
+
+# GPIOR3 needs to be pulled high for battery voltage reading
+GPIOCHIP_in1=0
+GPIO_in1=139
+
+# Read it every day so it does not impact battery life
+INTERVAL=86400000000
\ No newline at end of file
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vcs0.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vcs0.conf
new file mode 100644
index 0000000..4b8261f
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vcs0.conf
@@ -0,0 +1,2 @@
+LABEL_in1=vcs0
+GAIN_in1=1
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vcs1.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vcs1.conf
new file mode 100644
index 0000000..02732c6
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vcs1.conf
@@ -0,0 +1,2 @@
+LABEL_in1=vcs1
+GAIN_in1=1
\ No newline at end of file
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vdd0.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vdd0.conf
new file mode 100644
index 0000000..f919140
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vdd0.conf
@@ -0,0 +1,2 @@
+LABEL_in1=vdd0
+GAIN_in1=1
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vdd1.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vdd1.conf
new file mode 100644
index 0000000..fe18885
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vdd1.conf
@@ -0,0 +1,2 @@
+LABEL_in1=vdd1
+GAIN_in1=1
\ No newline at end of file
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vddra.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vddra.conf
new file mode 100644
index 0000000..3a11fd2
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vddra.conf
@@ -0,0 +1,2 @@
+LABEL_in1=vddra
+GAIN_in1=1
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vddrb.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vddrb.conf
new file mode 100644
index 0000000..e9811cb
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vddrb.conf
@@ -0,0 +1,2 @@
+LABEL_in1=vddrb
+GAIN_in1=1
\ No newline at end of file
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vddrc.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vddrc.conf
new file mode 100644
index 0000000..1753d93
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vddrc.conf
@@ -0,0 +1,2 @@
+LABEL_in1=vddrc
+GAIN_in1=1
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vddrd.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vddrd.conf
new file mode 100644
index 0000000..8fbfcd3
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vddrd.conf
@@ -0,0 +1,2 @@
+LABEL_in1=vddrd
+GAIN_in1=1
\ No newline at end of file
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vdn0.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vdn0.conf
new file mode 100644
index 0000000..afe6fce
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vdn0.conf
@@ -0,0 +1,2 @@
+LABEL_in1=vdn0
+GAIN_in1=1
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vdn1.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vdn1.conf
new file mode 100644
index 0000000..5141b29
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vdn1.conf
@@ -0,0 +1,2 @@
+LABEL_in1=vdn1
+GAIN_in1=1
\ No newline at end of file
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vio0.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vio0.conf
new file mode 100644
index 0000000..bf8e352
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vio0.conf
@@ -0,0 +1,2 @@
+LABEL_in1=vio0
+GAIN_in1=1
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vio1.conf b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vio1.conf
new file mode 100644
index 0000000..d819585
--- /dev/null
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon/mihawk/obmc/hwmon/iio-hwmon-vio1.conf
@@ -0,0 +1,2 @@
+LABEL_in1=vio1
+GAIN_in1=1
\ No newline at end of file
diff --git a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend
index d9d606b..420c0e0 100644
--- a/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend
+++ b/meta-witherspoon/recipes-phosphor/sensors/phosphor-hwmon_%.bbappend
@@ -34,9 +34,38 @@
                bus@1e78a000/i2c-bus@3c0/ir35221@71 \
                bus@1e78a000/i2c-bus@3c0/ir35221@72 \
                "
+CHIPS_mihawk = " \
+               bus@1e78a000/i2c-bus@100/power-supply@58 \
+               bus@1e78a000/i2c-bus@100/power-supply@5b \
+               bus@1e78a000/i2c-bus@140/ir35221@70 \
+               bus@1e78a000/i2c-bus@140/ir35221@72 \
+               bus@1e78a000/i2c-bus@180/ir35221@70 \
+               bus@1e78a000/i2c-bus@180/ir35221@72 \
+               bus@1e78a000/i2c-bus@400/tmp275@48 \
+               bus@1e78a000/i2c-bus@400/tmp275@49 \
+               pwm-tacho-controller@1e786000 \
+               bus@1e78a000/i2c-bus@400/emc1403@4c \
+               bus@1e78a000/i2c-bus@440/pca9545@70/i2c@3/tmp275@48 \
+               "
 
 ITEMSFMT = "ahb/apb/{0}.conf"
 ITEMS = "${@compose_list(d, 'ITEMSFMT', 'CHIPS')}"
+ITEMS_append_mihawk += " iio-hwmon-vdd0.conf"
+ITEMS_append_mihawk += " iio-hwmon-vdd1.conf"
+ITEMS_append_mihawk += " iio-hwmon-vcs0.conf"
+ITEMS_append_mihawk += " iio-hwmon-vcs1.conf"
+ITEMS_append_mihawk += " iio-hwmon-vdn0.conf"
+ITEMS_append_mihawk += " iio-hwmon-vdn1.conf"
+ITEMS_append_mihawk += " iio-hwmon-vio0.conf"
+ITEMS_append_mihawk += " iio-hwmon-vio1.conf"
+ITEMS_append_mihawk += " iio-hwmon-vddra.conf"
+ITEMS_append_mihawk += " iio-hwmon-vddrb.conf"
+ITEMS_append_mihawk += " iio-hwmon-vddrc.conf"
+ITEMS_append_mihawk += " iio-hwmon-vddrd.conf"
+ITEMS_append_mihawk += " iio-hwmon-12v.conf"
+ITEMS_append_mihawk += " iio-hwmon-5v.conf"
+ITEMS_append_mihawk += " iio-hwmon-3v.conf"
+ITEMS_append_mihawk += " iio-hwmon-battery.conf"
 
 OCCS = " \
         00--00--00--06/sbefifo1-dev0/occ-hwmon.1 \
@@ -48,6 +77,8 @@
 ENVS = "obmc/hwmon/{0}"
 SYSTEMD_ENVIRONMENT_FILE_${PN}_append_ibm-ac-server = " ${@compose_list(d, 'ENVS', 'ITEMS')}"
 SYSTEMD_ENVIRONMENT_FILE_${PN}_append_ibm-ac-server = " ${@compose_list(d, 'ENVS', 'OCCITEMS')}"
+SYSTEMD_ENVIRONMENT_FILE_${PN}_append_mihawk = " ${@compose_list(d, 'ENVS', 'ITEMS')}"
+SYSTEMD_ENVIRONMENT_FILE_${PN}_append_mihawk = " ${@compose_list(d, 'ENVS', 'OCCITEMS')}"
 
 SYSTEMD_ENVIRONMENT_FILE_max31785-msl_append_ibm-ac-server = " obmc/hwmon-max31785/max31785.conf"
 SYSTEMD_LINK_max31785-msl_append_ibm-ac-server = " ../phosphor-max31785-msl@.service:multi-user.target.wants/phosphor-max31785-msl@${MACHINE}.service"