Device: Minisforum AI Pro HX 370 - BIOS: v1.06
MANDATORY DISCLAIMER
PROCEED WITH EXTREME CAUTION. This is an ongoing investigation, and the findings below are experimental. I take no responsibility for broken hardware, bricked BIOS, or thermal damage.
The HX 370 uses a dual-fan design. Through testing I discovered a thermal disconnect:
I have successfully gained control over the secondary fan using low-level register access.
Prerequisites
3. Detailed Investigation Timeline
Phase 1: Identifying the Delta
Phase 2: Testing "Safe" Workarounds
PROCEED WITH EXTREME CAUTION. This is an ongoing investigation, and the findings below are experimental. I take no responsibility for broken hardware, bricked BIOS, or thermal damage.
- Do not follow these instructions.
- Check everything yourself before executing commands.
- Modifying Embedded Controller (EC) registers can lead to permanent hardware failure.
The HX 370 uses a dual-fan design. Through testing I discovered a thermal disconnect:
- The Logic: The system’s default fan curve stays always in IDLE (around 12xx RPMs).
- The Flaw: In workloads with heavy RAM operations (like Ollama, LLMs), or high SSD data transfers, the CPU often remains relatively cool.
- The Result: The secondary fan (which cools the RAM and NVMe drives) stays at an idle ~1200 RPM. This causes the RAM and SSD to heat-soak, often hitting 75°C+, which can lead to instability or hardware degradation while the device remains deceptively quiet.
- The CPU Fan: works as expected and reacts to the CPU loaded changes; if the CPU is loaded the fan reacts and indirectly cools RAM and SSD.
- Trap: when the CPU is not loaded but RAM and/or SSD are, those parts suffer since only idle cooling is provided.
- Isolated Hardware Issue: This could be a defect specific to my unit. I am looking for feedback from other HX 370 owners to confirm if this is a widespread behavior.
- Missing Linux Driver Support: There is a possibility that a proprietary Minisforum driver handles this fan logic in Windows. Without an equivalent driver in GNU/Linux, the EC may not be receiving the necessary thermal data.
- Intentional Acoustic Tuning: Minisforum may have prioritized low noise levels over component longevity. However, even setting the fan to 100% in the BIOS fails to override the idle speed.
- EC Firmware Logic Gap: The EC might be programmed to trigger the secondary fan based on power supply load rather than RAM/SSD sensors.
- BIOS/EC Communication Bug: This is the most likely scenario. There appears to be a breakdown where the EC ignores manual fan values set in the BIOS.
I have successfully gained control over the secondary fan using low-level register access.
Prerequisites
- Enter BIOS.
- Disable Secure Boot.
- In theory we should navigate to Hardware Monitor and set Auxiliary Fan to Manual but seems to work with any mode and the EC is never writing any value after the default value set after boot.
- Executed
to enable access toCode:
sudo modprobe ec_sys write_support=1.Code:/sys/kernel/debug/ec/ec0/io - To Write a new value (Example: Set to 100% duty cycle):
(Note: 0x64 is 100 in decimal, representing max speed).Code:sudo printf '\x64' | sudo dd of=/sys/kernel/debug/ec/ec0/io bs=1 seek=<xx> count=1 conv=notrunc - On my device <xx> is 48 (0x30 hex -> 48 decimal). I moved the value here to avoid accidental copy-pasting.
3. Detailed Investigation Timeline
Phase 1: Identifying the Delta
- Observation: During LLM sessions, the system was silent but RAM reached 70°C after 5 minutes.
- Finding: CPU/GPU was cool, but RAM was hitting 70°C. The secondary fan was locked at static 12xx RPM.
Phase 2: Testing "Safe" Workarounds
- Attempt: Reduced power limit from 54W to 45W. Result: Failure (only delayed heat-soaking).
- Attempt: "Busy Wait" script to artificially load CPU. Result: Worked but increased overall heat and wasted power.
- Attempt: Pausing Ollama at 65°C. Result: High efficiency (>85%) but constant thermal stress (+/- 5 degree cycles).
- Discovery: Register 0x30 responded directly to fan speed requests.
- Validation: By writing
toCode:
0x0e, the fan ramps from 1400 RPM to max speed. This keeps RAM <55°C even at highest load with only reaching a PWM cycle of around 30%.Code:0x64
- Gaming vs. AI: In games, GPU/CPU load triggers fans naturally; in AI/LLM workloads, the secondary zone is neglected.
- Critical Scenarios: Manual fix is essential for high intensive RAM tasks or heavy I/O where CPU is idle.
- Link: Python PID controller implementation for the auxiliary fan.