Message ID | 1398319908-30166-1-git-send-email-dongsheng.wang@freescale.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
On Thu, 2014-04-24 at 14:11 +0800, Dongsheng Wang wrote: > From: Wang Dongsheng <dongsheng.wang@freescale.com> > > Add set_pm_suspend_state & pm_suspend_state functions to set/get > suspend state. When system going to sleep or deep sleep, devices > can get the system suspend state(STANDBY/MEM) through pm_suspend_state > function and to handle different situations. > > Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com> > --- > *v2* > Move pm api from fsl platform to powerpc general framework. What is powerpc-specific about this? -Scott
On Sat, Apr 26, 2014 at 5:45 AM, Scott Wood <scottwood@freescale.com> wrote: > On Thu, 2014-04-24 at 14:11 +0800, Dongsheng Wang wrote: >> From: Wang Dongsheng <dongsheng.wang@freescale.com> >> >> Add set_pm_suspend_state & pm_suspend_state functions to set/get >> suspend state. When system going to sleep or deep sleep, devices >> can get the system suspend state(STANDBY/MEM) through pm_suspend_state >> function and to handle different situations. >> >> Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com> >> --- >> *v2* >> Move pm api from fsl platform to powerpc general framework. > > What is powerpc-specific about this? Generally I agree with you. But I had the discussion about this topic a while ago with the PM maintainer. He suggestion to go with the platform way. https://lkml.org/lkml/2013/8/16/505 Regards, Leo
On Mon, 2014-04-28 at 13:53 +0800, Leo Li wrote: > On Sat, Apr 26, 2014 at 5:45 AM, Scott Wood <scottwood@freescale.com> wrote: > > On Thu, 2014-04-24 at 14:11 +0800, Dongsheng Wang wrote: > >> From: Wang Dongsheng <dongsheng.wang@freescale.com> > >> > >> Add set_pm_suspend_state & pm_suspend_state functions to set/get > >> suspend state. When system going to sleep or deep sleep, devices > >> can get the system suspend state(STANDBY/MEM) through pm_suspend_state > >> function and to handle different situations. > >> > >> Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com> > >> --- > >> *v2* > >> Move pm api from fsl platform to powerpc general framework. > > > > What is powerpc-specific about this? > > Generally I agree with you. But I had the discussion about this topic > a while ago with the PM maintainer. He suggestion to go with the > platform way. > > https://lkml.org/lkml/2013/8/16/505 If what he meant was whether you could do what this patch does, then you can answer him with, "No, because it got nacked as not being platform or arch specific." Oh, and you're still using .valid as the hook to set the platform state, which is awful -- I think .begin is what you want to use. If we did it in powerpc code, then what would we do on ARM? Copy the code? No. Now, a more legitimate objection to putting it in generic code might be that "standby" and "mem" are loosely defined and the knowledge of how a driver should react to each is platform specific -- but your patch doesn't address that. You still have the driver itself interpret what "standby" and "mem" mean. As for "in analogy with ACPI suspend operations", can someone familiar with ACPI explain what is meant? -Scott
On Tuesday, April 29, 2014 05:47:12 PM Scott Wood wrote: > On Mon, 2014-04-28 at 13:53 +0800, Leo Li wrote: > > On Sat, Apr 26, 2014 at 5:45 AM, Scott Wood <scottwood@freescale.com> wrote: > > > On Thu, 2014-04-24 at 14:11 +0800, Dongsheng Wang wrote: > > >> From: Wang Dongsheng <dongsheng.wang@freescale.com> > > >> > > >> Add set_pm_suspend_state & pm_suspend_state functions to set/get > > >> suspend state. When system going to sleep or deep sleep, devices > > >> can get the system suspend state(STANDBY/MEM) through pm_suspend_state > > >> function and to handle different situations. > > >> > > >> Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com> > > >> --- > > >> *v2* > > >> Move pm api from fsl platform to powerpc general framework. > > > > > > What is powerpc-specific about this? > > > > Generally I agree with you. But I had the discussion about this topic > > a while ago with the PM maintainer. He suggestion to go with the > > platform way. > > > > https://lkml.org/lkml/2013/8/16/505 > > If what he meant was whether you could do what this patch does, then you > can answer him with, "No, because it got nacked as not being platform or > arch specific." Oh, and you're still using .valid as the hook to set > the platform state, which is awful -- I think .begin is what you want to > use. > > If we did it in powerpc code, then what would we do on ARM? Copy the > code? No. > > Now, a more legitimate objection to putting it in generic code might be > that "standby" and "mem" are loosely defined and the knowledge of how a > driver should react to each is platform specific -- but your patch > doesn't address that. You still have the driver itself interpret what > "standby" and "mem" mean. > > As for "in analogy with ACPI suspend operations", can someone familiar > with ACPI explain what is meant? ACPI defines sleep states S3 and S1 which are mappend to "mem" and "standby" currently, but that may change in the future. Generally speaking the meaning of "mem" and "standby" is platform-specific except that "mem" should be a deeper (lower-power) sleep state than "standby". Thanks!
On Wed, Apr 30, 2014 at 6:47 AM, Scott Wood <scottwood@freescale.com> wrote: > On Mon, 2014-04-28 at 13:53 +0800, Leo Li wrote: >> On Sat, Apr 26, 2014 at 5:45 AM, Scott Wood <scottwood@freescale.com> wrote: >> > On Thu, 2014-04-24 at 14:11 +0800, Dongsheng Wang wrote: >> >> From: Wang Dongsheng <dongsheng.wang@freescale.com> >> >> >> >> Add set_pm_suspend_state & pm_suspend_state functions to set/get >> >> suspend state. When system going to sleep or deep sleep, devices >> >> can get the system suspend state(STANDBY/MEM) through pm_suspend_state >> >> function and to handle different situations. >> >> >> >> Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com> >> >> --- >> >> *v2* >> >> Move pm api from fsl platform to powerpc general framework. >> > >> > What is powerpc-specific about this? >> >> Generally I agree with you. But I had the discussion about this topic >> a while ago with the PM maintainer. He suggestion to go with the >> platform way. >> >> https://lkml.org/lkml/2013/8/16/505 > > If what he meant was whether you could do what this patch does, then you > can answer him with, "No, because it got nacked as not being platform or > arch specific." Oh, and you're still using .valid as the hook to set > the platform state, which is awful -- I think .begin is what you want to > use. I'm not saying the current patch is good for upstream. Actually I did say that the patch need to be updated for upstream purpose. I only meant that we discussed about having the mem/standby passed by generic kernel/power interface as you suggested internally and got an negative feedback. > > If we did it in powerpc code, then what would we do on ARM? Copy the > code? No. If you are saying that this shouldn't be done in arch/powerpc Yes. We have determined to use drivers/platform folder for the re-used code with ARM. Platform power management code will be moved there. > > Now, a more legitimate objection to putting it in generic code might be > that "standby" and "mem" are loosely defined and the knowledge of how a > driver should react to each is platform specific -- but your patch > doesn't address that. You still have the driver itself interpret what > "standby" and "mem" mean. > Yup, we will address it in next batch. - Leo
On Fri, 2014-05-09 at 17:33 +0800, Li Yang wrote: > On Wed, Apr 30, 2014 at 6:47 AM, Scott Wood <scottwood@freescale.com> wrote: > > On Mon, 2014-04-28 at 13:53 +0800, Leo Li wrote: > >> On Sat, Apr 26, 2014 at 5:45 AM, Scott Wood <scottwood@freescale.com> wrote: > >> > On Thu, 2014-04-24 at 14:11 +0800, Dongsheng Wang wrote: > >> >> From: Wang Dongsheng <dongsheng.wang@freescale.com> > >> >> > >> >> Add set_pm_suspend_state & pm_suspend_state functions to set/get > >> >> suspend state. When system going to sleep or deep sleep, devices > >> >> can get the system suspend state(STANDBY/MEM) through pm_suspend_state > >> >> function and to handle different situations. > >> >> > >> >> Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com> > >> >> --- > >> >> *v2* > >> >> Move pm api from fsl platform to powerpc general framework. > >> > > >> > What is powerpc-specific about this? > >> > >> Generally I agree with you. But I had the discussion about this topic > >> a while ago with the PM maintainer. He suggestion to go with the > >> platform way. > >> > >> https://lkml.org/lkml/2013/8/16/505 > > > > If what he meant was whether you could do what this patch does, then you > > can answer him with, "No, because it got nacked as not being platform or > > arch specific." Oh, and you're still using .valid as the hook to set > > the platform state, which is awful -- I think .begin is what you want to > > use. > > I'm not saying the current patch is good for upstream. Actually I did > say that the patch need to be updated for upstream purpose. I don't follow -- this thread is an upstream submission. > > Now, a more legitimate objection to putting it in generic code might be > > that "standby" and "mem" are loosely defined and the knowledge of how a > > driver should react to each is platform specific -- but your patch > > doesn't address that. You still have the driver itself interpret what > > "standby" and "mem" mean. > > > > Yup, we will address it in next batch. Thanks. -Scott
On Sat, May 10, 2014 at 1:09 AM, Scott Wood <scottwood@freescale.com> wrote: > On Fri, 2014-05-09 at 17:33 +0800, Li Yang wrote: >> On Wed, Apr 30, 2014 at 6:47 AM, Scott Wood <scottwood@freescale.com> wrote: >> > On Mon, 2014-04-28 at 13:53 +0800, Leo Li wrote: >> >> On Sat, Apr 26, 2014 at 5:45 AM, Scott Wood <scottwood@freescale.com> wrote: >> >> > On Thu, 2014-04-24 at 14:11 +0800, Dongsheng Wang wrote: >> >> >> From: Wang Dongsheng <dongsheng.wang@freescale.com> >> >> >> >> >> >> Add set_pm_suspend_state & pm_suspend_state functions to set/get >> >> >> suspend state. When system going to sleep or deep sleep, devices >> >> >> can get the system suspend state(STANDBY/MEM) through pm_suspend_state >> >> >> function and to handle different situations. >> >> >> >> >> >> Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com> >> >> >> --- >> >> >> *v2* >> >> >> Move pm api from fsl platform to powerpc general framework. >> >> > >> >> > What is powerpc-specific about this? >> >> >> >> Generally I agree with you. But I had the discussion about this topic >> >> a while ago with the PM maintainer. He suggestion to go with the >> >> platform way. >> >> >> >> https://lkml.org/lkml/2013/8/16/505 >> > >> > If what he meant was whether you could do what this patch does, then you >> > can answer him with, "No, because it got nacked as not being platform or >> > arch specific." Oh, and you're still using .valid as the hook to set >> > the platform state, which is awful -- I think .begin is what you want to >> > use. >> >> I'm not saying the current patch is good for upstream. Actually I did >> say that the patch need to be updated for upstream purpose. > > I don't follow -- this thread is an upstream submission. Thought you were suggesting to change the generic PM interface for this as discussed internally. So I was just providing the information about previous discussion. Nothing more. Regards, Leo
diff --git a/arch/powerpc/include/asm/pm.h b/arch/powerpc/include/asm/pm.h new file mode 100644 index 0000000..00ddbf1 --- /dev/null +++ b/arch/powerpc/include/asm/pm.h @@ -0,0 +1,26 @@ +/* + * asm/pm.h + * + * Definitions for any platform related flags or structures for + * Power Management. + * + * Author: Wang Dongsheng <dongsheng.wang@freescale.com> + * + * Copyright 2014 Freescale Semiconductor, Inc + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ + +#ifndef _POWERPC_PM_H_ +#define _POWERPC_PM_H_ +#ifdef __KERNEL__ +#include <linux/suspend.h> + +extern void set_pm_suspend_state(suspend_state_t state); +extern suspend_state_t pm_suspend_state(void); + +#endif /* __KERNEL__ */ +#endif /* _POWERPC_PM_H_ */ diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile index fcc9a89..2060145 100644 --- a/arch/powerpc/kernel/Makefile +++ b/arch/powerpc/kernel/Makefile @@ -28,7 +28,7 @@ endif obj-y := cputable.o ptrace.o syscalls.o \ irq.o align.o signal_32.o pmc.o vdso.o \ - process.o systbl.o idle.o \ + process.o systbl.o idle.o pm.o \ signal.o sysfs.o cacheinfo.o time.o \ prom.o traps.o setup-common.o \ udbg.o misc.o io.o dma.o \ diff --git a/arch/powerpc/kernel/pm.c b/arch/powerpc/kernel/pm.c new file mode 100644 index 0000000..23d3c94 --- /dev/null +++ b/arch/powerpc/kernel/pm.c @@ -0,0 +1,26 @@ +/* + * PowerPC General Power Management Implementation + * + * Copyright 2014 Freescale Semiconductor, Inc. + * Author: Wang Dongsheng <dongsheng.wang@freescale.com> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ + +#include <linux/suspend.h> +#include <asm/pm.h> + +static suspend_state_t pm_state; + +void set_pm_suspend_state(suspend_state_t state) +{ + pm_state = state; +} + +suspend_state_t pm_suspend_state(void) +{ + return pm_state; +} diff --git a/arch/powerpc/sysdev/fsl_pmc.c b/arch/powerpc/sysdev/fsl_pmc.c index 8cf4aa0..fd777ca 100644 --- a/arch/powerpc/sysdev/fsl_pmc.c +++ b/arch/powerpc/sysdev/fsl_pmc.c @@ -21,6 +21,8 @@ #include <linux/of_address.h> #include <linux/of_platform.h> +#include <asm/pm.h> + struct pmc_regs { __be32 devdisr; __be32 devdisr2; @@ -52,12 +54,20 @@ static int pmc_suspend_valid(suspend_state_t state) { if (state != PM_SUSPEND_STANDBY) return 0; + + set_pm_suspend_state(state); return 1; } +static void pmc_suspend_end(void) +{ + set_pm_suspend_state(PM_SUSPEND_ON); +} + static const struct platform_suspend_ops pmc_suspend_ops = { .valid = pmc_suspend_valid, .enter = pmc_suspend_enter, + .end = pmc_suspend_end, }; static int pmc_probe(struct platform_device *ofdev) @@ -68,6 +78,7 @@ static int pmc_probe(struct platform_device *ofdev) pmc_dev = &ofdev->dev; suspend_set_ops(&pmc_suspend_ops); + set_pm_suspend_state(PM_SUSPEND_ON); return 0; }