# IPMI KCS driver

The driver can be found in `src/drivers/ipmi/`. It works with BMC that provide a KCS I/O interface as specified in the IPMI standard.

The driver detects the IPMI version, reserves the I/O space in coreboot’s resource allocator and writes the required ACPI and SMBIOS tables.

## For developers

To use the driver, select the `IPMI_KCS` Kconfig and add the following PNP device under the LPC bridge device (in example for the KCS at 0xca2):

     chip drivers/ipmi
       device pnp ca2.0 on end         # IPMI KCS
     end

Note: The I/O base address needs to be aligned to 2.

The following registers can be set:

- `have_nv_storage`

  - Boolean

  - If true `nv_storage_device_address` will be added to SMBIOS type 38.

- `nv_storage_device_address`

  - Integer

  - The NV storage address as defined in SMBIOS spec for type 38.

- `bmc_i2c_address`

  - Integer

  - The i2c address of the BMC. zero if not applicable.

- `have_apic`

  - Boolean

  - If true the `apic_interrupt` will be added to SPMI table.

- `apic_interrupt`

  - Integer

  - The APIC interrupt used to notify about a change on the KCS.

- `have_gpe`

  - Boolean

  - If true the `gpe_interrupt` will be added to SPMI table.

- `gpe_interrupt`

  - Integer

  - The bit in GPE (SCI) used to notify about a change on the KCS.

- `wait_for_bmc`

  - Boolean

  - Wait for BMC to boot. This can be used if the BMC takes a long time to boot after PoR:

    - AST2400 on Supermicro X11SSH: 34 s

- `bmc_boot_timeout`

  - Integer

  - The timeout in seconds to wait for the IPMI service to be loaded. Will be used if wait_for_bmc is true.