diff for duplicates of <1375213104.30721.79@snotra> diff --git a/a/1.txt b/N1/1.txt index c0ab835..ceb7bf4 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -1,23 +1,23 @@ On 07/30/2013 02:00:03 AM, Dongsheng Wang wrote: > From: Wang Dongsheng <dongsheng.wang@freescale.com> -> +>=20 > Add cpuidle support for e500 family, using cpuidle framework to > manage various low power modes. The new implementation will remain > compatible with original idle method. -> +>=20 > Initially, this supports PW10, and subsequent patches will support > PW20/DOZE/NAP. -Could you explain what the cpuidle framework does for us that the +Could you explain what the cpuidle framework does for us that the =20 current idle code doesn't? -In particular, what scenario do you see where we would require a +In particular, what scenario do you see where we would require a =20 software governor to choose between idle states, and how much power is saved compared to a simpler approach? There is timer that can be used to automatically enter PW20 after a certain amount of time in PW10. How -much better results do you get from a software governor? Do we even +much better results do you get from a software governor? Do we even =20 have the right data to characterize each state so that a software governor could make good decisions? Is cpuidle capable of governing the interval @@ -26,24 +26,24 @@ of such a timer, rather than directly governing states? As for doze/nap, why would we want to use those on newer cores? Do you have numbers for how much power each mode saves? -Active governors may be useful on older cores that only have doze/nap, +Active governors may be useful on older cores that only have doze/nap, =20 to -select between them, but if that's the use case then why start with +select between them, but if that's the use case then why start with =20 pw10? And I'd want to see numbers for how much power nap saves versus doze. > Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com> > --- -> This patch keep using cpuidle_register_device(), because we need to +> This patch keep using cpuidle_register_device(), because we need to =20 > support cpu > hotplug. I will fix "device" issue in this driver, after -> Deepthi Dharwar <deepthi@linux.vnet.ibm.com> add a hotplug handler +> Deepthi Dharwar <deepthi@linux.vnet.ibm.com> add a hotplug handler =20 > into cpuidle > freamwork. Where's the diffstat? -> diff --git a/arch/powerpc/include/asm/machdep.h +> diff --git a/arch/powerpc/include/asm/machdep.h =20 > b/arch/powerpc/include/asm/machdep.h > index 8b48090..cbdbe25 100644 > --- a/arch/powerpc/include/asm/machdep.h @@ -51,7 +51,7 @@ Where's the diffstat? > @@ -271,6 +271,16 @@ extern void power7_idle(void); > extern void ppc6xx_idle(void); > extern void book3e_idle(void); -> +>=20 > +/* Wait for Interrupt */ > +static inline void fsl_cpuidle_wait(void) > +{ @@ -66,9 +66,9 @@ Where is this used? > + > /* -> * ppc_md contains a copy of the machine description structure for +> * ppc_md contains a copy of the machine description structure for =20 > the -> * current platform. machine_id contains the initial address where +> * current platform. machine_id contains the initial address where =20 > the > diff --git a/drivers/cpuidle/Kconfig b/drivers/cpuidle/Kconfig > index b3fb81d..7ed114b 100644 @@ -77,13 +77,13 @@ Where is this used? > @@ -35,6 +35,11 @@ depends on ARM > source "drivers/cpuidle/Kconfig.arm" > endmenu -> +>=20 > +menu "PowerPC CPU Idle Drivers" > +depends on PPC32 || PPC64 depends on PPC -> diff --git a/drivers/cpuidle/Kconfig.powerpc +> diff --git a/drivers/cpuidle/Kconfig.powerpc =20 > b/drivers/cpuidle/Kconfig.powerpc > new file mode 100644 > index 0000000..9f3f5ef @@ -106,16 +106,17 @@ FSL_SOC_BOOKE is more than just e500 > index 0b9d200..0dde3db 100644 > --- a/drivers/cpuidle/Makefile > +++ b/drivers/cpuidle/Makefile -> @@ -11,3 +11,7 @@ obj-$(CONFIG_ARM_HIGHBANK_CPUIDLE) += +> @@ -11,3 +11,7 @@ obj-$(CONFIG_ARM_HIGHBANK_CPUIDLE) +=3D =20 > cpuidle-calxeda.o -> obj-$(CONFIG_ARM_KIRKWOOD_CPUIDLE) += cpuidle-kirkwood.o -> obj-$(CONFIG_ARM_ZYNQ_CPUIDLE) += cpuidle-zynq.o -> obj-$(CONFIG_ARM_U8500_CPUIDLE) += cpuidle-ux500.o +> obj-$(CONFIG_ARM_KIRKWOOD_CPUIDLE) +=3D cpuidle-kirkwood.o +> obj-$(CONFIG_ARM_ZYNQ_CPUIDLE) +=3D cpuidle-zynq.o +> obj-$(CONFIG_ARM_U8500_CPUIDLE) +=3D cpuidle-ux500.o > + -> +################################################################################## +> +########################################################################= +########## > +# PowerPC platform drivers -> +obj-$(CONFIG_PPC_E500_CPUIDLE) += cpuidle-e500.o -> diff --git a/drivers/cpuidle/cpuidle-e500.c +> +obj-$(CONFIG_PPC_E500_CPUIDLE) +=3D cpuidle-e500.o +> diff --git a/drivers/cpuidle/cpuidle-e500.c =20 > b/drivers/cpuidle/cpuidle-e500.c > new file mode 100644 > index 0000000..1919cea @@ -127,7 +128,7 @@ FSL_SOC_BOOKE is more than just e500 > + * > + * CPU Idle driver for Freescale PowerPC e500 family processors. > + * -> + * This program is free software; you can redistribute it and/or +> + * This program is free software; you can redistribute it and/or =20 > modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. @@ -147,9 +148,9 @@ attribution? > + > +#include <asm/machdep.h> > + -> +static struct cpuidle_driver e500_idle_driver = { -> + .name = "e500_idle", -> + .owner = THIS_MODULE, +> +static struct cpuidle_driver e500_idle_driver =3D { +> + .name =3D "e500_idle", +> + .owner =3D THIS_MODULE, > +}; > + > +static struct cpuidle_device __percpu *e500_cpuidle_devices; @@ -171,33 +172,33 @@ attribution? This HMT stuff doesn't do anything on e500 derivatives AFAIK. -> +static struct cpuidle_state fsl_pw_idle_states[] = { +> +static struct cpuidle_state fsl_pw_idle_states[] =3D { > + { -> + .name = "pw10", -> + .desc = "pw10", -> + .flags = CPUIDLE_FLAG_TIME_VALID, -> + .exit_latency = 0, -> + .target_residency = 0, -> + .enter = &pw10_enter +> + .name =3D "pw10", +> + .desc =3D "pw10", +> + .flags =3D CPUIDLE_FLAG_TIME_VALID, +> + .exit_latency =3D 0, +> + .target_residency =3D 0, +> + .enter =3D &pw10_enter Where is pw10_enter defined? > +static int cpu_is_feature(unsigned long feature) > +{ -> + return (cur_cpu_spec->cpu_features == feature); +> + return (cur_cpu_spec->cpu_features =3D=3D feature); > +} > + > +static int __init e500_idle_init(void) > +{ -> + struct cpuidle_state *cpuidle_state_table = NULL; -> + struct cpuidle_driver *drv = &e500_idle_driver; +> + struct cpuidle_state *cpuidle_state_table =3D NULL; +> + struct cpuidle_driver *drv =3D &e500_idle_driver; > + int err; -> + unsigned int max_idle_state = 0; +> + unsigned int max_idle_state =3D 0; > + -> + if (cpuidle_disable != IDLE_NO_OVERRIDE) +> + if (cpuidle_disable !=3D IDLE_NO_OVERRIDE) > + return -ENODEV; > + -> + if (cpu_is_feature(CPU_FTRS_E500MC) || +> + if (cpu_is_feature(CPU_FTRS_E500MC) || =20 > cpu_is_feature(CPU_FTRS_E5500) || > + cpu_is_feature(CPU_FTRS_E6500)) { @@ -206,8 +207,8 @@ exact same CPU. What specific feature are you looking for here? -> + cpuidle_state_table = fsl_pw_idle_states; -> + max_idle_state = ARRAY_SIZE(fsl_pw_idle_states); +> + cpuidle_state_table =3D fsl_pw_idle_states; +> + max_idle_state =3D ARRAY_SIZE(fsl_pw_idle_states); > + } > + > + if (!cpuidle_state_table || !max_idle_state) @@ -215,4 +216,4 @@ What specific feature are you looking for here? ENODEV? --Scott +-Scott= diff --git a/a/content_digest b/N1/content_digest index 0439961..0cf704b 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -3,35 +3,33 @@ "Subject\0Re: [PATCH] cpuidle: add freescale e500 family porcessors idle support\0" "Date\0Tue, 30 Jul 2013 14:38:24 -0500\0" "To\0Dongsheng Wang <dongsheng.wang@freescale.com>\0" - "Cc\0rjw@sisk.pl" - daniel.lezcano@linaro.org - benh@kernel.crashing.org - leoli@freescale.com - chenhui.zhao@freescale.com + "Cc\0chenhui.zhao@freescale.com" linux-pm@vger.kernel.org + daniel.lezcano@linaro.org + rjw@sisk.pl " linuxppc-dev@lists.ozlabs.org\0" "\00:1\0" "b\0" "On 07/30/2013 02:00:03 AM, Dongsheng Wang wrote:\n" "> From: Wang Dongsheng <dongsheng.wang@freescale.com>\n" - "> \n" + ">=20\n" "> Add cpuidle support for e500 family, using cpuidle framework to\n" "> manage various low power modes. The new implementation will remain\n" "> compatible with original idle method.\n" - "> \n" + ">=20\n" "> Initially, this supports PW10, and subsequent patches will support\n" "> PW20/DOZE/NAP.\n" "\n" - "Could you explain what the cpuidle framework does for us that the \n" + "Could you explain what the cpuidle framework does for us that the =20\n" "current\n" "idle code doesn't?\n" "\n" - "In particular, what scenario do you see where we would require a \n" + "In particular, what scenario do you see where we would require a =20\n" "software\n" "governor to choose between idle states, and how much power is saved\n" "compared to a simpler approach? There is timer that can be used to\n" "automatically enter PW20 after a certain amount of time in PW10. How\n" - "much better results do you get from a software governor? Do we even \n" + "much better results do you get from a software governor? Do we even =20\n" "have\n" "the right data to characterize each state so that a software governor\n" "could make good decisions? Is cpuidle capable of governing the interval\n" @@ -40,24 +38,24 @@ "As for doze/nap, why would we want to use those on newer cores? Do you\n" "have numbers for how much power each mode saves?\n" "\n" - "Active governors may be useful on older cores that only have doze/nap, \n" + "Active governors may be useful on older cores that only have doze/nap, =20\n" "to\n" - "select between them, but if that's the use case then why start with \n" + "select between them, but if that's the use case then why start with =20\n" "pw10?\n" "And I'd want to see numbers for how much power nap saves versus doze.\n" "\n" "> Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>\n" "> ---\n" - "> This patch keep using cpuidle_register_device(), because we need to \n" + "> This patch keep using cpuidle_register_device(), because we need to =20\n" "> support cpu\n" "> hotplug. I will fix \"device\" issue in this driver, after\n" - "> Deepthi Dharwar <deepthi@linux.vnet.ibm.com> add a hotplug handler \n" + "> Deepthi Dharwar <deepthi@linux.vnet.ibm.com> add a hotplug handler =20\n" "> into cpuidle\n" "> freamwork.\n" "\n" "Where's the diffstat?\n" "\n" - "> diff --git a/arch/powerpc/include/asm/machdep.h \n" + "> diff --git a/arch/powerpc/include/asm/machdep.h =20\n" "> b/arch/powerpc/include/asm/machdep.h\n" "> index 8b48090..cbdbe25 100644\n" "> --- a/arch/powerpc/include/asm/machdep.h\n" @@ -65,7 +63,7 @@ "> @@ -271,6 +271,16 @@ extern void power7_idle(void);\n" "> extern void ppc6xx_idle(void);\n" "> extern void book3e_idle(void);\n" - "> \n" + ">=20\n" "> +/* Wait for Interrupt */\n" "> +static inline void fsl_cpuidle_wait(void)\n" "> +{\n" @@ -80,9 +78,9 @@ "\n" "> +\n" "> /*\n" - "> * ppc_md contains a copy of the machine description structure for \n" + "> * ppc_md contains a copy of the machine description structure for =20\n" "> the\n" - "> * current platform. machine_id contains the initial address where \n" + "> * current platform. machine_id contains the initial address where =20\n" "> the\n" "> diff --git a/drivers/cpuidle/Kconfig b/drivers/cpuidle/Kconfig\n" "> index b3fb81d..7ed114b 100644\n" @@ -91,13 +89,13 @@ "> @@ -35,6 +35,11 @@ depends on ARM\n" "> source \"drivers/cpuidle/Kconfig.arm\"\n" "> endmenu\n" - "> \n" + ">=20\n" "> +menu \"PowerPC CPU Idle Drivers\"\n" "> +depends on PPC32 || PPC64\n" "\n" "depends on PPC\n" "\n" - "> diff --git a/drivers/cpuidle/Kconfig.powerpc \n" + "> diff --git a/drivers/cpuidle/Kconfig.powerpc =20\n" "> b/drivers/cpuidle/Kconfig.powerpc\n" "> new file mode 100644\n" "> index 0000000..9f3f5ef\n" @@ -120,16 +118,17 @@ "> index 0b9d200..0dde3db 100644\n" "> --- a/drivers/cpuidle/Makefile\n" "> +++ b/drivers/cpuidle/Makefile\n" - "> @@ -11,3 +11,7 @@ obj-$(CONFIG_ARM_HIGHBANK_CPUIDLE)\t+= \n" + "> @@ -11,3 +11,7 @@ obj-$(CONFIG_ARM_HIGHBANK_CPUIDLE)\t+=3D =20\n" "> cpuidle-calxeda.o\n" - "> obj-$(CONFIG_ARM_KIRKWOOD_CPUIDLE)\t+= cpuidle-kirkwood.o\n" - "> obj-$(CONFIG_ARM_ZYNQ_CPUIDLE)\t\t+= cpuidle-zynq.o\n" - "> obj-$(CONFIG_ARM_U8500_CPUIDLE) += cpuidle-ux500.o\n" + "> obj-$(CONFIG_ARM_KIRKWOOD_CPUIDLE)\t+=3D cpuidle-kirkwood.o\n" + "> obj-$(CONFIG_ARM_ZYNQ_CPUIDLE)\t\t+=3D cpuidle-zynq.o\n" + "> obj-$(CONFIG_ARM_U8500_CPUIDLE) +=3D cpuidle-ux500.o\n" "> +\n" - "> +##################################################################################\n" + "> +########################################################################=\n" + "##########\n" "> +# PowerPC platform drivers\n" - "> +obj-$(CONFIG_PPC_E500_CPUIDLE)\t\t+= cpuidle-e500.o\n" - "> diff --git a/drivers/cpuidle/cpuidle-e500.c \n" + "> +obj-$(CONFIG_PPC_E500_CPUIDLE)\t\t+=3D cpuidle-e500.o\n" + "> diff --git a/drivers/cpuidle/cpuidle-e500.c =20\n" "> b/drivers/cpuidle/cpuidle-e500.c\n" "> new file mode 100644\n" "> index 0000000..1919cea\n" @@ -141,7 +140,7 @@ "> + *\n" "> + * CPU Idle driver for Freescale PowerPC e500 family processors.\n" "> + *\n" - "> + * This program is free software; you can redistribute it and/or \n" + "> + * This program is free software; you can redistribute it and/or =20\n" "> modify\n" "> + * it under the terms of the GNU General Public License version 2 as\n" "> + * published by the Free Software Foundation.\n" @@ -161,9 +160,9 @@ "> +\n" "> +#include <asm/machdep.h>\n" "> +\n" - "> +static struct cpuidle_driver e500_idle_driver = {\n" - "> +\t.name = \"e500_idle\",\n" - "> +\t.owner = THIS_MODULE,\n" + "> +static struct cpuidle_driver e500_idle_driver =3D {\n" + "> +\t.name =3D \"e500_idle\",\n" + "> +\t.owner =3D THIS_MODULE,\n" "> +};\n" "> +\n" "> +static struct cpuidle_device __percpu *e500_cpuidle_devices;\n" @@ -185,33 +184,33 @@ "\n" "This HMT stuff doesn't do anything on e500 derivatives AFAIK.\n" "\n" - "> +static struct cpuidle_state fsl_pw_idle_states[] = {\n" + "> +static struct cpuidle_state fsl_pw_idle_states[] =3D {\n" "> +\t{\n" - "> +\t\t.name = \"pw10\",\n" - "> +\t\t.desc = \"pw10\",\n" - "> +\t\t.flags = CPUIDLE_FLAG_TIME_VALID,\n" - "> +\t\t.exit_latency = 0,\n" - "> +\t\t.target_residency = 0,\n" - "> +\t\t.enter = &pw10_enter\n" + "> +\t\t.name =3D \"pw10\",\n" + "> +\t\t.desc =3D \"pw10\",\n" + "> +\t\t.flags =3D CPUIDLE_FLAG_TIME_VALID,\n" + "> +\t\t.exit_latency =3D 0,\n" + "> +\t\t.target_residency =3D 0,\n" + "> +\t\t.enter =3D &pw10_enter\n" "\n" "Where is pw10_enter defined?\n" "\n" "> +static int cpu_is_feature(unsigned long feature)\n" "> +{\n" - "> +\treturn (cur_cpu_spec->cpu_features == feature);\n" + "> +\treturn (cur_cpu_spec->cpu_features =3D=3D feature);\n" "> +}\n" "> +\n" "> +static int __init e500_idle_init(void)\n" "> +{\n" - "> +\tstruct cpuidle_state *cpuidle_state_table = NULL;\n" - "> +\tstruct cpuidle_driver *drv = &e500_idle_driver;\n" + "> +\tstruct cpuidle_state *cpuidle_state_table =3D NULL;\n" + "> +\tstruct cpuidle_driver *drv =3D &e500_idle_driver;\n" "> +\tint err;\n" - "> +\tunsigned int max_idle_state = 0;\n" + "> +\tunsigned int max_idle_state =3D 0;\n" "> +\n" - "> +\tif (cpuidle_disable != IDLE_NO_OVERRIDE)\n" + "> +\tif (cpuidle_disable !=3D IDLE_NO_OVERRIDE)\n" "> +\t\treturn -ENODEV;\n" "> +\n" - "> +\tif (cpu_is_feature(CPU_FTRS_E500MC) || \n" + "> +\tif (cpu_is_feature(CPU_FTRS_E500MC) || =20\n" "> cpu_is_feature(CPU_FTRS_E5500) ||\n" "> +\t\t\tcpu_is_feature(CPU_FTRS_E6500)) {\n" "\n" @@ -220,8 +219,8 @@ "\n" "What specific feature are you looking for here?\n" "\n" - "> +\t\tcpuidle_state_table = fsl_pw_idle_states;\n" - "> +\t\tmax_idle_state = ARRAY_SIZE(fsl_pw_idle_states);\n" + "> +\t\tcpuidle_state_table =3D fsl_pw_idle_states;\n" + "> +\t\tmax_idle_state =3D ARRAY_SIZE(fsl_pw_idle_states);\n" "> +\t}\n" "> +\n" "> +\tif (!cpuidle_state_table || !max_idle_state)\n" @@ -229,6 +228,6 @@ "\n" "ENODEV?\n" "\n" - -Scott + -Scott= -426ecd233397156bce38b1a816b3a20d01322f26e9de2e60f067b27e26b30848 +0a26ff59054b99dca56341cdd7bc1430e1fa549c4474186851a0daf69f9dc6a3
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.