On Thu, Dec 26, 2019 at 6:51 PM Guenter Roeck <linux@xxxxxxxxxxxx> wrote: > Reading the temperature of ATA drives has been supported for years > by userspace tools such as smarttools or hddtemp. The downside of > such tools is that they need to run with super-user privilege, that > the temperatures are not reported by standard tools such as 'sensors' > or 'libsensors', and that drive temperatures are not available for use > in the kernel's thermal subsystem. (...) > Cc: Chris Healy <cphealy@xxxxxxxxx> > Cc: Linus Walleij <linus.walleij@xxxxxxxxxx> > Cc: Martin K. Petersen <martin.petersen@xxxxxxxxxx> > Cc: Bart Van Assche <bvanassche@xxxxxxx> > Reviewed-by: Linus Walleij <linus.walleij@xxxxxxxxxx> > Signed-off-by: Guenter Roeck <linux@xxxxxxxxxxxx> I took the v3 patch for a test run on the D-Link DIR-695 NAS/router and it works like a charm. With a few additional patches (that I am starting to upstream) the temperature zone in the drive can be used to control the GPIO-based fan in the NAS to keep the enclosure/chassis temperature down. I define a thermal zone in device tree like this: + thermal-zones { + chassis-thermal { + /* Poll every 20 seconds */ + polling-delay = <20000>; + /* Poll every 2nd second when cooling */ + polling-delay-passive = <2000>; + /* Use the thermal sensor in the hard drive */ + thermal-sensors = <&sata_drive>; + + /* Tripping points from the fan.script in the rootfs */ + trips { + alert: chassis-alert { + /* At 43 degrees turn on the fan */ + temperature = <43000>; + hysteresis = <3000>; + type = "active"; + }; + crit: chassis-crit { + /* Just shut down at 60 degrees */ + temperature = <60000>; + hysteresis = <2000>; + type = "critical"; + }; + }; + + cooling-maps { + map0 { + trip = <&alert>; + cooling-device = <&fan0 1 1>; + }; + }; + }; + }; (...) pata-controller@63000000 { status = "okay"; + + /* + * This drive may have a temperature sensor with a + * thermal zone we can use for thermal control of the + * chassis temperature using the fan. + */ + sata_drive: drive@0 { + reg = <0>; + #thermal-sensor-cells = <0>; + }; }; The temperature started out at household temperature 26 degrees this morning, leaving the device running it gradually reached the trip point at 43 degrees and runs the fan. It then switches the fan off/on with some hysteresis keeping the temperature around 43 degreed. The PID-controller in the thermal framework handles it all in-kernel as expected. Tested-by: Linus Walleij <linus.walleij@xxxxxxxxxx> Yours, Linus Walleij