102 lines
3.6 KiB
Diff
102 lines
3.6 KiB
Diff
|
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;
|