Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 28 Jun 2011 14:28:31 +0300
From:      Andriy Gapon <avg@FreeBSD.org>
To:        Vitaly Magerya <vmagerya@gmail.com>
Cc:        freebsd-acpi@FreeBSD.org
Subject:   Re: (Missing) power states of an Atom N455-based netbook
Message-ID:  <4E09BADF.7050702@FreeBSD.org>
In-Reply-To: <BANLkTikmVUtLyANBSqYb%2BL-xkwQ4Zo51Eg@mail.gmail.com>
References:  <BANLkTim%2B1UwquMJ32WP8wZBGkYxPv78MLA@mail.gmail.com>	<4E05EB91.9090509@FreeBSD.org>	<BANLkTi=dyNx=TjyEqYMhSkRtddjVA4nAtw@mail.gmail.com>	<4E0862A0.7060405@FreeBSD.org> <BANLkTikmVUtLyANBSqYb%2BL-xkwQ4Zo51Eg@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
on 27/06/2011 21:04 Vitaly Magerya said the following:
>> It seems that possibly we present different OS capabilities to ACPI...
>> Needs more investigation.
>>
>> Can you also send me two binary files produced as follows:
>> 1. dd if=/dev/mem size=1 iseek=0x3F5B9B71 count=0x00000203 of=...
>> 2. dd if=/dev/mem size=1 iseek=0x3F5B92DA count=0x00000708 of=...
>>
>> Or, if it's not too much trouble for you, you can send results of
>> decompilation of those files using iasl -d <filename>
> 
> You can find them all at [1] and [2].
> 
> [1] http://tx97.net/~magv/n143-acpi/mem-3f5b9b71.dsl.txt
> [2] http://tx97.net/~magv/n143-acpi/mem-3f5b92da.dsl.txt

OK, thank you, very interesting.

I think that part (but not all) of the differences between FreeBSD and Linux can
be explained by the fact that FreeBSD currently doesn't advertise itself as
featuring ACPI_CAP_SMP_C1_NATIVE and ACPI_CAP_SMP_C3_NATIVE.  I am not sure what
it would take to actually support these features.  I think that Linux does
support (or at least advertise support) for these features.

I see one repeated condition for providing advanced C states, it's:
(\_SB.C1ON) and (LAnd (LOr (LNot (PWRS), \_SB.C4AC), \_SB.C3SU))).

I think that PWRS is supposed to reflect current AC state (1 - connected, 0 -
disconnected).
All of C1ON, C4AC and C3SU are declared in a special memory region:
OperationRegion (SNVS, SystemMemory, 0x3F5C0C7D, 0x000000FF)

My guess is that SNVS stands for "System Non-Volatile Storage" or some such,
which may serve similarly to CMOS NVRAM for BIOS settings.
Further, I guess that C4AC is a configuration setting for whether to provide C4
state while on AC, and C3SU - is whether C3 state should be supported.
C1ON - not really sure.

I would be interested to see memory dumps of the above region both early after
boot and later when you get additional C states.
This can be done with:
dd if=/dev/mem size=1 iseek=0x3F5C0C7D count=0x000000FF

I am not sure if the values in SNVS can change during OS run-time, so I would
like to check that.  At least they are not modified via ACPI code as far as I
can see.

Then, PWRS is declared in GNVS region ("Global Non-Volatile Storage"?):
OperationRegion (GNVS, SystemMemory, 0x3F5C0D7C, 0x0100)
I would like to get two dumps for this region too.

I see that PWRS value is being manipulated in a few of EC (embedded controller
device) methods.  So maybe we do not call something related as early as Linux does.

And, I also see that there is an interesting variable MPEN which controls
whether to send Processor notifications when PNOT ("processor notify"?) method
is called; these notifications are what leads to re-evaluation of _CST
(avialable C states).

I hope that the additional data will shed some light.
-- 
Andriy Gapon



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4E09BADF.7050702>