Module Name: src Committed By: jruoho Date: Tue Aug 17 10:35:22 UTC 2010
Modified Files: src/sys/dev/acpi: acpi_cpu_pstate.c acpi_cpu_tstate.c Log Message: Clarify the initialization of the dynamic maximums/minimums. Reset these to defaults upon suspend. As we do not know how well the firmware maintains state, do not run the callbacks that evaluate the maximum/minimum on resume. To generate a diff of this commit: cvs rdiff -u -r1.27 -r1.28 src/sys/dev/acpi/acpi_cpu_pstate.c cvs rdiff -u -r1.12 -r1.13 src/sys/dev/acpi/acpi_cpu_tstate.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/acpi/acpi_cpu_pstate.c diff -u src/sys/dev/acpi/acpi_cpu_pstate.c:1.27 src/sys/dev/acpi/acpi_cpu_pstate.c:1.28 --- src/sys/dev/acpi/acpi_cpu_pstate.c:1.27 Tue Aug 17 10:17:52 2010 +++ src/sys/dev/acpi/acpi_cpu_pstate.c Tue Aug 17 10:35:22 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi_cpu_pstate.c,v 1.27 2010/08/17 10:17:52 jruoho Exp $ */ +/* $NetBSD: acpi_cpu_pstate.c,v 1.28 2010/08/17 10:35:22 jruoho Exp $ */ /*- * Copyright (c) 2010 Jukka Ruohonen <jruoho...@iki.fi> @@ -27,7 +27,7 @@ * SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: acpi_cpu_pstate.c,v 1.27 2010/08/17 10:17:52 jruoho Exp $"); +__KERNEL_RCSID(0, "$NetBSD: acpi_cpu_pstate.c,v 1.28 2010/08/17 10:35:22 jruoho Exp $"); #include <sys/param.h> #include <sys/evcnt.h> @@ -54,6 +54,7 @@ static int acpicpu_pstate_max(struct acpicpu_softc *); static int acpicpu_pstate_min(struct acpicpu_softc *); static void acpicpu_pstate_change(struct acpicpu_softc *); +static void acpicpu_pstate_reset(struct acpicpu_softc *); static void acpicpu_pstate_bios(void); static uint32_t acpicpu_pstate_saved; @@ -111,12 +112,10 @@ if (ACPI_FAILURE(rv)) aprint_debug_dev(self, "_PPC missing\n"); - sc->sc_pstate_max = 0; - sc->sc_pstate_min = sc->sc_pstate_count - 1; - sc->sc_flags |= ACPICPU_FLAG_P; acpicpu_pstate_bios(); + acpicpu_pstate_reset(sc); acpicpu_pstate_attach_evcnt(sc); acpicpu_pstate_attach_print(sc); @@ -274,6 +273,8 @@ struct acpicpu_pstate *ps = NULL; int32_t i; + acpicpu_pstate_reset(sc); + if (acpicpu_pstate_saved != 0) return true; @@ -318,8 +319,6 @@ acpicpu_pstate_saved = 0; } - acpicpu_pstate_callback(self); - return true; } @@ -809,8 +808,7 @@ ACPI_OBJECT_LIST arg; ACPI_OBJECT obj[2]; - sc->sc_pstate_max = 0; - sc->sc_pstate_min = sc->sc_pstate_count - 1; + acpicpu_pstate_reset(sc); arg.Count = 2; arg.Pointer = obj; @@ -831,6 +829,15 @@ } static void +acpicpu_pstate_reset(struct acpicpu_softc *sc) +{ + + sc->sc_pstate_max = 0; + sc->sc_pstate_min = sc->sc_pstate_count - 1; + +} + +static void acpicpu_pstate_bios(void) { const uint8_t val = AcpiGbl_FADT.PstateControl; Index: src/sys/dev/acpi/acpi_cpu_tstate.c diff -u src/sys/dev/acpi/acpi_cpu_tstate.c:1.12 src/sys/dev/acpi/acpi_cpu_tstate.c:1.13 --- src/sys/dev/acpi/acpi_cpu_tstate.c:1.12 Tue Aug 17 10:17:52 2010 +++ src/sys/dev/acpi/acpi_cpu_tstate.c Tue Aug 17 10:35:22 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: acpi_cpu_tstate.c,v 1.12 2010/08/17 10:17:52 jruoho Exp $ */ +/* $NetBSD: acpi_cpu_tstate.c,v 1.13 2010/08/17 10:35:22 jruoho Exp $ */ /*- * Copyright (c) 2010 Jukka Ruohonen <jruoho...@iki.fi> @@ -27,7 +27,7 @@ * SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: acpi_cpu_tstate.c,v 1.12 2010/08/17 10:17:52 jruoho Exp $"); +__KERNEL_RCSID(0, "$NetBSD: acpi_cpu_tstate.c,v 1.13 2010/08/17 10:35:22 jruoho Exp $"); #include <sys/param.h> #include <sys/evcnt.h> @@ -49,6 +49,7 @@ static ACPI_STATUS acpicpu_tstate_ptc(struct acpicpu_softc *); static ACPI_STATUS acpicpu_tstate_fadt(struct acpicpu_softc *); static ACPI_STATUS acpicpu_tstate_change(struct acpicpu_softc *); +static void acpicpu_tstate_reset(struct acpicpu_softc *); void acpicpu_tstate_attach(device_t self) @@ -105,11 +106,9 @@ sc->sc_flags |= ACPICPU_FLAG_T_FADT; } - sc->sc_tstate_max = 0; - sc->sc_tstate_min = sc->sc_tstate_count - 1; - sc->sc_flags |= ACPICPU_FLAG_T; + acpicpu_tstate_reset(sc); acpicpu_tstate_attach_evcnt(sc); acpicpu_tstate_attach_print(sc); } @@ -208,6 +207,9 @@ bool acpicpu_tstate_suspend(device_t self) { + struct acpicpu_softc *sc = device_private(self); + + acpicpu_tstate_reset(sc); return true; } @@ -215,10 +217,6 @@ bool acpicpu_tstate_resume(device_t self) { - struct acpicpu_softc *sc = device_private(self); - - if ((sc->sc_flags & ACPICPU_FLAG_T_FADT) == 0) - acpicpu_tstate_callback(self); return true; } @@ -584,8 +582,7 @@ ACPI_INTEGER val; ACPI_STATUS rv; - sc->sc_tstate_max = 0; - sc->sc_tstate_min = sc->sc_tstate_count - 1; + acpicpu_tstate_reset(sc); /* * Evaluate the available T-state window: @@ -621,6 +618,14 @@ return AE_OK; } +static void +acpicpu_tstate_reset(struct acpicpu_softc *sc) +{ + + sc->sc_tstate_max = 0; + sc->sc_tstate_min = sc->sc_tstate_count - 1; +} + int acpicpu_tstate_get(struct acpicpu_softc *sc, uint32_t *percent) {