commit | ec61bbd7e8e689c8df9af4dd89c988d335a379a8 | [log] [tgz] |
---|---|---|
author | Faisal Awada <faisal@us.ibm.com> | Mon Nov 04 08:46:20 2024 -0600 |
committer | Faisal Awada <faisal@us.ibm.com> | Fri Nov 08 20:26:33 2024 -0600 |
tree | f7075cd349275e4e343077f9554e552e43649043 | |
parent | 37c2612b4497f4065a810187e3f99cfaccca368c [diff] |
Utility functions for download firmware Added set of utility functions to be used within the classes for managing the PSU firmware updates. Here is a breakdown of the key functions: - getDevicePath(): Construct the PSU device path using I2C bus and address. - getClassInstance(): Determines the appropriate updater class to use based on PSU model number. - getFWFilenamePath(): Searches a directory for a firmware file matching a specified prefix and file extension (.bin or .hex). - calculateCRC8(): Computes the CRC-8 checksum for transferred data. - delay(): Pauses execution for a specified number of milliseconds. - bigEndianToLittleEndian(): Converts a 32-bit value from big-endian to little-endian. - validateFWFile(): Checks if a firmware file exists and is non-empty. - openFirmwareFile(): Opens a firmware file in binary mode, returning a file stream if successful. - readFirmwareBytes(): Reads specified number of data bytes from a firmware file into a buffer. Return data read or null to the caller. - usePsuJsonFile(): Wrapper to check the existence of the PSU JSON file. - Class accessors to private data: getPsuInventoryPath(): Accessor for PSU inventory path. getDevPath(): Accessor for device path. getDevName(): Accessor for device name. getImageDir(): Accessor for image directory. getI2C(): I2C interface accessor. Tested every function manually: - getDevicePath() (using busctl): - Validate I2C bus and address values through psuInventoryPath validate expected result - Modified psuInventoryPath to invalid path validate returned invalid path. - getClassInstance(): - Validate with matching model number the function instantiate appropriate class. - Validate the default class instantiated. - getFWFilenamePath(): - Validate return of the correct file name in the PSU FW directory - Validate null returns when FW files don't exist - calculaterCRC8(): - Validate single byte 0x0 result 0x0, single byte 0x01 result 0x07 - delay(): - Verified the task suspend execution. - bigEndianToLittleEndian(): - Verified input 0x12345678 resulted in 0x78563412 - validateFWFile(): - Validate the existence of the file otherwise an error is logged - Validate the file size is greater than 0 otherwise an error is logged. - openFirmwareFile(): - Validate ifstream object is returned and was able to read from. - Validate error logged if the file name is null - validate error logged when unable to open the file - readFirmwareBytes(): - Validate data read from FW file - Validate number of bytes read. - usePsuJsonFile(): - Added JSON file to simulator and validated true return. Change-Id: I0b8b24ae7d37724dab608d2c4977c1b42d4e1632 Signed-off-by: Faisal Awada <faisal@us.ibm.com>
This repository contains applications for configuring and monitoring devices that deliver power to the system.
Actively-maintained applications:
Legacy applications:
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:
Several applications in this repository require a PSU JSON config to run. The JSON config file provides information for:
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:
/sys/bus/i2c/devices/3-0069/
/sys/bus/i2c/devices/3-0069/hwmon/hwmonX/
/sys/kernel/debug/pmbus/hwmonX/
/sys/kernel/debug/<driver>.<instance>/
/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", }