xref: /aosp_15_r20/external/coreboot/Documentation/drivers/ipmi_kcs.md (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
1# IPMI KCS driver
2
3The driver can be found in `src/drivers/ipmi/`. It works with BMC that provide
4a KCS I/O interface as specified in the [IPMI] standard.
5
6The driver detects the IPMI version, reserves the I/O space in coreboot's
7resource allocator and writes the required ACPI and SMBIOS tables.
8
9## For developers
10
11To use the driver, select the `IPMI_KCS` Kconfig and add the following PNP
12device under the LPC bridge device (in example for the KCS at 0xca2):
13
14```
15 chip drivers/ipmi
16   device pnp ca2.0 on end         # IPMI KCS
17 end
18```
19
20**Note:** The I/O base address needs to be aligned to 2.
21
22The following registers can be set:
23
24* `have_nv_storage`
25  * Boolean
26  * If true `nv_storage_device_address` will be added to SMBIOS type 38.
27* `nv_storage_device_address`
28  * Integer
29  * The NV storage address as defined in SMBIOS spec for type 38.
30* `bmc_i2c_address`
31  * Integer
32  * The i2c address of the BMC. zero if not applicable.
33* `have_apic`
34  * Boolean
35  * If true the `apic_interrupt` will be added to SPMI table.
36* `apic_interrupt`
37  * Integer
38  * The APIC interrupt used to notify about a change on the KCS.
39* `have_gpe`
40  * Boolean
41  * If true the `gpe_interrupt` will be added to SPMI table.
42* `gpe_interrupt`
43  * Integer
44  * The bit in GPE (SCI) used to notify about a change on the KCS.
45* `wait_for_bmc`
46  * Boolean
47  * Wait for BMC to boot. This can be used if the BMC takes a long time to boot
48    after PoR:
49     - AST2400 on Supermicro X11SSH: 34 s
50* `bmc_boot_timeout`
51  * Integer
52  * The timeout in seconds to wait for the IPMI service to be loaded.
53    Will be used if wait_for_bmc is true.
54
55
56[IPMI]: https://www.intel.com/content/dam/www/public/us/en/documents/product-briefs/ipmi-second-gen-interface-spec-v2-rev1-1.pdf
57