All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC PATCH] drm/xe/hwmon: report a single fan for DG2 instead of two
@ 2026-05-27 11:53 Zhan Wei
  2026-05-27 12:17 ` sashiko-bot
                   ` (5 more replies)
  0 siblings, 6 replies; 14+ messages in thread
From: Zhan Wei @ 2026-05-27 11:53 UTC (permalink / raw)
  To: Matthew Brost, Thomas Hellström, Rodrigo Vivi
  Cc: Raag Jadav, Andi Shyti, David Airlie, Simona Vetter,
	Guenter Roeck, intel-xe, dri-devel, linux-hwmon, linux-kernel,
	Zhan Wei

xe_hwmon_pcode_read_fan_control() currently hardcodes *uval = 2 when
queried with FSC_READ_NUM_FANS on DG2. This causes fan2_input to be
exposed via sysfs, but on the tested Arc A750 LE (DG2 G10, PCI ID
0x56a1) fan2_input reads 0 RPM permanently while fan1_input correctly
reports ~800 RPM with both physical fan physically spinning.

The RPM is calculated delta-based from a tach pulse counter:

    rotations = (reg_val - fi->reg_val_prev) / 2;

so a constant-zero RPM means the register at offset 0x138170
(BMG_FAN_2_SPEED) simply does not accumulate pulses on DG2 silicon.
The i915 driver does not expose fan2 on DG2 at all -- it only maps
PCU_PWM_FAN_SPEED (0x138140, identical to BMG_FAN_1_SPEED), consistent
with the observation that only one fan tach register is wired on DG2.

Report a single fan for DG2 to keep the phantom fan2_input out of
sysfs.  Battlemage paths are unchanged.

Tested on Arc A750 LE (DG2 G10): with this patch applied, fan2_input
no longer appears in /sys/class/hwmon/hwmonX/ and `sensors xe-pci-0300`
shows fan1 only.

Fixes: 28f79ac609de ("drm/xe/hwmon: expose fan speed")
Signed-off-by: Zhan Wei <zhanwei919@gmail.com>
---
Open questions for reviewers: this is verified only on DG2 G10. Owners
of G11 (e.g. ASRock Challenger A750) and G12 (e.g. Sparkle Titan A750
with three physical fans) -- does fan2_input or fan3_input ever read
non-zero in your setup? If so, the right fix is a per-subplatform
table rather than a flat 1.

 drivers/gpu/drm/xe/xe_hwmon.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_hwmon.c b/drivers/gpu/drm/xe/xe_hwmon.c
index de3f2aeffc3f..2a60a76b1971 100644
--- a/drivers/gpu/drm/xe/xe_hwmon.c
+++ b/drivers/gpu/drm/xe/xe_hwmon.c
@@ -860,9 +860,15 @@ static int xe_hwmon_pcode_read_fan_control(const struct xe_hwmon *hwmon, u32 sub
 {
 	struct xe_tile *root_tile = xe_device_get_root_tile(hwmon->xe);
 
-	/* Platforms that don't return correct value */
+	/*
+	 * The PCODE FAN_SPEED_CONTROL subcommands return an error on DG2, so we
+	 * answer the FSC_READ_NUM_FANS query here. DG2 only wires a single fan
+	 * tachometer register (BMG_FAN_1_SPEED == 0x138140, shared with i915's
+	 * PCU_PWM_FAN_SPEED); BMG_FAN_2/3_SPEED read 0 on DG2 silicon. Reporting
+	 * one fan keeps a phantom fan2_input that always reads 0 out of sysfs.
+	 */
 	if (hwmon->xe->info.platform == XE_DG2 && subcmd == FSC_READ_NUM_FANS) {
-		*uval = 2;
+		*uval = 1;
 		return 0;
 	}
 
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2026-06-03 11:13 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-27 11:53 [RFC PATCH] drm/xe/hwmon: report a single fan for DG2 instead of two Zhan Wei
2026-05-27 12:17 ` sashiko-bot
2026-05-27 13:53 ` Raag Jadav
2026-05-27 15:18   ` 占wei
2026-05-28 16:49     ` Raag Jadav
2026-05-28 14:37 ` ✗ LGCI.VerificationFailed: failure for " Patchwork
2026-05-29 13:50 ` [PATCH v2] drm/xe/hwmon: document DG2 fan speed reporting quirk Zhan Wei
2026-05-29 14:05   ` 占wei
2026-05-29 16:12     ` Raag Jadav
2026-05-29 17:24       ` [PATCH v3] " Zhan Wei
2026-05-30  7:12         ` Raag Jadav
2026-06-02 16:17           ` [PATCH v4] " Zhan Wei
2026-06-01 15:25 ` ✗ LGCI.VerificationFailed: failure for drm/xe/hwmon: report a single fan for DG2 instead of two (rev3) Patchwork
2026-06-03 11:13 ` ✗ LGCI.VerificationFailed: failure for drm/xe/hwmon: report a single fan for DG2 instead of two (rev4) Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.