Date: Wed, 6 Sep 2023 14:16:28 +0000 From: "John F Carr" <jfc@mit.edu> To: freebsd-arm <freebsd-arm@freebsd.org> Subject: IPMI driver on Ampere? Message-ID: <3209D37E-3DF9-4EA9-A13A-97CA76B3048B@mit.edu>
next in thread | raw e-mail | index | archive | help
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 "I= PI0001". 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 10= 28: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 Sett= ings { 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 St= ring 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 Ty= pe { Return (0x04) } Method (_ADR, 0, NotSerialized) // _ADR: Address { Return (0x10) } Method (_SRV, 0, NotSerialized) // _SRV: IPMI Spec Revisio= n { 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 Resou= rce Settings { IO (Decode16, 0x0CA2, // Range Minimum 0x0CA2, // Range Maximum 0x00, // Alignment 0x02, // Length ) }) Method (_IFT, 0, NotSerialized) // _IFT: IPMI Interfac= e Type { Return (0x01) } Method (_SRV, 0, NotSerialized) // _SRV: IPMI Spec Rev= ision { Return (0x0200) } } } The obvious difference is the HPE system uses old-fashioned I/O ports and t= he Ampere system uses I2C. The parent I2C bus is recognized: ig4iic0: <Designware I2C Controller> iomem 0x126b0000-0x126b0fff irq 0 on a= cpi0 iicbus0: <Philips I2C bus (ACPI-hinted)> on ig4iic0 iicbus0: <unknown card> at addr 0x10 iic0: <I2C generic I/O> on iicbus0
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3209D37E-3DF9-4EA9-A13A-97CA76B3048B>