public inbox for linux-pm@vger.kernel.org
 help / color / mirror / Atom feed
From: David Brownell <david-b@pacbell.net>
To: Jordan Crouse <jordan.crouse@amd.com>
Cc: linux-pm@lists.linux-foundation.org, devel@laptop.org,
	linux-acpi@vger.kernel.org, linux-pm@lists.osdl.org
Subject: Re: Power Mangement Interfaces
Date: Sat, 31 Mar 2007 11:57:03 -0700	[thread overview]
Message-ID: <200703311157.03975.david-b@pacbell.net> (raw)
In-Reply-To: <20070331181612.GD8091@cosmic.amd.com>

On Saturday 31 March 2007 11:16 am, Jordan Crouse wrote:
> On 31/03/07 09:52 -0700, David Brownell wrote:

> > You seem to be completely ignoring the /sys/devices/..../power/wakeup
> > event attributes.  Why?
> 
> Complete and total ignorance that they even existed.   I guess I should
> pay more attention to linux-pm then I do.. :(.    My impression is that
> this infrastructure allows the devices to configure themselves to wake
> up the system, 

Actually the model is that those files offer a per-device userspace
policy knob, defaulting to "yes, this can wake the system up" (since
otherwise such knobs will rarely be turned on!).  That should be
initialized before the device is registered.

Device driver responsibility is to check that setting in suspend()
and do the appropriate juju; and undo it in resume().  Other than
that, they don't "configure themselves".


> but it doesn't seem to address enabling the system to 
> allow those events to wake it.  It is the latter that I am concerned about.  

That's a split responsibility.  One part is in the device driver, since
it's the only thing that can really understand the mechanism involved;
for example, making sure the relevant device clocks are active, issuing
the enable_irq_wake() calls, and so on.  (PCI has its own magic.)

The other part is the platform code.  On embedded hardware that's usually
just calling device_init_wakeup() before registering the platform devices,
and supporting enable_irq_wake().  On x86 that gets messy; ACPI is there,
and PCI initialization can't set device_init_wakeup() because of conflicts
with how PPC initializes PCI.


> The Geode (and most other platforms, I presume) allows us to configure
> which wakeup events are actually allowed to wake the system.  Currently,
> we are permanently enabling the power button as a wakeup source, but I
> want to eventually be able to pick and chose from any of our main wakeup
> sources:
> 
> * Power button
> * RTC Alarm
> * LID event (GPIO26)
> * wake event from the EC (GPIO27) 

Yes ...


> Of the four, the only device that can actually be configured to do anything
> is the RTC alarm, and for that we would use the /sys/devices/../power/wakeup
> infrastructure, but we would still need something in place to allow the 
> software to tell the hardware to enable the RTC event to wake the system.

As in "echo enabled > /sys/devices/.../power/wakeup" (to get the default),
or "echo disabled > ..." to disable it.  For PCs, with ACPI, that involves
two patches I just posted to the RTC list (and CC'd Len on), and replacing
the ancient/legacy/ACPI-only /proc/acpi/alarm interface.

 
> I suppose we could just globally enable all sources, but that seems silly,
> seeing as though we do have very fine tuned control over the wake sources.
> I'm sure other platforms have this concern as well - what do they do?

Well, go look at the AT91 code and you'll see a fully worked example of
how the /sys/devices/.../power/wakeup files work for pretty much every
platform device (except the ethernet controller, where the driver doesn't
support any kind of WOL right now).

   * drivers/usb/host/ohci-at91.c ... remote wakeup supported, except
     in sleep states where the 48 MHz PLL is unavailable

   * drivers/usb/gadget/at91_udc.c ... similarly

   * drivers/pcmcia/at91_cf.c ... card detect GPIO or card IRQ can both
     be wakeup event sources

   * GRR, drivers/mmc/at91_mci.c seems to have dropped the wakeup GPIO
     updates, that *WAS WORKING* but someone discarded that code.

   * ... more, including UARTS

In general, not many platforms have general purpose wakeup event support
yet.  Lack of ACPI support -- and hence scarcity of models -- is a part
of it, but another part is project that stopped after they got their four
essential wakeup events to behave by hard-wiring the wake events in their
custom board-specific code.

For example:  in arch/arm/mach-pxa, grep for PWER (wakeup enable register).
There's a patch pending to teach PXA how enable_irq_wake() should work (by
updating PWER) -- an API that's been around for years! -- but until that
merges, wakeup events on every PXA system get hard-wired in *_pm.c files
that embed all kinds of limited-functionality grot.  (No way for USB to
wake those systems, as another example ... that code doesn't support any
of the sleep states from which it can issue wakeups.)

- Dave

  reply	other threads:[~2007-03-31 18:57 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-03-30 23:57 Power Mangement Interfaces Jordan Crouse
2007-03-31  0:18 ` Johannes Berg
2007-03-31  0:21   ` Johannes Berg
2007-03-31  4:33     ` [linux-pm] " Gopi P.M.
2007-03-31 15:20     ` Jordan Crouse
2007-03-31 16:12     ` David Brownell
2007-03-31 15:16   ` Jordan Crouse
2007-04-02  7:38     ` [linux-pm] " Pavel Machek
2007-03-31 16:57   ` David Brownell
2007-04-04 16:15     ` Johannes Berg
2007-04-04 18:44       ` David Brownell
2007-04-04 21:49         ` Johannes Berg
2007-04-05  5:05           ` David Brownell
2007-04-05  8:02             ` Johannes Berg
2007-04-05  8:32         ` Zhang Rui
2007-03-31 16:52 ` David Brownell
2007-03-31 18:16   ` Jordan Crouse
2007-03-31 18:57     ` David Brownell [this message]
2007-04-01  1:01       ` Jordan Crouse
2007-04-01  3:01         ` David Brownell
     [not found]         ` <200703312001.55231.david-b@pacbell.net>
2007-04-01 16:56           ` Jordan Crouse
     [not found]           ` <20070401165601.GA13389@cosmic.amd.com>
2007-04-02  0:28             ` David Brownell
     [not found]             ` <200704011728.10966.david-b@pacbell.net>
2007-04-02 16:55               ` Jordan Crouse
2007-06-19 17:00               ` Marcelo Tosatti
     [not found]               ` <20070619170048.GA342@dmt.media.mit.edu>
2007-06-19 19:17                 ` Jens Axboe
2007-06-19 19:41                 ` Woodruff, Richard
2007-06-21  1:30                 ` David Brownell
     [not found]                 ` <200706201830.52277.david-b@pacbell.net>
2007-07-08 22:10                   ` [PATCH] add powerbutton and lid platform devices Marcelo Tosatti
     [not found]                   ` <20070708221027.GA4964@dmt>
2007-07-09 15:05                     ` Jordan Crouse
     [not found]                     ` <20070709150545.GD31533@cosmic.amd.com>
2007-07-09 16:30                       ` David Brownell
     [not found]                       ` <200707090930.26973.david-b@pacbell.net>
2007-07-09 16:36                         ` Jordan Crouse
2007-07-16  8:51                         ` Richard Hughes
2007-07-16 17:11                       ` C. Scott Ananian
     [not found]               ` <20070402165511.GD5024@cosmic.amd.com>
2007-04-02 17:53                 ` Power Mangement Interfaces David Brownell
2007-07-08  3:46                 ` rtc-cmos not supporting RTC_AIE? Marcelo Tosatti
2007-07-08  3:49                 ` [PATCH] rtc-cmos: use cmos_rtc_board_info to determine wake_on callback Marcelo Tosatti
2007-07-08  3:55                 ` [PATCH] OLPC rtc-cmos support Marcelo Tosatti
     [not found]                 ` <20070708034953.GB19633@dmt>
2007-07-08  5:06                   ` [PATCH] rtc-cmos: use cmos_rtc_board_info to determine wake_on callback David Brownell
     [not found]                 ` <20070708035504.GC19633@dmt>
2007-07-08  5:13                   ` [PATCH] OLPC rtc-cmos support David Brownell
     [not found]                   ` <200707072213.41028.david-b@pacbell.net>
2007-07-08 18:40                     ` Marcelo Tosatti
     [not found]                     ` <20070708184035.GA20078@dmt>
2007-07-08 19:10                       ` David Brownell
     [not found]                       ` <200707081210.51145.david-b@pacbell.net>
2007-07-08 20:17                         ` Marcelo Tosatti
     [not found]                         ` <20070708201747.GA13115@dmt>
2007-07-08 20:47                           ` David Brownell
     [not found]                 ` <20070708034633.GA19633@dmt>
2007-07-08  5:26                   ` rtc-cmos not supporting RTC_AIE? David Brownell
     [not found]                   ` <200707072226.50069.david-b@pacbell.net>
2007-07-08 19:03                     ` Marcelo Tosatti
     [not found]                     ` <20070708190350.GB20078@dmt>
2007-07-08 19:17                       ` David Brownell
     [not found]                       ` <200707081217.53071.david-b@pacbell.net>
2007-07-08 19:31                         ` Richard Hughes
     [not found]                         ` <1183923098.2814.8.camel@work>
2007-07-08 20:15                           ` Hibernate after alarm wakes from STR David Brownell
     [not found]                           ` <200707081315.40560.david-b@pacbell.net>
2007-07-08 22:31                             ` Marcelo Tosatti
     [not found]                             ` <20070708223121.GB4964@dmt>
2007-07-09  2:44                               ` David Brownell
     [not found]                               ` <200707081944.04598.david-b@pacbell.net>
2007-07-09  8:34                                 ` Richard Hughes
2007-07-09 15:40                                 ` Marcelo Tosatti
     [not found]                                 ` <20070709154014.GF27828@dmt>
2007-07-09 16:26                                   ` David Brownell
     [not found]                                   ` <200707090926.32826.david-b@pacbell.net>
2007-07-10  2:45                                     ` Nigel Cunningham
     [not found]                                     ` <200707101245.31449.nigel@nigel.suspend2.net>
2007-07-10 16:51                                       ` David Brownell
     [not found]                                       ` <200707100951.04193.david-b@pacbell.net>
2007-07-10 22:16                                         ` Nigel Cunningham
     [not found]                                         ` <200707110816.42114.nigel@nigel.suspend2.net>
2007-07-11  0:45                                           ` Matthew Garrett
     [not found]                                           ` <20070711004549.GA30249@srcf.ucam.org>
2007-07-11  0:53                                             ` Nigel Cunningham
     [not found]                                             ` <200707111053.36590.nigel@nigel.suspend2.net>
2007-07-11  1:23                                               ` Matthew Garrett
     [not found]                                               ` <20070711012301.GA30596@srcf.ucam.org>
2007-07-11  1:39                                                 ` Nigel Cunningham
     [not found]                                                 ` <200707111139.38667.nigel@nigel.suspend2.net>
2007-07-11  1:59                                                   ` Matthew Garrett
     [not found]                                                   ` <20070711015948.GA30659@srcf.ucam.org>
2007-07-11  3:14                                                     ` Nigel Cunningham
     [not found]                                                     ` <200707111314.04221.nigel@nigel.suspend2.net>
2007-07-11 10:09                                                       ` Rafael J. Wysocki
     [not found]                                                       ` <200707111209.05163.rjw@sisk.pl>
2007-07-11 10:14                                                         ` Nigel Cunningham
     [not found]                                                         ` <200707112014.28958.nigel@nigel.suspend2.net>
2007-07-11 10:31                                                           ` Rafael J. Wysocki
2007-07-11 16:04                                           ` David Brownell
     [not found]                                           ` <200707110904.33696.david-b@pacbell.net>
2007-07-11 22:48                                             ` Nigel Cunningham
     [not found]           ` <1175509422.5321.37.camel@localhost.localdomain>
2007-04-02 18:24             ` Power Mangement Interfaces David Brownell
     [not found]             ` <200704021124.21926.david-b@pacbell.net>
2007-04-02 19:40               ` Matthew Garrett
     [not found]               ` <20070402194039.GA8044@srcf.ucam.org>
2007-04-02 21:31                 ` David Brownell
2007-04-05  8:20               ` Zhang Rui
2007-04-02 10:07       ` Zhang Rui
2007-03-31 19:14     ` Jim Gettys
2007-04-02  9:36 ` Zhang Rui

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200703311157.03975.david-b@pacbell.net \
    --to=david-b@pacbell.net \
    --cc=devel@laptop.org \
    --cc=jordan.crouse@amd.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-pm@lists.linux-foundation.org \
    --cc=linux-pm@lists.osdl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox