From: Scott Wood <scottwood@freescale•com>
To: Kumar Gala <galak@kernel•crashing.org>
Cc: Wood Scott-B07421 <b07421@freescale•com>,
linux-pm@vger•kernel.org,
Wang Dongsheng <dongsheng.wds@gmail•com>,
Wang Dongsheng <dongsheng.wang@freescale•com>,
"linuxppc-dev@lists•ozlabs.org list"
<linuxppc-dev@lists•ozlabs.org>
Subject: Re: [RFC PATCH] powerpc/fsl: add timer wakeup source
Date: Wed, 3 Oct 2012 17:20:07 -0500 [thread overview]
Message-ID: <1349302807.31013.20@snotra> (raw)
In-Reply-To: <6170650E-9D3C-4686-BF13-6C41DBFFB79D@kernel.crashing.org> (from galak@kernel.crashing.org on Wed Oct 3 08:35:58 2012)
On 10/03/2012 08:35:58 AM, Kumar Gala wrote:
>=20
> On Oct 3, 2012, at 5:42 AM, Wang Dongsheng wrote:
>=20
> > This is only for freescale powerpc platform. The driver provides a =20
> way
> > to wake up system. Proc =20
> interface(/proc/powerpc/wakeup_timer_seconds).
> >
> > eg: "echo 5 > /proc/powerpc/wakeup_timer_seconds", 5 seconds
> > after the system will be woken up. echo another time into proc =20
> interface
> > to update the time.
> >
> > Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale•com>
> > Signed-off-by: Li Yang <leoli@freescale•com>
> > ---
> > arch/powerpc/platforms/Kconfig | 23 +++
> > arch/powerpc/platforms/Makefile | 1 +
> > arch/powerpc/platforms/fsl_timer_wakeup.c | 217 =20
> +++++++++++++++++++++++++++++
> > 3 files changed, 241 insertions(+)
> > create mode 100644 arch/powerpc/platforms/fsl_timer_wakeup.c
>=20
> Adding the Linux PM list to see if there is some existing support for =20
> this on other arch's in kernel.
>=20
> I'm pretty sure /proc/ is NOT where we want this exposed.
Should probably go under the sysfs directory of the mpic device. Or =20
better, make a generic interface for timer-based suspend wakeup (if =20
there isn't one already). This current approach sits in an unpleasant =20
middle ground between generic and device-specific.
> > diff --git a/arch/powerpc/platforms/Kconfig =20
> b/arch/powerpc/platforms/Kconfig
> > index b190a6e..7b9232a 100644
> > --- a/arch/powerpc/platforms/Kconfig
> > +++ b/arch/powerpc/platforms/Kconfig
> > @@ -99,6 +99,29 @@ config MPIC_TIMER
> > only tested on fsl chip, but it can potentially support
> > other global timers complying to Open-PIC standard.
> >
> > +menuconfig FSL_WAKEUP_SOURCE
> > + bool "Freescale wakeup source"
> > + depends on FSL_SOC && SUSPEND
> > + default n
> > + help
> > + This option enables wakeup source for wake up system
> > + features. This is only for freescale powerpc platform.
> > +
> > +if FSL_WAKEUP_SOURCE
> > +
> > +config FSL_TIMER_WAKEUP
> > + tristate "Freescale mpic global timer wakeup event"
> > + default n
> > + help
> > + This is only for freescale powerpc platform. The driver
> > + provides a way to wake up system.
> > + Proc interface(/proc/powerpc/wakeup_timer_seconds).
> > + eg: "echo 5 > /proc/powerpc/wakeup_timer_seconds",
> > + 5 seconds after the system will be woken up. echo another
> > + time into proc interface to update the time.
> > +
> > +endif
Use depends rather than if/else. Why do you need FSL_WAKEUP_SOURCE?
These names are overly broad -- this is only for FSL MPIC, not for =20
other FSL chips (e.g. mpc83xx has a different global timer =20
implementation, and there's FSL ARM chips, etc).
> > +static ssize_t timer_wakeup_write(struct file *file, const char =20
> __user *buf,
> > + size_t count, loff_t *off)
> > +{
> > + struct fsl_timer_wakeup *priv;
> > + struct inode *inode =3D file->f_path.dentry->d_inode;
> > + struct proc_dir_entry *dp;
> > + struct timeval time;
> > + char *kbuf;
> > +
> > + dp =3D PDE(inode);
> > + priv =3D dp->data;
> > +
> > + kbuf =3D kzalloc(count + 1, GFP_KERNEL);
> > + if (!kbuf)
> > + return -ENOMEM;
> > +
> > + if (copy_from_user(kbuf, buf, count)) {
> > + kfree(kbuf);
> > + return -EFAULT;
> > + }
> > +
> > + kbuf[count] =3D '\0';
> > +
> > + if (kstrtol(kbuf, 0, &time.tv_sec)) {
> > + kfree(kbuf);
> > + return -EINVAL;
> > + }
> > +
> > + kfree(kbuf);
> > +
> > + time.tv_usec =3D 0;
> > +
> > + mutex_lock(&priv->mutex);
> > +
> > + if (!time.tv_sec) {
> > + if (priv->timer) {
> > + mpic_free_timer(priv->timer);
> > + priv->timer =3D NULL;
> > + }
> > + mutex_unlock(&priv->mutex);
> > +
> > + return count;
> > + }
> > +
> > + if (priv->timer) {
> > + mpic_free_timer(priv->timer);
> > + priv->timer =3D NULL;
> > + }
> > +
> > + priv->timer =3D mpic_request_timer(timer_event_interrupt, priv, =20
> &time);
If the new time is zero, consider that a cancellation of the timer and =20
don't request a new one or return -EINVAL.
-Scott=
next prev parent reply other threads:[~2012-10-03 22:20 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-10-03 10:42 [RFC PATCH] powerpc/fsl: add timer wakeup source Wang Dongsheng
2012-10-03 13:35 ` Kumar Gala
2012-10-03 22:20 ` Scott Wood [this message]
2012-10-08 7:13 ` Wang Dongsheng-B40534
2012-10-08 20:55 ` Scott Wood
2012-10-09 13:56 ` 答复: " Wang Dongsheng-B40534
2012-10-09 18:18 ` Scott Wood
2012-12-13 15:51 ` Tabi Timur-B04825
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=1349302807.31013.20@snotra \
--to=scottwood@freescale$(echo .)com \
--cc=b07421@freescale$(echo .)com \
--cc=dongsheng.wang@freescale$(echo .)com \
--cc=dongsheng.wds@gmail$(echo .)com \
--cc=galak@kernel$(echo .)crashing.org \
--cc=linux-pm@vger$(echo .)kernel.org \
--cc=linuxppc-dev@lists$(echo .)ozlabs.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
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