Happy Friday! 🥳
A couple of weeks back, Wenchao (creator of the Realtek Network Driver for ESX Fling) reached out to me to share an exciting development he had been working on.
Unlike traditional enterprise hardware, which typically includes an Intelligent Platform Management Interface (IPMI) for exposing various hardware statistics, consumer systems like the popular Minisforum MS-A2 lack this capability out of the box.
Wenchao has developed a pseudo-IPMI driver for AMD Zen 4 and Zen 5 platforms that surfaces the CPU thermal and I am excited to share this will be released as a new Fling!

In addition to viewing this information via the vSphere UI, users can also retrieve the raw metrics via ESXCLI:
esxcli hardware ipmi sdr list
![]()
The driver currently supports the following:
- ESX 9.1
- ESX 9.0.x
- ESX 8.0 Update 3
Downloading Driver:
Step 1 - Login to Broadcom Support Portal (BSP) using your Broadcom account (free to register)
Step 2 - Navigate to the Free Downloads (https://support.broadcom.com/group/ecx/free-downloads) section and select Flings (https://support.broadcom.com/group/ecx/productdownloads?subfamily=Flings&freeDownloads=true)
Installing Driver:
Step 1 - Upload the AMD Zen4/Zen5 IPMI Thermal Driver for ESX Fling offline bundle (zip) to your ESX host
Step 2 - Run the following command and specify the full path to the offline bundle (zip):
esxcli software component apply -d /VMware-amd-zen-ipmi_thermal_910.1.0.0005-5vmw.803.0.0.24022510.zip
Step 3 - Reboot the ESX host for the change to go into effect
Uninstalling Driver:
Step 1 - Run the following command:
esxcli software component remove -n smntemp
Step 2 - Reboot the ESX host for the change to go into effect
The AMD Zen4/Zen5 IPMI Thermal Driver for ESX Fling has been successfully tested by a number of internal folks running on various Minisforum MS-A2 (Zen4/Zen5) processors. If you have success with other platforms, feel free to leave a comment to share with the community or if you have other feedback, feel free to drop a comment below.
Support for Additional AMD Systems:
The drive currently relies on two pieces of information, the PCI ID of the AMD system management port function (typically at 0000:00:18.3) and CPU ID identifying the CPU family/model. As of right now, due to limited access to hardware, it is currently hardcoded to a few known working systems.
With that said, you can add other AMD-based systems by installing the driver and then running the following command:
lspci -v | grep -A2 '0000:00:18.3' | grep '1022' | awk '/Class/{gsub(":","",$3);print "regtype=native,bus=pci,id="$3"..............,driver=smntemp"}' | tee /etc/vmware/default.map.d/smntemp_extra.map
kill -SIGHUP $(pidof vmkdevmgr)
esxscli hardware ipmi sdr list
Here are additional Zen 4/Zen 5 systems that the driver can also support. If you have others that work for you and is not on this list, please leave a comment and once we have collected the full list, we can update the driver to include these by default.
| PCI/CPU ID | Zen | CPU Family |
|---|---|---|
| 1022:14e3 | Zen 4 | Raphael |
| 1022:14e3 | Zen 4 | Granite Ridge |
| 1022:14f3 | Zen 4 | Phoenix |
| 1022:16fb | Zen 5 | Strix Point |
| 1022:124b | Zen 5 | Krackan |
| 1022:12bb | Zen 5 | Strix Halo |
Retrieving Sensor Data:
You can also programmatically retrieve the health sensor data using the vSphere APIs.
Here is an example implementation using PowerCLI:
$cluster = "VCF-Mgmt-Cluster"
$vmhosts = Get-Cluster -Name $cluster | Get-VMhost
Write-Host
foreach($vmhost in $vmhosts | Sort-Object -Property Name) {
$healthSubSys = Get-View $vmhost.ExtensionData.ConfigManager.HealthStatusSystem
$sensorReadings = $healthSubSys.Runtime.SystemHealthInfo.NumericSensorInfo
$results = @()
foreach($sensorReading in $sensorReadings) {
$tmp = [pscustomobject] [ordered]@{
Id = $sensorReading.id
Sensor = $sensorReading.Name
Status = $sensorReading.HealthState.Key
Reading = $sensorReading.CurrentReading
Units = $sensorReading.baseUnits
Categories = $sensorReading.SensorType
LastUpdate = $sensorReading.TimeStamp
}
$results += $tmp
}
Write-Host -ForegroundColor Cyan "ESX: $($vmhost.name)"
$results | Format-Table -AutoSize
}
Here is an example implementation using VI JSON API:
VC="vc01.vcf.lab"
VC_USERNAME='administratorat[at]vsphere[dot]local'
VC_PASSWORD='VMware1!VMware1!'
VC_API_RELEASE='8.0.0.0'
VMHOST_CLUSTER_NAME="VCF-Mgmt-Cluster"
VCREST_API_SESSION_ID=$(curl -k -s -u "${VC_USERNAME}:${VC_PASSWORD}" -X POST "https://${VC}/api/session" | jq -j)
CLUSTER_MOREF=$(curl -k -s -H "vmware-api-session-id: ${VCREST_API_SESSION_ID}" -X GET "https://${VC}/api/vcenter/cluster?names=${VMHOST_CLUSTER_NAME}" | jq -r '.[0].cluster')
SESSION_MANAGER_MOID=$(curl -k -s https://$VC/sdk/vim25/${VC_API_RELEASE}/ServiceInstance/ServiceInstance/content | jq -j .sessionManager.value)
VIJSON_API_SESSION_ID=$(curl -k -s -o /dev/null -D - "https://$VC/sdk/vim25/${VC_API_RELEASE}/SessionManager/$SESSION_MANAGER_MOID/Login" -H 'Content-Type: application/json' -d "{\"userName\":\"${VC_USERNAME}\", \"password\": \"${VC_PASSWORD}\"}" | awk 'BEGIN {FS=": "}/^vmware-api-session-id/{print $2}')
curl -k -s \
-H "vmware-api-session-id: ${VCREST_API_SESSION_ID}" \
"https://${VC}/api/vcenter/host?clusters=${CLUSTER_MOREF}" \
| jq -r '.[] | "\(.name) \(.host | sub("host-"; ""))"' \
| while read -r name id; do
echo "Host: $name (ID: $id)"
curl -ks \
-H "vmware-api-session-id: ${VIJSON_API_SESSION_ID}" \
"https://$VC/sdk/vim25/${VC_API_RELEASE}/HostHealthStatusSystem/healthStatusSystem-${id}/runtime" \
| jq '.systemHealthInfo.numericSensorInfo[]
| {
id,
name,
health: .healthState.key,
currentReading,
baseUnits,
sensorType,
timeStamp
}'
done


This is great, now I can check if my heatsink is properly seated without having to install another OS before ESX. I am wondering if you could set it up to be observable via operations now with this.
Very good news, do you know if this driver works also with Zen3 ?
Thanks
Give it a try on Zen 3 and let us know!
Installed but it's not working.
I have 4 AMD Ryzen 7 7730U Barcelo-R, I see that you put a command to add AMD cpu support but I don't understand how to do it.
Thanks 🙂
Did you attempt to run the commands listed? That'll tell you if it'll work or not 🙂
Yes I tryed, not working 🙁
Can you provide the output for lspci -v
This is the output on a CW56-58 5800U
[root@localhost:~] lspci -v
0000:00:00.0 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne Root Complex
Class 0600: 1022:1630
0000:00:00.2 Generic system peripheral IOMMU: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne IOMMU
Class 0806: 1022:1631
0000:00:01.0 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir PCIe Dummy Host Bridge
Class 0600: 1022:1632
0000:00:01.2 Bridge PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne PCIe GPP Bridge
Class 0604: 1022:1634
0000:00:01.3 Bridge PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne PCIe GPP Bridge
Class 0604: 1022:1634
0000:00:02.0 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir PCIe Dummy Host Bridge
Class 0600: 1022:1632
0000:00:02.1 Bridge PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne PCIe GPP Bridge
Class 0604: 1022:1634
0000:00:02.2 Bridge PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne PCIe GPP Bridge
Class 0604: 1022:1634
0000:00:02.3 Bridge PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne PCIe GPP Bridge
Class 0604: 1022:1634
0000:00:02.4 Bridge PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir PCIe GPP Bridge
Class 0604: 1022:1633
0000:00:08.0 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Renoir PCIe Dummy Host Bridge
Class 0600: 1022:1632
0000:00:08.1 Bridge PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir Internal PCIe GPP Bridge to Bus
Class 0604: 1022:1635
0000:00:08.2 Bridge PCI bridge: Advanced Micro Devices, Inc. [AMD] Renoir Internal PCIe GPP Bridge to Bus
Class 0604: 1022:1635
0000:00:14.0 Serial bus controller SMBus: Advanced Micro Devices, Inc. [AMD] FCH SMBus Controller
Class 0c05: 1022:790b
0000:00:14.3 Bridge ISA bridge: Advanced Micro Devices, Inc. [AMD] FCH LPC Bridge
Class 0601: 1022:790e
0000:00:18.0 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Cezanne Data Fabric; Function 0
Class 0600: 1022:166a
0000:00:18.1 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Cezanne Data Fabric; Function 1
Class 0600: 1022:166b
0000:00:18.2 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Cezanne Data Fabric; Function 2
Class 0600: 1022:166c
0000:00:18.3 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Cezanne Data Fabric; Function 3
Class 0600: 1022:166d
0000:00:18.4 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Cezanne Data Fabric; Function 4
Class 0600: 1022:166e
0000:00:18.5 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Cezanne Data Fabric; Function 5
Class 0600: 1022:166f
0000:00:18.6 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Cezanne Data Fabric; Function 6
Class 0600: 1022:1670
0000:00:18.7 Bridge Host bridge: Advanced Micro Devices, Inc. [AMD] Cezanne Data Fabric; Function 7
Class 0600: 1022:1671
0000:01:00.0 Mass storage controller Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller S4LV008[Pascal]
Class 0108: 144d:a80c
0000:02:00.0 Network controller Ethernet controller: Intel Corporation Ethernet Controller I226-V
Class 0200: 8086:125c
0000:03:00.0 Network controller Ethernet controller: Intel Corporation Ethernet Controller I226-V
Class 0200: 8086:125c
0000:04:00.0 Network controller Ethernet controller: Intel Corporation Ethernet Controller I226-V
Class 0200: 8086:125c
0000:05:00.0 Network controller Ethernet controller: Intel Corporation Ethernet Controller I226-V
Class 0200: 8086:125c
0000:06:00.0 Mass storage controller Non-Volatile memory controller: Samsung Electronics Co Ltd NVMe SSD Controller 980 (DRAM-less)
Class 0108: 144d:a809
0000:07:00.0 Display controller VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Cezanne [Radeon Vega Series / Radeon Vega Mobile Series]
Class 0300: 1002:1638
0000:07:00.1 Multimedia controller Audio device: Advanced Micro Devices, Inc. [AMD/ATI] Renoir/Cezanne HDMI/DP Audio Controller
Class 0403: 1002:1637
0000:07:00.2 Encryption controller Encryption controller: Advanced Micro Devices, Inc. [AMD] Raven/Raven2/FireFlight/Renoir/Cezanne Platform Security Processor
Class 1080: 1022:15df
0000:07:00.3 Serial bus controller USB controller: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne USB 3.1
Class 0c03: 1022:1639
0000:07:00.4 Serial bus controller USB controller: Advanced Micro Devices, Inc. [AMD] Renoir/Cezanne USB 3.1
Class 0c03: 1022:1639
0000:07:00.5 Multimedia controller Multimedia controller: Advanced Micro Devices, Inc. [AMD] Audio Coprocessor
Class 0480: 1022:15e2
0000:07:00.6 Multimedia controller Audio device: Advanced Micro Devices, Inc. [AMD] Family 17h/19h/1ah HD Audio Controller
Class 0403: 1022:15e3
0000:07:00.7 Signal processing controller Signal processing controller: Advanced Micro Devices, Inc. [AMD] Sensor Fusion Hub
Class 1180: 1022:15e4
0000:08:00.0 Mass storage controller SATA controller: Advanced Micro Devices Inc AMD FCH SATA Controller [AHCI Mode]
Class 0106: 1022:7901
0000:08:00.1 Mass storage controller SATA controller: Advanced Micro Devices Inc AMD FCH SATA Controller [AHCI Mode]
Class 0106: 1022:7901
It looks like for Zen 3, a bit more work is required. Engr has just provided me with version that _should_ work but we're not able to verify.
Please send me an email (see About) and I'll provide you with that version so you can help validate
Thanks for this William. I have just did a blog post on how to install this on a GMKtec K8 Plus Mini PC running ESXi. https://runcmd.co.uk/how-to-install-the-amd-zen-ipmi-thermal-driver-on-esxi/
Great help in being able to monitor these lab. Should I be worried that most of my CPU temps are reading over 90C?
Guessing I may be going back to my BIOS settings to find out what chills the cores!