chassis-power: Create initial application

Create the new chassis power monitor application and a service file that
would start it. Make the new application available via a meson option.

Tested: Verified the service and application start with no errors.
```
root@p10bmc:~# systemctl status phosphor-chassis-power.service
● phosphor-chassis-power.service - Chassis Power Monitor
     Loaded: loaded
(/usr/lib/systemd/system/phosphor-chassis-power.service; enabled;
preset: enabled)
     Active: active (running) since Mon 2025-11-10 19:08:09 UTC; 4min 28s ago
 Invocation: 6f0cac0ee4e04066b68ba448aa2d7ccc
   Main PID: 549 (phosphor-chassi)
        CPU: 29ms
     CGroup: /system.slice/phosphor-chassis-power.service
             └─549 /usr/libexec/phosphor-power/phosphor-chassis-power

Nov 10 19:08:09 p10bmc systemd[1]: Started Chassis Power Monitor.

root@p10bmc:~# ps |grep chassis
  549 root     14928 S /usr/libexec/phosphor-power/phosphor-chassis-power
```

Change-Id: Ia0ab5bc6c578b8203f09feec9b6927059db0f883
Signed-off-by: Adriana Kobylak <anoo@us.ibm.com>
6 files changed
tree: bee0f5152a65d42f01ee815682593eafad698a69
  1. cold-redundancy/
  2. example/
  3. org/
  4. phosphor-chassis-power/
  5. phosphor-power-sequencer/
  6. phosphor-power-supply/
  7. phosphor-regulators/
  8. power-sequencer/
  9. power-supply/
  10. services/
  11. subprojects/
  12. test/
  13. tools/
  14. .clang-format
  15. .clang-tidy
  16. .clang-tidy-ignore
  17. .gitignore
  18. .shellcheck
  19. compatible_system_types_finder.cpp
  20. compatible_system_types_finder.hpp
  21. dbus_interfaces_finder.cpp
  22. dbus_interfaces_finder.hpp
  23. device.hpp
  24. device_monitor.hpp
  25. elog-errors.hpp
  26. file_descriptor.hpp
  27. format_utils.hpp
  28. gpio.cpp
  29. gpio.hpp
  30. LICENSE
  31. meson.build
  32. meson.options
  33. names_values.hpp
  34. OWNERS
  35. pmbus.cpp
  36. pmbus.hpp
  37. README.md
  38. temporary_file.cpp
  39. temporary_file.hpp
  40. temporary_subdirectory.cpp
  41. temporary_subdirectory.hpp
  42. types.hpp
  43. utility.cpp
  44. utility.hpp
README.md

phosphor-power

Overview

This repository contains applications for configuring and monitoring devices that deliver power to the system.

Actively-maintained applications:

  • cold-redundancy: Application that makes power supplies work in Cold Redundancy mode and rotates them at intervals.
  • phosphor-chassis-power: JSON-driven application that monitors chassis power on multi-chassis systems.
  • phosphor-power-sequencer: JSON-driven application that powers the chassis on/off and monitors the power sequencer device.
  • phosphor-power-supply: Next generation power supply monitoring application.
  • phosphor-regulators: JSON-driven application that configures and monitors voltage regulators.
  • tools/power-utils: Power supply utilities.

Legacy applications:

  • power-sequencer: Original power sequencer monitoring application.
  • power-supply: Original power supply monitoring application.

Build

To build all applications in this repository:

  meson setup build
  ninja -C build

To clean the repository and remove all build output:

  rm -rf build

You can specify meson options to customize the build process. For example, you can specify:

  • Which applications to build and install.
  • Application-specific configuration data, such as power sequencer type.
  • Whether to build tests.

Power Supply Monitor and Util JSON config

Several applications in this repository require a PSU JSON config to run. The JSON config file provides information for:

  • Where to access the pmbus attributes
  • Which attribute file in pmbus maps to which property and interface in D-Bus
  • Which kernel device directory is used on which PSU

There is an example psu.json to describe the necessary configurations.

  • inventoryPMBusAccessType defines the pmbus access type, which tells the service which sysfs type to use to read the attributes. The possible values are:

    • Base: The base dir, e.g. /sys/bus/i2c/devices/3-0069/
    • Hwmon: The hwmon dir, e.g. /sys/bus/i2c/devices/3-0069/hwmon/hwmonX/
    • Debug: The pmbus debug dir, e.g. /sys/kernel/debug/pmbus/hwmonX/
    • DeviceDebug: The device debug dir, e.g. /sys/kernel/debug/<driver>.<instance>/
    • HwmonDeviceDebug: The hwmon device debug dir, e.g. /sys/kernel/debug/pmbus/hwmonX/cffps1/
  • fruConfigs defines the mapping between the attribute file and the FRU inventory interface and property. The configuration example below indicates that the service will read part_number attribute file from a directory specified by the above pmbus access type, and assign to PartNumber property in xyz.openbmc_project.Inventory.Decorator.Asset interface.

      "fruConfigs": [
        {
          "propertyName": "PartNumber",
          "fileName": "part_number",
          "interface": "xyz.openbmc_project.Inventory.Decorator.Asset"
        }
      ]
    
  • psuDevices defines the kernel device dir for each PSU in inventory. The configuration example below indicates that powersupply0's device is located in /sys/bus/i2c/devices/3-0069.

      "psuDevices": {
        "/xyz/openbmc_project/inventory/system/chassis/motherboard/powersupply0" : "/sys/bus/i2c/devices/3-0069",
      }