Skip to content

Fan Control ​

The fan is driven by the ICC's autoservo firmware - the kernel exposes a target SoC temperature and the firmware ramps the fan on its own to hold that temperature. There's no manual PWM/RPM control, just the target.

Kernel driver: drivers/ps5/fan/ (merged in ps5-linux-patches #25). Default target is 80°C.

Sysfs interface ​

/sys/bus/platform/devices/ps5-fan/target_temp

Read the current target:

bash
cat /sys/bus/platform/devices/ps5-fan/target_temp

Set a lower target for more aggressive cooling (louder, but keeps the SoC cooler under load) - e.g. 65°C:

bash
echo 65 | sudo tee /sys/bus/platform/devices/ps5-fan/target_temp

Valid range is 0-100 (°C). There's no need to slam it to a fixed "max" setting - the servo already ramps as needed once it has a target to chase, so just pick a target temp you're happy with.

Reported idle temps: default target (80°C) idles around 59°C SoC. Dropping target to ~40°C brings idle down to ~46°C, at the cost of constant audible fan noise ("jet mode"). Diminishing returns below that, the servo is already near its ramp ceiling.

ps5ctl ​

ps5ctl wraps this (plus LED, buzzer, and GPU clock) in a TUI/CLI/web control panel:

bash
sudo ps5ctl --temp 65

or interactively via the Fan tab in sudo ps5ctl.

Standalone fan_mode kernel module ​

A separate, minimal alternative for benchmarking with the fan forced to a fixed EMC mode (auto/max/min) instead of a target temp, RE'd directly from the EMC ICC commands:

bash
make -C /lib/modules/$(uname -r)/build M=$PWD obj-m=fan_mode.o modules

Force max speed:

bash
sudo insmod fan_mode.ko zone=0 fan_mode=2 ; sudo rmmod fan_mode

Restore auto mode:

bash
sudo insmod fan_mode.ko zone=0 fan_mode=1 ; sudo rmmod fan_mode

No adjustable percentage, the EMC only supports Auto/Max/Min modes. Max is loud, audibly described as "turbine mode" by testers.

No Dedicated GPU Temperature Sensor ​

There's no separate GPU-only temperature reading, only the combined APU die temp (Tctl), since CPU and GPU share one die:

bash
cat /sys/class/hwmon/hwmon*/temp*_label   # find Tctl
cat /sys/class/hwmon/hwmon*/temp*_input   # value in millidegrees C

This has been a recurring question since early testing, there simply isn't a GPU-specific sensor exposed, Tctl is the closest available number and covers both.

Reference reading: GPU pinned at its floor (400MHz, /sys/class/devfreq/ps5-gpufreq/cur_freq), Tctl sat at 42.75°C. Normal CPU idle floor is ~798MHz, an active SSH session at sample time kept cores elevated (~1.6-3.2GHz spread) rather than fully idle.

Community project. Not affiliated with Sony Interactive Entertainment.