Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 1 Jul 2011 01:52:34 +0300
From:      Vitaly Magerya <vmagerya@gmail.com>
To:        Andriy Gapon <avg@freebsd.org>
Cc:        freebsd-acpi@freebsd.org
Subject:   Re: (Missing) power states of an Atom N455-based netbook
Message-ID:  <BANLkTinRY-h%2BkpXtwWJ_L86qVRdoynFSdg@mail.gmail.com>
In-Reply-To: <4E0CE158.6030804@FreeBSD.org>
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> <4E09BADF.7050702@FreeBSD.org> <BANLkTin_%2BZH%2Bo7rdR9ijHMtrXcSdH9ZSdQ@mail.gmail.com> <4E0A41C8.3000904@FreeBSD.org> <BANLkTikwgy%2BKuA5E5zXQKGT-eyV35YAVag@mail.gmail.com> <4E0CE158.6030804@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Andriy Gapon <avg@freebsd.org> wrote:
> Here's what Intel docs say:
>
> The processor implements two software interfaces for requesting low power
> states, MWAIT instruction extensions with sub-state hints and P_LVLx reads to
> the ACPI P_BLK register block mapped in the processor's I/O address space. The
> P_LVLx I/O reads are converted to equivalent MWAIT C-state requests inside the
> processor and do not directly result in I/O reads on the processor FSB.
>
> My interpretation is that both mechanism should work equally.

I see.

>> Just tried this. Nothing seems fried; the visible effect is that
>> now when I plug the power cord in backlight brightness turns all
>> the way up, and then back down the I turn it off. No changes in
>> SNVS or GNVS variables aside from the usual ones.
>
> At least some improvement (or just a difference)...

Since VDRV is always 0, you can't really say if it's a coincidence
or the intended behavior.

> Not sure how to proceed here further.  Apparently we do something differently
> from Linux (and presumably Windows) here, but it's quite hard to tell what. The
> problem is that SNVS/GNVS (in particular C1ON) seem to be controlled by some
> firmware/hardware and that's a black box.
> And I am still puzzled about which exactly event triggers change in C1ON value
> on FreeBSD...

I got the dumps for Linux (it appears that you can't just read
/dev/mem on there, you need to mmap it). The summary of differences
between FreeBSD and Linux right after the boot:

    DB00: 01 -> 00
    P80D: 06:08:00:00 -> 06:08:4C:00
    PCP0: 1D -> BF
    PCP1: 1D -> BF
    BRTL: 00 -> 1E
    VDRV: 00 -> 01

(Note that C1ON is 0 just as with FreeBSD, and yet powertop does
report C2 and C4).

Then, after about 4 minutes of uptime, C1ON changes to 1 (and
powertop still reports the same states).

> Do you have powerd enabled?  Can you check if anything changes
> with it disabled (just for the sake of testing).

I do; nothing changes if I don't.

> P.S. Just an idea, maybe the following script could be of some help if you
> have dtrace support in your kernel:
> $ dtrace -n 'fbt::AcpiEvaluateObject:entry { printf("%p->%s\n", args[0],
> (string)args[1]); }'
> I would like to get entries, if any, around the time that the C-states
> become available.

I'll try to compile the kernel with dtrace and post the results back.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?BANLkTinRY-h%2BkpXtwWJ_L86qVRdoynFSdg>