# Machine power supply policy for PDM. # # Create an error if a power supply is removed while the system is powered on - name: power supply0 class: group group: path members: - meta: POWER SUPPLY path: /xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply0 - name: power supply1 class: group group: path members: - meta: POWER SUPPLY path: /xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply1 - name: power supplies description: > 'The machine has two power supplies to monitor.' class: group group: path members: - meta: POWER SUPPLY path: /xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply0 - meta: POWER SUPPLY path: /xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply1 - name: chassis state description: > 'The machine has a single chassis to monitor.' class: group group: path members: - meta: CHASSISSTATE path: /xyz/openbmc_project/state/chassis0 - name: power supply present description: > 'Monitor the presence state of each power supply.' class: group group: property type: boolean members: - interface: xyz.openbmc_project.Inventory.Item meta: PRESENT property: Present - 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: watch power supply present description: > 'Trigger logic on power supply presence state changes.' class: watch watch: property paths: power supplies properties: power supply present callback: check power - 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: check power description: > 'If the chassis has power, check for power supplies.' class: condition condition: count paths: chassis state properties: chassis powered callback: check power supplies countop: '>' countbound: 0 op: '==' bound: xyz.openbmc_project.State.Chassis.PowerState.On - name: check power supplies description: > 'Create an error if a power supply is not present.' class: callback callback: group members: - check power supply0 presence - check power supply1 presence - name: check power supply0 presence description: > 'If this condition passes power supply0 has been unplugged for more than 5 seconds. Count present power supplies rather than non-present power supplies since the latter would pass if the power supply 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 power supply inventory object implementation.' class: condition condition: count paths: power supply0 properties: power supply present defer: 5000000us callback: notpresent power supply0 error countop: '<' countbound: 1 op: '==' bound: true - name: check power supply1 presence description: > 'If this condition passes power supply1 has been unplugged for more than 5 seconds.' class: condition condition: count paths: power supply1 properties: power supply present defer: 5000000us callback: notpresent power supply1 error countop: '<' countbound: 1 op: '==' bound: true - name: notpresent power supply0 error class: callback callback: elog paths: power supply0 properties: power supply 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/powersupply0 type: string - name: notpresent power supply1 error class: callback callback: elog paths: power supply1 properties: power supply 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/powersupply1 type: string - name: resolve power supply0 errors if present description: > 'If power supply0 is present, call the resolve ps0 errors callback.' class: condition condition: count paths: power supply0 properties: power supply present callback: resolve power supply0 errors countop: '>' countbound: 0 op: '==' bound: true - name: resolve power supply1 errors if present description: > 'If power supply1 is present, call the resolve ps1 errors callback.' class: condition condition: count paths: power supply1 properties: power supply present callback: resolve power supply1 errors countop: '>' countbound: 0 op: '==' bound: true - name: resolve power supply0 errors class: callback callback: resolve callout paths: power supply0 properties: power supply present callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply0 - name: resolve power supply1 errors class: callback callback: resolve callout paths: power supply1 properties: power supply present callout: /xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply1 - name: watch power supply0 present for resolving error logs description: > 'On supply present state changes, check if errors need to be resolved.' class: watch watch: property paths: power supply0 properties: power supply present callback: resolve power supply0 errors if present - name: watch power supply1 present for resolving error logs description: > 'On supply present state changes, check if errors need to be resolved.' class: watch watch: property paths: power supply1 properties: power supply present callback: resolve power supply1 errors if present