Support for Asus IPMI Card

Andrew Jeffery andrew at codeconstruct.com.au
Mon Jan 12 11:25:09 AEDT 2026


Hi Anirudh,

Nice work here!

On Thu, 2026-01-08 at 21:46 -0600, Anirudh Srinivasan wrote:
> 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?

I'd be surprised. 100M mode might indicate an NC-SI configuration.

> 
> 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.
> 

So this was fixed by enabling the HACE in the devicetree?

>  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?).

It varies. Storing the MAC address in the u-boot environment isn't
uncommon.

> 
> 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?
> 

GFX is the video output from the BMC itself.

>  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.

Nice.

> 
> 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.

What motherboard are you plugging the card into? The card's user manual
suggests there are alternative firmwares for ASUS motherboards that
integrate with the card (section 2.3). If you have both (an ASUS
motherboard and appropriate host firmware) then it may be sensible to
enable some of these devices.

> 
> 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

Possibly this is a result of not enabling the devices discussed above
(along with the necessary PCIe bridge settings).

> 
> 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.

One of the important bits there is enabling
SCU_PCIE_CONF_BMC_DEV_EN_E2L, which exposes the LPC peripherals such as
KCS and UARTs over PCIe. I expect that will help with the ipmi_si
errors above.

Note that these can also be enabled on the VGA device though there's
probably a question of whether the pieces are in place on the host-side
to support that.

Andrew


More information about the openbmc mailing list