commit | 4e29f80bf85c3a8197bb6c3183f25face059f29c | [log] [tgz] |
---|---|---|
author | Archana Kakani <archana.kakani@ibm.com> | Tue Aug 20 08:11:18 2024 -0500 |
committer | Kuiying Wang <wangkuiying.wky@alibaba-inc.com> | Thu Nov 14 06:46:57 2024 +0000 |
tree | 55cc77d9c87a50b633ee11fb8ee3a06b6aad2587 | |
parent | 6741adba6ffe06573e74647ac719f2a5f0798ab0 [diff] |
Add version to BaseBiosTable to prevent data loss The initial version of the Base BIOS table did not support Value Display Names (VDN). Support for VDN was introduced in a commit [1]. A BMC image created without VDN support stores data in the old BaseBiosTable format. If a new BMC image (with VDN support) is flashed over an older image (without VDN support), the BIOS manager attempts to read the binary archive generated by the older BIOS settings manager. Since it doesn't recognize the newly added property, it assumes the persisted file is corrupted and ignores all the saved settings. To prevent the loss of persisted BIOS data, the versioning support provided by the Cereal library is used. This version information is utilized to convert the persisted data into the current supported format. [1]: https://github.com/openbmc/bios-settings-mgr/commit/1a448ad88fdaec7e082b4a1c437f7f3c990402cd Change-Id: If68be37e32ae31d7338d8933df945453a30c113a Signed-off-by: Archana Kakani <archana.kakani@ibm.com>
The biosconfig_manager service enables users to view and modify the BIOS setup configuration parameters remotely through the Baseboard Management Controller (BMC) at any host state. Changes to these parameters will take effect upon the next system reboot or immediately, depending on the host firmware.
For more details, please refer to design document.
The Manager interface exposes methods and properties to Get & Set BIOS attributes via dbus and its documented here
/xyz/openbmc_project/BIOSConfig/Manager
BaseBIOSTable
The BaseBIOSTable
property in the RBC Manager Interface is a complex dictionary that defines the structure of BIOS attributes. Its type signature is as follows:
dict[string, struct[ enum[self.AttributeType], boolean, string, string, string, variant[int64, string], variant[int64, string], array[struct[enum[self.BoundType], variant[int64, string], string]] ]]
This structure consists of:
Here is an example json structure of a String
attribute with attributeName
DrdFreqLimit
& its various properties in BaseBIOSTable signature.
{ "DdrFreqLimit": { "attributeType": "xyz.openbmc_project.BIOSConfig.Manager.AttributeType.String", "readonlyStatus": false, "displayname": "Memory Operating Speed Selection", "description": "Force specific Memory Operating Speed or use Auto setting.", "menuPath": "Advanced/Memory Configuration/Memory Operating Speed Selection", "current": "0x00", "default": "0x0B", "options": [ { "optionstring": "auto", "optionvalue": "enum0" }, { "optionstring": "2133", "optionvalue": "enum1" }, { "optionstring": "2400", "optionvalue": "enum2" }, { "optionstring": "2664", "optionvalue": "enum3" }, { "optionstring": "2933", "optionvalue": "enum4" } ] } }
Here is another example json structure of a Integer
attribute with attribute with name BIOSSerialDebugLevel
& its various properties in BaseBIOSTable signature.
{ "BIOSSerialDebugLevel": { "attributeType": "xyz.openbmc_project.BIOSConfig.Manager.AttributeType.Integer", "readonlyStatus": false, "displayname": "BIOS Serial Debug level", "description": "BIOS Serial Debug level during system boot.", "menuPath": "Advanced/Debug Feature Selection", "current": "0x00", "default": "0x01", "options": [ { "optionstring": "MinBound", "optionvalue": 0 }, { "optionstring": "MaxBound", "optionvalue": 4 }, { "optionstring": "ScalarIncrement", "optionvalue": 1 } ] } }
BaseBIOSTable
When the bios-settings-mgr
daemon starts, it initializes with an empty BaseBIOSTable
. It is the responsibility of provider daemons, such as PLDM or IPMI, to populate this table by fetching or defining the BIOS settings. These provider daemons are expected to gather the necessary BIOS attributes and values from their respective sources (ex: bmc, system firmware) and then initialize the BaseBIOSTable
property with those settings.
For systems that use the PLDM (Platform Level Data Model) protocol between BMC & Host, OEM vendors can define their own BIOS attributes in the form of JSON files. The PLDM daemon parses these files and initializes the BaseBIOSTable
property accordingly. This allows for flexible and custom BIOS configuration options based on the vendor's specifications.
For more details , refer to the BIOS Support in PLDM.
For systems that use the Intelligent Platform Management Interface protocol between BMC & Host, BIOS attributes are gathered from BIOS as an xml file
& BaseBIOSTable
would then be initialized with the attributes data from the parsed xml file.
For more details, refer to the code BIOS Support in IPMI.
xyz.openbmc_project.BIOSConfig.Password