Thanks for catching this.
On the B70 I observed two distinct symptoms after a sustained workload:
- package/VRAM temperature values could remain stale while the physical
blower stayed elevated even after the device had returned to idle;
- fan1_input could independently report implausibly low or zero RPM
while the physical blower was still running fast.
This patch only addresses the temperature MMIO path. Holding XE_FW_GT
for a short settling interval before the temperature read causes the
temperature telemetry to refresh and, in my testing, the physical blower
then settles normally as well.
The REG_FAN_SPEED path remains a separate direct MMIO read and can still
show unreliable values, so the current patch should not be read as
fixing fan RPM telemetry itself.
I can reword the commit message in a v2 to make that distinction
explicit, and investigate the fan telemetry path separately.
On 2026-10-12 13:59, [email protected] wrote:
Thank you for your contribution! Sashiko AI review found 1 potential
issue(s) to consider:
- [Medium] drm/xe: fan telemetry lacks Battlemage thermal force-wake
workaround
--
commit a9faaf30cbf789280ad52add1cf188270e8ccad9
Author: Constantinos Chalkias <[email protected]>
drm/xe/hwmon: refresh Battlemage thermal telemetry under force-wake
This commit works around stale thermal telemetry on Battlemage by
acquiring the GT force-wake domain and waiting 500-1000 us before
reading temperature registers.
drm/xe/hwmon: refresh Battlemage thermal telemetry under force-wake
On Battlemage, thermal telemetry can remain stale after the GT returns
to RC6 following sustained workloads.
On an Intel Arc Pro B70, package and VRAM temperature telemetry may
stop
refreshing after a long inference workload. Fan telemetry can also
become invalid while the physical blower remains elevated.
[Severity: Medium]
The commit message states that fan telemetry can become invalid, but
the
patch only applies the force-wake and delay workaround to temperature
and
VRAM channels via xe_hwmon_temp_mmio_read().
Does xe_hwmon_fan_input_read() also need this workaround? Currently, it
continues to read REG_FAN_SPEED directly via xe_mmio_read32() without
acquiring force-wake or delaying:
drivers/gpu/drm/xe/xe_hwmon.c:xe_hwmon_fan_input_read() {
...
mutex_lock(&hwmon->hwmon_lock);
reg_val = xe_mmio_read32(mmio, xe_hwmon_get_reg(hwmon, REG_FAN_SPEED,
channel));
time_now = get_jiffies_64();
...
}
Will fan telemetry still remain susceptible to staleness on Battlemage
without the workaround?