Name |
Date |
Size |
#Lines |
LOC |
||
---|---|---|---|---|---|---|
.. | - | - | ||||
include/ | H | - | - | 329 | 161 | |
service_files/ | H | - | - | 13 | 10 | |
src/ | H | - | - | 871 | 681 | |
subprojects/ | H | - | - | 79 | 55 | |
.clang-format | H A D | 01-Feb-2025 | 3.7 KiB | 137 | 135 | |
.gitignore | H A D | 18-Oct-2024 | 42 | 4 | 3 | |
LICENSE | H A D | 16-Dec-2023 | 558 | 14 | 10 | |
OWNERS | H A D | 02-Oct-2024 | 1.7 KiB | 49 | 44 | |
README.md | H A D | 18-Dec-2024 | 6.2 KiB | 182 | 141 | |
meson.build | H A D | 18-Oct-2024 | 2.4 KiB | 93 | 84 |
README.md
1# Remote BIOS Configuration 2 3[](LICENSE) 4 5## Overview 6 7The **biosconfig_manager** service enables users to view and modify the BIOS 8setup configuration parameters remotely through the Baseboard Management 9Controller (BMC) at any host state. Changes to these parameters will take effect 10upon the next system reboot or immediately, depending on the host firmware. 11 12For more details, please refer to [design document][rbmc-design-document]. 13 14## Features 15 16- **Remote management** of BIOS settings. 17- **Immediate updates** or scheduled changes upon reboot. 18- **Reset BIOS Settings** support through the dbus. 19- **ChangePassword** support to change the BIOS setup password. 20 21## RBC Manager Interface 22 23The Manager interface exposes methods and properties to Get & Set BIOS 24attributes via dbus and its documented [here][pdi-manager-bios] 25 26### Object Path 27 28```txt 29/xyz/openbmc_project/BIOSConfig/Manager 30``` 31 32### Methods 33 34- **SetAttribute** Sets a specific BIOS attribute to a new value. 35- **GetAttribute** Retrieves the current and pending values of a BIOS attribute. 36 37### Properties 38 39- **ResetBIOSSettings** To reset the BIOS settings based on the Reset Flag. 40- **BaseBIOSTable** Captures the entire BIOS table (collective information of 41 all the BIOS attributes and their properties) 42 43## Signature of `BaseBIOSTable` 44 45The `BaseBIOSTable` property in the RBC Manager Interface is a complex 46dictionary that defines the structure of BIOS attributes. Its type signature is 47as follows: 48 49```plaintext 50dict[string, struct[ 51 enum[self.AttributeType], 52 boolean, 53 string, 54 string, 55 string, 56 variant[int64, string], 57 variant[int64, string], 58 array[struct[enum[self.BoundType], variant[int64, string], string]] 59]] 60``` 61 62This structure consists of: 63 64- **Attribute Name (string)**: The name of the BIOS attribute. 65- **Attribute Type (enum)**: The type of the BIOS attribute (e.g., String, 66 Integer). 67- **Read-only Status (boolean)**: Whether the attribute is read-only. 68- **Display Name (string)**: The human-readable name of the attribute. 69- **Description (string)**: A description of what the attribute does. 70- **Menu Path (string)**: The BIOS menu path where this attribute can be found. 71- **Current Value (variant[int64, string])**: The current value of the 72 attribute. 73- **Default Value (variant[int64, string])**: The default value of the 74 attribute. 75- **Options (array of structs)**: The available options or bounds for this 76 attribute. 77 78### Examples 79 80Here is an example json structure of a `String` attribute with `attributeName` 81`DrdFreqLimit` & its various properties in BaseBIOSTable signature. 82 83```json 84{ 85 "DdrFreqLimit": { 86 "attributeType": "xyz.openbmc_project.BIOSConfig.Manager.AttributeType.String", 87 "readonlyStatus": false, 88 "displayname": "Memory Operating Speed Selection", 89 "description": "Force specific Memory Operating Speed or use Auto setting.", 90 "menuPath": "Advanced/Memory Configuration/Memory Operating Speed Selection", 91 "current": "0x00", 92 "default": "0x0B", 93 "options": [ 94 { "optionstring": "auto", "optionvalue": "enum0" }, 95 { "optionstring": "2133", "optionvalue": "enum1" }, 96 { "optionstring": "2400", "optionvalue": "enum2" }, 97 { "optionstring": "2664", "optionvalue": "enum3" }, 98 { "optionstring": "2933", "optionvalue": "enum4" } 99 ] 100 } 101} 102``` 103 104Here is another example json structure of a `Integer` attribute with attribute 105with name `BIOSSerialDebugLevel` & its various properties in BaseBIOSTable 106signature. 107 108```json 109{ 110 "BIOSSerialDebugLevel": { 111 "attributeType": "xyz.openbmc_project.BIOSConfig.Manager.AttributeType.Integer", 112 "readonlyStatus": false, 113 "displayname": "BIOS Serial Debug level", 114 "description": "BIOS Serial Debug level during system boot.", 115 "menuPath": "Advanced/Debug Feature Selection", 116 "current": "0x00", 117 "default": "0x01", 118 "options": [ 119 { "optionstring": "MinBound", "optionvalue": 0 }, 120 { "optionstring": "MaxBound", "optionvalue": 4 }, 121 { "optionstring": "ScalarIncrement", "optionvalue": 1 } 122 ] 123 } 124} 125``` 126 127## Initialization of `BaseBIOSTable` 128 129When the `bios-settings-mgr` daemon starts, it initializes with an empty 130`BaseBIOSTable`. It is the responsibility of provider daemons, such as **PLDM** 131or **IPMI**, to populate this table by fetching or defining the BIOS settings. 132These provider daemons are expected to gather the necessary BIOS attributes and 133values from their respective sources (ex: bmc, system firmware) and then 134initialize the `BaseBIOSTable` property with those settings. 135 136### BIOS with PLDM as Communication Protocol 137 138For systems that use the **PLDM (Platform Level Data Model)** protocol between 139BMC & Host, OEM vendors can define their own BIOS attributes in the form of 140[JSON files][pldm-bios-json]. The PLDM daemon parses these files and initializes 141the `BaseBIOSTable` property accordingly. This allows for flexible and custom 142BIOS configuration options based on the vendor's specifications. 143 144For more details , refer to the [BIOS Support in PLDM][pldm-bios]. 145 146### BIOS with IPMI as Communication Protocol 147 148For systems that use the **Intelligent Platform Management Interface** protocol 149between BMC & Host, BIOS attributes are gathered from BIOS as an `xml file` & 150`BaseBIOSTable` would then be initialized with the attributes data from the 151parsed xml file. 152 153For more details, refer to the code [BIOS Support in IPMI][ipmi-intel-bios]. 154 155## RBC Password Interface 156 157### Object Path 158 159```txt 160xyz.openbmc_project.BIOSConfig.Password 161``` 162 163### Methods 164 165- **ChangePassword** 166 Used to change the BIOS setup password. 167 168### Properties 169 170- **PasswordInitialized** Used to indicate whether the BIOS password-related 171 details have been received. 172 173[rbmc-design-document]: 174 https://github.com/openbmc/docs/blob/master/designs/remote-bios-configuration.md 175[pldm-bios-json]: 176 https://github.com/openbmc/pldm/blob/master/oem/ibm/configurations/bios/com.ibm.Hardware.Chassis.Model.Rainier2U/bios_attrs.json 177[pldm-bios]: https://github.com/openbmc/pldm?tab=readme-ov-file#bios-support 178[ipmi-intel-bios]: 179 https://github.com/openbmc/intel-ipmi-oem/blob/master/src/biosconfigcommands.cpp 180[pdi-manager-bios]: 181 https://github.com/openbmc/phosphor-dbus-interfaces/blob/master/yaml/xyz/openbmc_project/BIOSConfig/Manager.interface.yaml 182