De-duplicate common initialization code (self-test and device identification) and put it in a new ipmi_if.c unit, which is supposed to work with any underlying IPMI interface. Change-Id: Ia99da6fb63adb7bf556d3d6f7964b34831be8a2f Signed-off-by: Sergii Dmytruk <sergii.dmytruk@3mdeb.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/67056 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Krystian Hebel <krystian.hebel@3mdeb.com>
		
			
				
	
	
		
			57 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # 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.
 | |
| 
 | |
| 
 | |
| [IPMI]: https://www.intel.com/content/dam/www/public/us/en/documents/product-briefs/ipmi-second-gen-interface-spec-v2-rev1-1.pdf
 |