Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | .. SPDX-License-Identifier: GPL-2.0+ SMBIOS support in U-Boot ======================== U-Boot supports generating and using SMBIOS (System Management BIOS) tables, which provide standardized hardware and firmware information to the operating system and applications. Overview -------- SMBIOS is a standard developed by the Desktop Management Task Force (DMTF) that defines a way for firmware to present hardware information to software running on the system. The information is organized into typed data structures called SMBIOS tables or structures. SMBIOS Generation in U-Boot --------------------------- U-Boot can automatically generate SMBIOS tables based on configuration and hardware detection. The tables are created during the boot process and made available to the operating system. See also the developer documentation: :doc:`/develop/smbios`. Configuration ~~~~~~~~~~~~~ SMBIOS support is enabled through several Kconfig options: * ``CONFIG_SMBIOS`` - Enable SMBIOS table generation * ``CONFIG_SMBIOS_PARSER`` - Enable SMBIOS table parsing support * ``CONFIG_CMD_SMBIOS`` - Enable the :doc:`/usage/cmd/smbios` Providing Values ~~~~~~~~~~~~~~~~ SMBIOS field values can be provided through two mechanisms, in order of precedence: 1. **Sysinfo Driver**: A sysinfo driver (``UCLASS_SYSINFO``) can provide dynamic values at runtime through predefined sysinfo IDs. 2. **Device Tree Properties**: Static values can be defined in device tree nodes corresponding to each SMBIOS table type. Device Tree Configuration ^^^^^^^^^^^^^^^^^^^^^^^^^ SMBIOS values can be specified in device tree nodes, but only when a sysinfo driver is present. The 'smbios' node must be a subnode of the sysinfo device in the device tree. The following smbios subnodes and properties are supported: **BIOS Information** (``smbios/bios``): * ``version`` - BIOS version string **System Information** (``smbios/system``): * ``manufacturer`` - System manufacturer * ``product`` - Product name * ``version`` - System version * ``serial`` - Serial number * ``sku`` - SKU number * ``family`` - Product family * ``wakeup-type`` - System wakeup type (numeric) **Baseboard Information** (``smbios/baseboard``): * ``manufacturer`` - Baseboard manufacturer * ``product`` - Baseboard product name * ``version`` - Baseboard version * ``serial`` - Baseboard serial number * ``asset-tag`` - Asset tag number * ``feature-flags`` - Feature flags (numeric) * ``chassis-location`` - Location in chassis **Chassis Information** (``smbios/chassis``): * ``manufacturer`` - Chassis manufacturer * ``version`` - Chassis version * ``serial`` - Chassis serial number * ``asset-tag`` - Chassis asset tag * ``sku`` - Chassis SKU number **Processor Information** (``smbios/processor``): * ``manufacturer`` - CPU manufacturer * ``version`` - Processor version/model * ``socket-design`` - Socket designation **Cache Information** (``smbios/cache``): * ``socket-design`` - Socket designation Example device tree configuration:: sysinfo { compatible = "sandbox,sysinfo-sandbox"; smbios { system { manufacturer = "Example Corp"; product = "Example Board"; version = "1.0"; serial = "123456789"; sku = "EXAMPLE-SKU-001"; family = "Example Family"; }; baseboard { manufacturer = "Example Corp"; product = "Example Baseboard"; version = "Rev A"; serial = "BB123456789"; }; }; }; The device tree values serve as defaults and will be overridden by any values provided by a sysinfo driver. SMBIOS Table Types ------------------ U-Boot generates several standard SMBIOS table types: Type 0: BIOS Information Contains BIOS vendor, version, release date, and characteristics Type 1: System Information Contains system manufacturer, product name, version, serial number, UUID, SKU number, and family Type 2: Baseboard Information Contains motherboard/baseboard manufacturer, product name, version, and serial number Type 3: System Enclosure Contains chassis information including type, manufacturer, version, and serial number Type 4: Processor Information Contains CPU information including family, manufacturer, version, and characteristics Type 16: Physical Memory Array Describes the physical memory configuration Type 17: Memory Device Describes individual memory modules Type 19: Memory Array Mapped Address Maps physical memory arrays to system addresses Type 32: System Boot Information Contains boot status information Using SMBIOS Tables ------------------- Generated SMBIOS tables are typically placed in memory where the operating system can find them. The location varies by architecture: * **x86**: Tables placed in conventional memory below 1MB * **ARM/AArch64**: Tables passed via device tree or ACPI The smbios command ------------------ U-Boot provides the ``smbios`` command to display SMBIOS information. Example:: smbios # Show all tables References ---------- * `DMTF SMBIOS Specification <https://www.dmtf.org/standards/smbios>`_ * `Microsoft System and Enclosure Chassis Types <https://docs.microsoft.com/en-us/windows-hardware/drivers/bringup/smbios>`_ * `Computer Hardware ID (CHID) Specification <https://docs.microsoft.com/en-us/windows-hardware/drivers/install/specifying-hardware-ids-for-a-computer>`_ |