pseq: Add GPIO formatting for UCD90160

Add support for formatting GPIO values when a pgood error is detected by
a UCD90160.

Write the GPIO names and values to the journal and store them in the
error log additional data.

This formatting support already exists for the UCD90320.

Tested:
* Test where pgood error occurs while chassis is powering on
  * Verify correct GPIO values are captured
  * Verify GPIO names and values are written to journal
  * Verify GPIO names and values are stored in error log
* Test where pgood error occurs after chassis is powered on
  * Verify correct GPIO values are captured
  * Verify correct GPIO names and values are written to journal
  * Verify correct GPIO names and values are stored in error log
* Test where the number of GPIO values is unexpected
  * Verify all values stored in additional data with no names
  * Verify all values written to the journal with no names

Change-Id: I9a761670bd8af020deb7f85d59d409ad6b5d5b2c
Signed-off-by: Shawn McCarney <shawnmm@us.ibm.com>
3 files changed
tree: 4105b9992fba573088c04cba664c1b22cf495a05
  1. cold-redundancy/
  2. example/
  3. org/
  4. phosphor-power-sequencer/
  5. phosphor-power-supply/
  6. phosphor-regulators/
  7. power-sequencer/
  8. power-supply/
  9. services/
  10. subprojects/
  11. test/
  12. tools/
  13. .clang-format
  14. .gitignore
  15. .shellcheck
  16. argument.hpp
  17. device.hpp
  18. device_monitor.hpp
  19. elog-errors.hpp
  20. file_descriptor.hpp
  21. gpio.cpp
  22. gpio.hpp
  23. LICENSE
  24. meson.build
  25. meson_options.txt
  26. names_values.hpp
  27. OWNERS
  28. pmbus.cpp
  29. pmbus.hpp
  30. README.md
  31. types.hpp
  32. utility.cpp
  33. utility.hpp
README.md

Overview

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

  • cold-redundancy: Application that makes power supplies work in Cold Redundancy mode and rotates them at intervals.
  • phosphor-power-sequencer: Applications for configuring and monitoring power sequencer and related devices that support JSON-driven configuration.
  • phosphor-power-supply: Next generation power supply monitoring application.
  • phosphor-regulators: JSON-driven application that configures and monitors voltage regulators.
  • power-sequencer: A power sequencer monitoring application.
  • power-supply: Original power supply monitoring application.
  • tools/power-utils: Power supply utilities.

Build

To build all applications in this repository:

  meson 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/./`
    • 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",
      }