Fixing random N100 & N5105 mini-PC freezes
The symptom: a cheap Intel N5105 / N100 / N305 (Jasper/Alder-N) mini-PC or NUC — the darlings of budget homelabs — hard-freezes at random, usually while idle. No SSH, no ping, needs a physical power cycle. When you check afterward: the logs just stop dead mid-idle — no kernel panic, no oops, no MCE/machine-check, no thermal event (cores were cool). A silent hard lockup.
The cause: it’s the well-known deep-C-state hang on these low-power Intel chips. When the CPU tries to drop into a deep idle C-state, it never wakes. Stock kernels ship with no mitigation for it.
The fix (one kernel parameter): cap the idle C-state.
Fix it (GRUB — most Proxmox/Debian installs)
# add the param to the default cmdline
nano /etc/default/grub
# GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_idle.max_cstate=1"
update-grub
reboot
If your box boots via systemd-boot (ZFS-root Proxmox), edit /etc/kernel/cmdline instead and run
proxmox-boot-tool refresh.
Verify after reboot:
cat /proc/cmdline # shows intel_idle.max_cstate=1
cat /sys/module/intel_idle/parameters/max_cstate # -> 1
That’s it — the box stays up. In our case an N5105 that was hard-locking on idle has been rock-solid since.
If it still freezes (escalation ladder)
Apply the next one only if the previous didn’t hold:
processor.max_cstate=1— belt-and-suspenders alongsideintel_idle.max_cstate=1.pcie_aspm=off— some of these boards freeze on PCIe Active-State Power Management, not just CPU C-states.- BIOS update — many of these generic boards (e.g. “U59”/JTKT-series) shipped buggy early firmware; vendor updates often fix idle stability directly.
- memtest86+ — if you bought a used unit or added your own RAM, rule out bad memory before blaming C-states.
How to tell it was a C-state hang (vs. something else)
journalctl -k -b -1(or--since) around the freeze time → logs simply stop, no panic/oops.journalctl -k | grep -i mceandras-mc-ctl --summary→ zero machine-check errors (rules out bad RAM/CPU).sensorshistory → cores well under Tjmax (rules out thermal). Cool + silent + log-stops-dead = C-state hang.
Trade-off (tiny)
Capping C-states raises idle power a little (a couple of watts) and blocks the deepest sleep. On a 24/7 homelab node that’s a rounding error — and infinitely better than random lockups. It does not hurt performance.
TL;DR: budget Intel N-series mini-PC freezing at idle with no panic in the logs? Add
intel_idle.max_cstate=1 to the kernel cmdline, update-grub, reboot. Done.
Written from a real fix: a used N5105 board (“U59”, BIOS JTKT001) hard-froze while idle with a clean log tail — no
panic, no MCE, ~62 °C — the classic Jasper Lake deep-C-state hang. intel_idle.max_cstate=1 cured it.
Written by James Brooks — I run ThatNerdKnows (IT support + websites for small businesses). This is the deep end; if you’d rather just have it handled, that’s the day job.