Support for Asus IPMI Card
Anirudh Srinivasan
anirudhsriniv at gmail.com
Fri Jan 9 14:46:42 AEDT 2026
Hello all,
I recently got this ASUS IPMI Card [1], which is a PCIe x1 card with
an AST2600 on it. It provides VGA output for the host it's plugged
into and has a NIC for IPMI access. Since this is just an Aspeed on a
pcie card, it's probably lacking some of the additional bus
connections between the BMC and CPU that you'd find on a normal server
motherboard.
The card has few headers which can be plugged into the host to
provide more functionality
1. USB 2.0 connector to the internal motherboard header that provides
Keyboard/Mouse and virtual media
2. GPIO Pins for ATX Power Control,
3. Indicator LEDs
4. SPI for host bios flashing that talks to the motherboard via the
TPM SPI header on motherboard
5. PSU SMBUS connector
6. Proprietary ASUS BMC connector present in few motherboards
7. 4 pin FAN connectors
8. Temperature sensor connectors
I also found a UART header on the card, and I'm able to get serial
console access to the Aspeed chip.
I've been trying to write a device tree for this card and get an
OpenBMC image running on it. I have been basing this off DTs extracted
from a fw update for this card available on Asus's website [2]. This
firmware image is bootable in qemu. This seems to use kernel 5.4 and
u-boot 2019.04. The DTs extracted from this firmware are here (uboot
DT [3] linux DT [4]). These DTs have something weird in them. Even
though the card only has one NIC on it (mac2), but mac3 also seems to
be enabled in 100M mode. Is the 2nd mac related to the USB/rndis
interface the BMC provides?
Anyway, I got a build of OpenBMC up and running after a lot of trial
and error. I didn't have the hace enabled in the u-boot device tree,
so u-boot kept failing at the fitImage sha verification stage. I also
ended up wiping the u-boot data partition that stores the ethernet MAC
address for the NIC, so I had to manually add that in to u-boot (is
this how the ethernet MAC is programmed or is it read from the chip?).
I have USB Keyboard/Mouse and Video at 1024x768 working (albeit the
screen refreshes slowly sometimes) in my OpenBMC build. In my DT, I
have video_engine enabled. Do I need to enable gfx also? Is that
referring to video output from the aspeed (which we don't care about)
or the host? I have the heartbeat LED working, figuring out the rest
of the LEDs and power control should be simple I guess. I was able to
figure out some of the GPIO IDs by tracing writes to the aspeed_gpio
device in qemu.
I tried to use virtual media to mount an image but nbd_client seems to
crash with the following error message irrespective of how small of a
file I upload.
Jan 06 04:05:29 ipmi-card nbd_client[726]: Exported device is too big
for me. Get 64-bit machine :-(
Jan 06 04:05:29 ipmi-card nbd_client[726]: Exiting.
Jan 06 04:05:29 ipmi-card bmcweb[284]: [vm_websocket.hpp:155] Couldn't
read from VM port: End of file [asio.misc:2 at
/usr/include/boost/asio/detail/descriptor_read_op.hpp:122:5 in
function 'static void
boost::asio::detail::descriptor_read_op<MutableBufferSequence,
Handler, IoExecutor>::do_complete(void*,
boost::asio::detail::operation*, const boost::system::error_code&,
std::size_t)']
I wanted to know if there are any additional devices I could try
enabling in the device tree to get more functionality on the card. I
understand that some functionality won't be possible because this is
just a PCIe card and doesn't have additional connections to the host
CPU that a normal BMC would have. I see mentions of LPC, IBT, KCS in
the device tree, but am not really sure if any of these apply in this
case.
On the vendor firmware, an additional pcie device (other than the VGA
controller) appears on the host the card is plugged into
09:01.0 IPMI Interface: ASPEED Technology, Inc. Device 2402 (rev 01)
(prog-if 01 [KCS])
Subsystem: ASPEED Technology, Inc. Device 2402
Control: I/O- Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop-
ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR- INTx-
IOMMU group: 13
Region 0: Memory at fc000000 (32-bit, non-prefetchable) [size=1M]
Region 1: Memory at fc100000 (32-bit, non-prefetchable) [size=256K]
Capabilities: [40] Power Management version 3
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=375mA
PME(D0+,D1+,D2+,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [50] MSI: Enable- Count=1/32 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Kernel modules: ipmi_si
However, on 2 systems I've tried, the ipmi_smi module fails to probe
for this device.
[ 13.118009] IPMI message handler: version 39.2
[ 13.122585] ipmi device interface
[ 13.133364] ipmi_si: IPMI System Interface driver
[ 13.133407] ipmi_si 0000:09:01.0: probing via PCI
[ 13.133452] ipmi_si 0000:09:01.0: enabling device (0000 -> 0002)
[ 13.133506] ipmi_si 0000:09:01.0: Could not setup I/O space
[ 13.133508] ipmi_si 0000:09:01.0: [mem 0xfc000000-0xfc0fffff]
regsize 1 spacing 1 irq 0
[ 13.133512] ipmi_si: Adding PCI-specified kcs state machine
[ 13.133531] ipmi_si: Trying PCI-specified kcs state machine at mem
address 0xfc000000, slave address 0x0, irq 0
[ 13.133572] ipmi_si 0000:09:01.0: Interface detection failed
Some searching online [5] shows that this functionality might only
work for certain Asus motherboards with a BIOS that specifically
supports this functionality. The vendor DT has a special
bmc_dev at 1e7e0000 of type "aspeed,ast2600-bmc-device". This doesn't
seem to be supported upstream. I see it in Aspeed's kernel fork on
github [6]. I am guessing this is what provides the pcie ipmi device.
Is there a reason support for this wasn't upstreamed? Would it be
worth trying to port this driver over to my openbmc build and see what
happens (or would I need some userspace component on openbmc, making
this exercise pointless). Also, would it be possible to get it working
on any motherboard, or are those comments online about needing a
custom BIOS true?
I have linked the linux [7], u-boot [8] and openbmc [9] trees I'm
using below. It you think I should post these in some other manner,
let me know.
[1] https://www.asus.com/us/supportonly/ipmi%20expansion%20card/helpdesk_manual/
[2] https://www.asus.com/us/supportonly/ipmi%20expansion%20card/helpdesk_bios/
[3] https://gist.github.com/Genius1237/0b81fcbc8c25a8b516e63e466e8522b1
[4] https://gist.github.com/Genius1237/df935a97f650aa17882599e6cce49d2b
[5] https://forums.servethehome.com/index.php?threads/asus-ipmi-expansion-card.35440/post-454240
[6] https://github.com/AspeedTech-BMC/linux/blob/0364b2fdf854b9f3c23752d2d499747f342f42e4/drivers/soc/aspeed/aspeed-bmc-dev.c#L552
[7] https://github.com/Genius1237/linux/commit/02802090509cf0499956a812ddebdaa77e16c176
[8] https://github.com/Genius1237/u-boot/commit/1b1b7daa85f6c998e5f404296b3da43077a2758e
[9] https://github.com/openbmc/openbmc/compare/master...Genius1237:openbmc:asus-ipmi-card
--
Regards
Anirudh Srinivasan
More information about the openbmc
mailing list