This patch enables passive cooling support in the ACPITZ module;
please test this if your system overheats in normal usage.
It is a little noisy for now.
? acpitz.c.fix
? msg
? passive.diff
Index: acpitz.c
===================================================================
RCS file: /cvs/src/sys/dev/acpi/acpitz.c,v
retrieving revision 1.31
diff -u -p -u -p -b -r1.31 acpitz.c
--- acpitz.c 26 Apr 2009 02:20:58 -0000 1.31
+++ acpitz.c 24 Aug 2009 15:54:50 -0000
@@ -79,6 +79,10 @@ int acpitz_setfan(struct acpitz_softc *,
int acpitz_setcpu(struct acpitz_softc *, int);
#endif
+extern void (*cpu_setperf)(int);
+extern int perflevel;
+#define PERFSTEP 10
+
int
acpitz_match(struct device *parent, void *match, void *aux)
{
@@ -280,7 +284,7 @@ void
acpitz_refresh(void *arg)
{
struct acpitz_softc *sc = arg;
- int i, perc;
+ int i, trend, nperf;
dnprintf(30, "%s: %s: refresh\n", DEVNAME(sc),
sc->sc_devnode->name);
@@ -309,18 +313,29 @@ acpitz_refresh(void *arg)
dnprintf(30, "%s: passive cooling: lasttmp: %d tc1: %d "
"tc2: %d psv: %d\n", DEVNAME(sc), sc->sc_lasttmp,
sc->sc_tc1, sc->sc_tc2, sc->sc_psv);
+
+ printf("%s: tmp:%d last:%d psv:%d crt:%d\n",
+ DEVNAME(sc), sc->sc_tmp, sc->sc_lasttmp,
+ sc->sc_psv, sc->sc_crt);
+
+ /* Default: Increase performance PERFSTEP% */
+ nperf = perflevel;
+ if ((nperf += PERFSTEP) >= 100)
+ nperf = 100;
if (sc->sc_psv <= sc->sc_tmp) {
- sc->sc_pse = 1;
- perc = sc->sc_tc1 * (sc->sc_tmp - sc->sc_lasttmp) +
+ trend = sc->sc_tc1 * (sc->sc_tmp - sc->sc_lasttmp) +
sc->sc_tc2 * (sc->sc_tmp - sc->sc_psv);
- perc /= 10;
- if (perc < 0)
- perc = 0;
- else if (perc > 100)
- perc = 100;
- /* printf("_TZ perc = %d\n", perc); */
- } else if (sc->sc_pse)
- sc->sc_pse = 0;
+
+ /* Heating up.. decrease performance X% */
+ if (trend > 0 && (nperf -= 2*PERFSTEP) < 0)
+ nperf = 0;
+ printf("Trend: %d\n", trend);
+ }
+ printf("lastperf: %d\n", nperf);
+ if (cpu_setperf && nperf != perflevel) {
+ perflevel = nperf;
+ cpu_setperf(nperf);
+ }
}
sc->sc_lasttmp = sc->sc_tmp;