fixup for missing C1 in _CST

Moore, Robert robert.moore at intel.com
Thu Nov 11 20:39:37 UTC 2010


Oops, missed it.

"_CST defines ascending C-states..."

Could it be that the problem is that the platform is returning a _CST package that is not sorted or even is sorted descending?

Bob


>-----Original Message-----
>From: owner-freebsd-acpi at freebsd.org [mailto:owner-freebsd-
>acpi at freebsd.org] On Behalf Of Moore, Robert
>Sent: Thursday, November 11, 2010 12:20 PM
>To: Andriy Gapon; freebsd-acpi at freebsd.org
>Cc: Lin, Ming M
>Subject: RE: fixup for missing C1 in _CST
>
>It's not clear to me from reading the ACPI spec that the Cstate sub-
>packages are required to be in any specific order.
>
>This means that
>
>sc->cpu_cx_states[0]
>
>Does not necessarily have to be of type ACPI_STATE_C1, if ACPI_STATE_C1 is
>present on the machine. (unless the driver has sorted the list already.)
>
>This looks like an area where ACPICA could sort the packages by type before
>handing off the _CST package to the driver.
>
>Bob
>
>
>>-----Original Message-----
>>From: owner-freebsd-acpi at freebsd.org [mailto:owner-freebsd-
>>acpi at freebsd.org] On Behalf Of Andriy Gapon
>>Sent: Thursday, November 11, 2010 9:21 AM
>>To: freebsd-acpi at freebsd.org
>>Subject: fixup for missing C1 in _CST
>>
>>
>>Dear fellow FreeBSD ACPI hackers,
>>what is your opinion about the following patch?
>>
>>The idea is to add a C1 state to available states if a bugggy BIOS
>supplies
>>us
>>with _CST that has states with C2, C3, etc types, but no state with C1
>>type.
>>
>>Thanks!
>>
>>diff --git a/sys/dev/acpica/acpi_cpu.c b/sys/dev/acpica/acpi_cpu.c
>>index 3c675df..6c771d9 100644
>>--- a/sys/dev/acpica/acpi_cpu.c
>>+++ b/sys/dev/acpica/acpi_cpu.c
>>@@ -724,8 +724,21 @@ acpi_cpu_cx_cst(struct acpi_cpu_softc *sc)
>> 	    sc->cpu_cx_count++;
>> 	}
>>     }
>>-    AcpiOsFree(buf.Pointer);
>>
>>+    if (sc->cpu_cx_count > 0 && sc->cpu_cx_states[0].type !=
>>ACPI_STATE_C1) {
>>+	memmove(&sc->cpu_cx_states[1], &sc->cpu_cx_states[0],
>>+	    sc->cpu_cx_count * sizeof(sc->cpu_cx_states[0]));
>>+	sc->cpu_cx_states[0].type = ACPI_STATE_C1;
>>+	sc->cpu_cx_states[0].trans_lat = 0;
>>+	sc->cpu_cx_states[0].power = 0;
>>+	sc->cpu_cx_states[0].p_lvlx = NULL;
>>+	sc->cpu_cx_states[0].res_type = 0;
>>+	sc->cpu_cx_count++;
>>+	if (sc->cpu_cx_states[1].type <= ACPI_STATE_C2)
>>+	    sc->cpu_non_c3++;
>>+    }
>>+
>>+    AcpiOsFree(buf.Pointer);
>>     return (0);
>> }
>>
>>
>>--
>>Andriy Gapon
>>_______________________________________________
>>freebsd-acpi at freebsd.org mailing list
>>http://lists.freebsd.org/mailman/listinfo/freebsd-acpi
>>To unsubscribe, send any mail to "freebsd-acpi-unsubscribe at freebsd.org"
>_______________________________________________
>freebsd-acpi at freebsd.org mailing list
>http://lists.freebsd.org/mailman/listinfo/freebsd-acpi
>To unsubscribe, send any mail to "freebsd-acpi-unsubscribe at freebsd.org"


More information about the freebsd-acpi mailing list