IPMI driver on Ampere?
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 06 Sep 2023 14:16:28 UTC
My Ampere server has the usual ASPEED server management chip but the IPMI kernel module does not load. Does anybody know what is required to get it working? The ACPI part of the driver, ipmi_acpi.c, looks for an ACPI device named "IPI0001". If I run acpidump -dt I find one of those, but the kernel doesn't find it. The PCI part of the driver, ipmi_pci.c, looks for the vendor:device pair 1028:000d. I do not have that. I have 1a03:1150 (ASPEED PCI-PCI bridge) and 1a03:2000 (ASPEED VGA). Here is the relevant fragment of acpidump -dt from my Ampere eMAG: Device (I2C4) { Name (_HID, "APMC0D0F") // _HID: Hardware ID Name (_UID, 0x04) // _UID: Unique ID Name (_STR, Unicode ("eMAG I2C Device")) // _STR: Description String Method (_STA, 0, NotSerialized) // _STA: Status { Return (0x0F) } Name (_CCA, One) // _CCA: Cache Coherency Attribute Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings { Memory32Fixed (ReadWrite, 0x126B0000, // Address Base 0x00001000, // Address Length ) Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, ,, ) { 0x00000069, } }) Device (IPI) { Name (_HID, "APMC0D8A") // _HID: Hardware ID Name (_CID, "IPI0001") // _CID: Compatible ID Name (_STR, Unicode ("IPMI_SSIF")) // _STR: Description String Name (_UID, Zero) // _UID: Unique ID Name (_CCA, One) // _CCA: Cache Coherency Attribute Method (_STA, 0, NotSerialized) // _STA: Status { Return (0x0F) } Method (_IFT, 0, NotSerialized) // _IFT: IPMI Interface Type { Return (0x04) } Method (_ADR, 0, NotSerialized) // _ADR: Address { Return (0x10) } Method (_SRV, 0, NotSerialized) // _SRV: IPMI Spec Revision { Return (0x0200) } Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings { I2cSerialBusV2 (0x0010, ControllerInitiated, 0x00061A80, AddressingMode7Bit, "\\_SB.I2C4", 0x00, ResourceConsumer, , Exclusive, ) }) } [...] } Here is the fragment from an HPE amd64 server where the driver works: Device (LPC0) { Name (_ADR, 0x00140003) // _ADR: Address OperationRegion (PMIO, SystemIO, 0x0CD6, 0x02) [...] Device (KCS) { Name (_HID, EisaId ("IPI0001")) // _HID: Hardware ID Name (_STR, Unicode ("IPMI_KCS")) // _STR: Description String Name (_UID, 0x00) // _UID: Unique ID Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings { IO (Decode16, 0x0CA2, // Range Minimum 0x0CA2, // Range Maximum 0x00, // Alignment 0x02, // Length ) }) Method (_IFT, 0, NotSerialized) // _IFT: IPMI Interface Type { Return (0x01) } Method (_SRV, 0, NotSerialized) // _SRV: IPMI Spec Revision { Return (0x0200) } } } The obvious difference is the HPE system uses old-fashioned I/O ports and the Ampere system uses I2C. The parent I2C bus is recognized: ig4iic0: <Designware I2C Controller> iomem 0x126b0000-0x126b0fff irq 0 on acpi0 iicbus0: <Philips I2C bus (ACPI-hinted)> on ig4iic0 iicbus0: <unknown card> at addr 0x10 iic0: <I2C generic I/O> on iicbus0