Index: sys/dev/acpi/acpitz.c =================================================================== RCS file: /home/cvs/src/sys/dev/acpi/acpitz.c,v retrieving revision 1.58 diff -u -p -r1.58 acpitz.c --- sys/dev/acpi/acpitz.c 6 Apr 2022 18:59:27 -0000 1.58 +++ sys/dev/acpi/acpitz.c 30 Jun 2022 10:52:09 -0000 @@ -39,6 +39,8 @@ #define ACPITZ_TMP_RETRY (3) #define ACPITZ_UNKNOWN (-1) +#define PERFPOL_AUTO 1 + struct acpitz_softc { struct device sc_dev; @@ -89,7 +91,9 @@ void acpitz_init(struct acpitz_softc *, void (*acpitz_cpu_setperf)(int); int acpitz_perflevel = -1; extern void (*cpu_setperf)(int); +extern int hw_power; extern int perflevel; +extern int perfpolicy; #define PERFSTEP 10 #define ACPITZ_TRIPS (1L << 0) @@ -224,6 +228,13 @@ acpitz_attach(struct device *parent, str else printf(": critical temperature is %d degC\n", KTOC(sc->sc_crt)); + if ((sc->sc_psv = acpitz_gettempreading(sc, "_PSV")) == -1) { + printf("%s: no passive cooling temperature defined\n", + DEVNAME(sc)); + } else + printf("%s: passive cooling temperature is %d degC\n", + DEVNAME(sc), KTOC(sc->sc_psv)); + sc->sc_hot = acpitz_gettempreading(sc, "_HOT"); sc->sc_tc1 = acpitz_getreading(sc, "_TC1"); sc->sc_tc2 = acpitz_getreading(sc, "_TC2"); @@ -231,7 +242,7 @@ acpitz_attach(struct device *parent, str /* get _PSL, _ALx */ acpitz_init(sc, ACPITZ_INIT); - dnprintf(10, "%s: _HOT: %d _TC1: %d _TC2: %d _PSV: %d _TMP: %d " + printf("%s: _HOT: %d _TC1: %d _TC2: %d _PSV: %d _TMP: %d " "_CRT: %d\n", DEVNAME(sc), sc->sc_hot, sc->sc_tc1, sc->sc_tc2, sc->sc_psv, sc->sc_tmp, sc->sc_crt); @@ -376,15 +387,13 @@ acpitz_refresh(void *arg) /* passive cooling */ if (sc->sc_lasttmp != -1 && sc->sc_tc1 != -1 && sc->sc_tc2 != -1 && sc->sc_psv != -1) { - 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); - nperf = acpitz_perflevel; - if (sc->sc_psv <= sc->sc_tmp) { + if (sc->sc_psv <= sc->sc_tmp && perfpolicy == PERFPOL_AUTO && !hw_power) { /* Passive cooling enabled */ - dnprintf(1, "%s: enabling passive %d %d\n", - DEVNAME(sc), sc->sc_tmp, sc->sc_psv); + printf("%s: passive cooling: tmp: %d tc1: %d " + "tc2: %d psv: %d perfpol: %d pwr: %d (active)\n", + DEVNAME(sc), KTOC(sc->sc_tmp), sc->sc_tc1, sc->sc_tc2, + KTOC(sc->sc_psv), perfpolicy, hw_power); if (!sc->sc_pse) sc->sc_acpi->sc_pse++; sc->sc_pse = 1; @@ -392,6 +401,9 @@ acpitz_refresh(void *arg) trend = sc->sc_tc1 * (sc->sc_tmp - sc->sc_lasttmp) + sc->sc_tc2 * (sc->sc_tmp - sc->sc_psv); + printf("%s: trend: %d(tc1) * %d(tmp) - %d(lasttmp)) + %d(tc2) * %d(tmp) - %d(psv) = %d\n", + DEVNAME(sc), sc->sc_tc1, sc->sc_tmp, sc->sc_lasttmp, sc->sc_tc2, sc->sc_tmp, sc->sc_psv, trend); + /* Depending on trend, slow down/speed up */ if (trend > 0) nperf -= PERFSTEP; @@ -400,8 +412,10 @@ acpitz_refresh(void *arg) } else { /* Passive cooling disabled, increase % */ - dnprintf(1, "%s: disabling passive %d %d\n", - DEVNAME(sc), sc->sc_tmp, sc->sc_psv); + printf("%s: passive cooling: tmp: %d tc1: %d " + "tc2: %d psv: %d perfpol: %d pwr: %d (inactive)\n", + DEVNAME(sc), KTOC(sc->sc_tmp), sc->sc_tc1, sc->sc_tc2, + KTOC(sc->sc_psv), perfpolicy, hw_power); if (sc->sc_pse) sc->sc_acpi->sc_pse--; sc->sc_pse = 0; @@ -420,6 +434,7 @@ acpitz_refresh(void *arg) if (acpitz_cpu_setperf && nperf != acpitz_perflevel) { acpitz_perflevel = nperf; acpitz_cpu_setperf(nperf); + printf("%s: set perflevel: %d\n", DEVNAME(sc), nperf); } } sc->sc_lasttmp = sc->sc_tmp;