linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* RE: [RFC 2/2] powerpc/cputable: add wait feature for CPU kernel features
       [not found]   ` <1373448151.19894.16.camel@pasglop>
@ 2013-07-10  9:29     ` Wang Dongsheng-B40534
  2013-07-10  9:33       ` Benjamin Herrenschmidt
  0 siblings, 1 reply; 6+ messages in thread
From: Wang Dongsheng-B40534 @ 2013-07-10  9:29 UTC (permalink / raw)
  To: Benjamin Herrenschmidt
  Cc: Wood Scott-B07421, Li Yang-R58472, linuxppc-dev, Zhao Chenhui-B35336

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQmVuamFtaW4gSGVycmVu
c2NobWlkdCBbbWFpbHRvOmJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZ10NCj4gU2VudDogV2VkbmVz
ZGF5LCBKdWx5IDEwLCAyMDEzIDU6MjMgUE0NCj4gVG86IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNA0K
PiBDYzogV29vZCBTY290dC1CMDc0MjE7IGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc7IFpoYW8g
Q2hlbmh1aS1CMzUzMzY7IExpDQo+IFlhbmctUjU4NDcyDQo+IFN1YmplY3Q6IFJlOiBbUkZDIDIv
Ml0gcG93ZXJwYy9jcHV0YWJsZTogYWRkIHdhaXQgZmVhdHVyZSBmb3IgQ1BVIGtlcm5lbA0KPiBm
ZWF0dXJlcw0KPiANCj4gT24gV2VkLCAyMDEzLTA3LTEwIGF0IDE2OjI3ICswODAwLCBEb25nc2hl
bmcgV2FuZyB3cm90ZToNCj4gPiBGcm9tOiBXYW5nIERvbmdzaGVuZyA8ZG9uZ3NoZW5nLndhbmdA
ZnJlZXNjYWxlLmNvbT4NCj4gDQo+IFRoaXMgaXMgbWlzc2luZyBhbiBleHBsYW5hdGlvbiBvZiB3
aGF0IHRoYXQgZmVhdHVyZSBiaXQgbWVhbnMuLi4NCj4gDQo+IHBvc3NpYmx5IHdpdGggYSBkZXNj
cmlwdGlvbiBvZiB0aGUgY29ycmVzcG9uZGluZyBIVyBmZWF0dXJlLg0KPiANCj4gQmVuLg0KPiAN
ClllcywgdGhlIHdhaXQgaW5zdHJ1Y3Rpb25zIGlzIGZvciBjcHUgaWRsZSwgSXQgd2lsbCBiZSBt
YWtlIGNwdSBpbnRvDQpsb3cgcG93ZXIgbW9kZSwgbGlrZSBET1pFICYgTkFQLiBFYWNoIHRocmVh
ZCBoYXZlIHRoaXMuDQoNCj4gPiBTaWduZWQtb2ZmLWJ5OiBXYW5nIERvbmdzaGVuZyA8ZG9uZ3No
ZW5nLndhbmdAZnJlZXNjYWxlLmNvbT4NCj4gPg0KPiA+IGRpZmYgLS1naXQgYS9hcmNoL3Bvd2Vy
cGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaA0KPiBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9j
cHV0YWJsZS5oDQo+ID4gaW5kZXggNmYzODg3ZC4uMGE4ZDBjYiAxMDA2NDQNCj4gPiAtLS0gYS9h
cmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaA0KPiA+ICsrKyBiL2FyY2gvcG93ZXJw
Yy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oDQo+ID4gQEAgLTEzOCw2ICsxMzgsNyBAQCBleHRlcm4g
Y29uc3QgY2hhciAqcG93ZXJwY19iYXNlX3BsYXRmb3JtOw0KPiA+ICAjZGVmaW5lIENQVV9GVFJf
Tk9FWEVDVVRFCQlBU01fQ09OU1QoMHgxMDAwMDAwMCkNCj4gPiAgI2RlZmluZSBDUFVfRlRSX0lO
REVYRURfRENSCQlBU01fQ09OU1QoMHgyMDAwMDAwMCkNCj4gPiAgI2RlZmluZSBDUFVfRlRSX0VN
Ql9IVgkJCUFTTV9DT05TVCgweDQwMDAwMDAwKQ0KPiA+ICsjZGVmaW5lIENQVV9GVFJfQ0FOX1dB
SVQJCUFTTV9DT05TVCgweDgwMDAwMDAwKQ0KPiA+DQo+ID4gIC8qDQo+ID4gICAqIEFkZCB0aGUg
NjQtYml0IHByb2Nlc3NvciB1bmlxdWUgZmVhdHVyZXMgaW4gdGhlIHRvcCBoYWxmIG9mIHRoZQ0K
PiB3b3JkOw0KPiA+IEBAIC0yNTAsOSArMjUxLDExIEBAIGV4dGVybiBjb25zdCBjaGFyICpwb3dl
cnBjX2Jhc2VfcGxhdGZvcm07DQo+ID4gICNpZm5kZWYgQ09ORklHX0JESV9TV0lUQ0gNCj4gPiAg
I2RlZmluZSBDUFVfRlRSX01BWUJFX0NBTl9ET1pFCUNQVV9GVFJfQ0FOX0RPWkUNCj4gPiAgI2Rl
ZmluZSBDUFVfRlRSX01BWUJFX0NBTl9OQVAJQ1BVX0ZUUl9DQU5fTkFQDQo+ID4gKyNkZWZpbmUg
Q1BVX0ZUUl9NQVlCRV9DQU5fV0FJVAlDUFVfRlRSX0NBTl9XQUlUDQo+ID4gICNlbHNlDQo+ID4g
ICNkZWZpbmUgQ1BVX0ZUUl9NQVlCRV9DQU5fRE9aRQkwDQo+ID4gICNkZWZpbmUgQ1BVX0ZUUl9N
QVlCRV9DQU5fTkFQCTANCj4gPiArI2RlZmluZSBDUFVfRlRSX01BWUJFX0NBTl9XQUlUCTANCj4g
PiAgI2VuZGlmDQo+ID4NCj4gPiAgI2RlZmluZSBDTEFTU0lDX1BQQyAoIWRlZmluZWQoQ09ORklH
Xzh4eCkgJiYgIWRlZmluZWQoQ09ORklHXzR4eCkgJiYgXA0KPiA+IEBAIC0zNzAsMTUgKzM3Mywx
NyBAQCBleHRlcm4gY29uc3QgY2hhciAqcG93ZXJwY19iYXNlX3BsYXRmb3JtOw0KPiA+ICAJICAg
IENQVV9GVFJfTk9EU0lTUkFMSUdOIHwgQ1BVX0ZUUl9OT0VYRUNVVEUpDQo+ID4gICNkZWZpbmUg
Q1BVX0ZUUlNfRTUwME1DCShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTk9EU0lTUkFMSUdOIHwg
XA0KPiA+ICAJICAgIENQVV9GVFJfTDJDU1IgfCBDUFVfRlRSX0xXU1lOQyB8IENQVV9GVFJfTk9F
WEVDVVRFIHwgXA0KPiA+IC0JICAgIENQVV9GVFJfREJFTEwgfCBDUFVfRlRSX0RFQlVHX0xWTF9F
WEMgfCBDUFVfRlRSX0VNQl9IVikNCj4gPiArCSAgICBDUFVfRlRSX0RCRUxMIHwgQ1BVX0ZUUl9E
RUJVR19MVkxfRVhDIHwgQ1BVX0ZUUl9FTUJfSFYgfCBcDQo+ID4gKwkgICAgQ1BVX0ZUUl9NQVlC
RV9DQU5fV0FJVCkNCj4gPiAgI2RlZmluZSBDUFVfRlRSU19FNTUwMAkoQ1BVX0ZUUl9VU0VfVEIg
fCBDUFVfRlRSX05PRFNJU1JBTElHTiB8IFwNCj4gPiAgCSAgICBDUFVfRlRSX0wyQ1NSIHwgQ1BV
X0ZUUl9MV1NZTkMgfCBDUFVfRlRSX05PRVhFQ1VURSB8IFwNCj4gPiAgCSAgICBDUFVfRlRSX0RC
RUxMIHwgQ1BVX0ZUUl9QT1BDTlRCIHwgQ1BVX0ZUUl9QT1BDTlREIHwgXA0KPiA+IC0JICAgIENQ
VV9GVFJfREVCVUdfTFZMX0VYQyB8IENQVV9GVFJfRU1CX0hWKQ0KPiA+ICsJICAgIENQVV9GVFJf
REVCVUdfTFZMX0VYQyB8IENQVV9GVFJfRU1CX0hWIHwgQ1BVX0ZUUl9NQVlCRV9DQU5fV0FJVCkN
Cj4gPiAgI2RlZmluZSBDUFVfRlRSU19FNjUwMAkoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX05P
RFNJU1JBTElHTiB8IFwNCj4gPiAgCSAgICBDUFVfRlRSX0wyQ1NSIHwgQ1BVX0ZUUl9MV1NZTkMg
fCBDUFVfRlRSX05PRVhFQ1VURSB8IFwNCj4gPiAgCSAgICBDUFVfRlRSX0RCRUxMIHwgQ1BVX0ZU
Ul9QT1BDTlRCIHwgQ1BVX0ZUUl9QT1BDTlREIHwgXA0KPiA+IC0JICAgIENQVV9GVFJfREVCVUdf
TFZMX0VYQyB8IENQVV9GVFJfRU1CX0hWIHwgQ1BVX0ZUUl9BTFRJVkVDX0NPTVApDQo+ID4gKwkg
ICAgQ1BVX0ZUUl9ERUJVR19MVkxfRVhDIHwgQ1BVX0ZUUl9FTUJfSFYgfCBDUFVfRlRSX0FMVElW
RUNfQ09NUCB8DQo+IFwNCj4gPiArCSAgICBDUFVfRlRSX01BWUJFX0NBTl9XQUlUKQ0KPiA+ICAj
ZGVmaW5lIENQVV9GVFJTX0dFTkVSSUNfMzIJKENQVV9GVFJfQ09NTU9OIHwNCj4gQ1BVX0ZUUl9O
T0RTSVNSQUxJR04pDQo+ID4NCj4gPiAgLyogNjQtYml0IENQVXMgKi8NCj4gDQo+IA0KDQo=

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [RFC 2/2] powerpc/cputable: add wait feature for CPU kernel features
  2013-07-10  9:29     ` [RFC 2/2] powerpc/cputable: add wait feature for CPU kernel features Wang Dongsheng-B40534
@ 2013-07-10  9:33       ` Benjamin Herrenschmidt
  2013-07-10  9:47         ` Wang Dongsheng-B40534
  0 siblings, 1 reply; 6+ messages in thread
From: Benjamin Herrenschmidt @ 2013-07-10  9:33 UTC (permalink / raw)
  To: Wang Dongsheng-B40534
  Cc: Wood Scott-B07421, Li Yang-R58472, linuxppc-dev, Zhao Chenhui-B35336

On Wed, 2013-07-10 at 09:29 +0000, Wang Dongsheng-B40534 wrote:
> > 
> Yes, the wait instructions is for cpu idle, It will be make cpu into
> low power mode, like DOZE & NAP. Each thread have this.

I don't need you to tell me by email, I need you to put a proper
comment in the patch submission so it ends up in the repository
and if possible a bit more detailed than that.

Ben.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: [RFC 2/2] powerpc/cputable: add wait feature for CPU kernel features
  2013-07-10  9:33       ` Benjamin Herrenschmidt
@ 2013-07-10  9:47         ` Wang Dongsheng-B40534
  0 siblings, 0 replies; 6+ messages in thread
From: Wang Dongsheng-B40534 @ 2013-07-10  9:47 UTC (permalink / raw)
  To: Benjamin Herrenschmidt
  Cc: Wood Scott-B07421, Li Yang-R58472, linuxppc-dev, Zhao Chenhui-B35336

DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQmVuamFtaW4gSGVycmVu
c2NobWlkdCBbbWFpbHRvOmJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZ10NCj4gU2VudDogV2VkbmVz
ZGF5LCBKdWx5IDEwLCAyMDEzIDU6MzMgUE0NCj4gVG86IFdhbmcgRG9uZ3NoZW5nLUI0MDUzNA0K
PiBDYzogV29vZCBTY290dC1CMDc0MjE7IGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc7IFpoYW8g
Q2hlbmh1aS1CMzUzMzY7IExpDQo+IFlhbmctUjU4NDcyOyBsaW51eHBwYy1kZXZAbGlzdHMub3ps
YWJzLm9yZw0KPiBTdWJqZWN0OiBSZTogW1JGQyAyLzJdIHBvd2VycGMvY3B1dGFibGU6IGFkZCB3
YWl0IGZlYXR1cmUgZm9yIENQVSBrZXJuZWwNCj4gZmVhdHVyZXMNCj4gDQo+IE9uIFdlZCwgMjAx
My0wNy0xMCBhdCAwOToyOSArMDAwMCwgV2FuZyBEb25nc2hlbmctQjQwNTM0IHdyb3RlOg0KPiA+
ID4NCj4gPiBZZXMsIHRoZSB3YWl0IGluc3RydWN0aW9ucyBpcyBmb3IgY3B1IGlkbGUsIEl0IHdp
bGwgYmUgbWFrZSBjcHUgaW50bw0KPiA+IGxvdyBwb3dlciBtb2RlLCBsaWtlIERPWkUgJiBOQVAu
IEVhY2ggdGhyZWFkIGhhdmUgdGhpcy4NCj4gDQo+IEkgZG9uJ3QgbmVlZCB5b3UgdG8gdGVsbCBt
ZSBieSBlbWFpbCwgSSBuZWVkIHlvdSB0byBwdXQgYSBwcm9wZXIgY29tbWVudA0KPiBpbiB0aGUg
cGF0Y2ggc3VibWlzc2lvbiBzbyBpdCBlbmRzIHVwIGluIHRoZSByZXBvc2l0b3J5IGFuZCBpZiBw
b3NzaWJsZSBhDQo+IGJpdCBtb3JlIGRldGFpbGVkIHRoYW4gdGhhdC4NCj4gDQo+IEJlbi4NCj4g
DQpPaywgVGhhbmtzIGJlbi4NCkkgd2lsbCBhZGQgYSBkZXNjcmlwdGlvbiBmb3IgbmV4dCBSRkMg
cGF0Y2guDQoNCi0gZG9uZ3NoZW5nDQo=

^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: [RFC 2/2] powerpc/cputable: add wait feature for CPU kernel features
       [not found]   ` <1375118838.30721.43@snotra>
@ 2013-07-30  3:30     ` Wang Dongsheng-B40534
  0 siblings, 0 replies; 6+ messages in thread
From: Wang Dongsheng-B40534 @ 2013-07-30  3:30 UTC (permalink / raw)
  To: Wood Scott-B07421; +Cc: Li Yang-R58472, linuxppc-dev, Zhao Chenhui-B35336



> -----Original Message-----
> From: Wood Scott-B07421
> Sent: Tuesday, July 30, 2013 1:27 AM
> To: Wang Dongsheng-B40534
> Cc: benh@kernel.crashing.org; galak@kernel.crashing.org; Zhao Chenhui-
> B35336; Li Yang-R58472; Wang Dongsheng-B40534
> Subject: Re: [RFC 2/2] powerpc/cputable: add wait feature for CPU kernel
> features
>=20
> On 07/10/2013 03:27:56 AM, Dongsheng Wang wrote:
> > From: Wang Dongsheng <dongsheng.wang@freescale.com>
> >
> > Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>
> >
> > diff --git a/arch/powerpc/include/asm/cputable.h
> > b/arch/powerpc/include/asm/cputable.h
> > index 6f3887d..0a8d0cb 100644
> > --- a/arch/powerpc/include/asm/cputable.h
> > +++ b/arch/powerpc/include/asm/cputable.h
> > @@ -138,6 +138,7 @@ extern const char *powerpc_base_platform;
> >  #define CPU_FTR_NOEXECUTE		ASM_CONST(0x10000000)
> >  #define CPU_FTR_INDEXED_DCR		ASM_CONST(0x20000000)
> >  #define CPU_FTR_EMB_HV			ASM_CONST(0x40000000)
> > +#define CPU_FTR_CAN_WAIT		ASM_CONST(0x80000000)
>=20
> Note that this is the last 32-bit CPU feature flag; it's time to start
> thinking about other mechanisms.  We should probably reserve feature
> flags for things that need to use code patching due to being on a
> performance critical path, and move other things into struct cpu_spec.
> CPU_FTR_CAN_WAIT seems like a good candidate to be moved.
>=20
First of all, why should I do, I need to distinguish between the core, whic=
h
is to support the wait instruction. The CPU_FTR_CAN_WAIT looks easy.

How to fix this problem:
1/ I can drop this cpu feature, and move it into struct cpu_spec.
Add a pm_feature in struct cpu_spec? like,

struct cpu_spec {
	...
	unsigned long pm_features;
	...
}

2/ Drop this cpu feature, using CPU_FTRS_E6500/CPU_FTRS_E5500.. to distingu=
ish wait or doze/nap.
Like,

CPU_FTRS_E500/CPU_FTRS_E500_2 support doze/nap.

CPU_FTRS_E500MC/CPU_FTRS_E5500/CPU_FTRS_E6500 support wait.

If using this method, inside the cpuidle driver needs to do a lot of judgme=
nt. So I'm not sure this
is a very good solution.

Thanks.
- dongsheng

^ permalink raw reply	[flat|nested] 6+ messages in thread

* RE: [RFC 1/2] fsl/pm: combined the idle(PH&PW) state
       [not found] ` <1375118509.30721.42@snotra>
@ 2013-07-30  5:27   ` Wang Dongsheng-B40534
  0 siblings, 0 replies; 6+ messages in thread
From: Wang Dongsheng-B40534 @ 2013-07-30  5:27 UTC (permalink / raw)
  To: Wood Scott-B07421, benh; +Cc: Li Yang-R58472, linuxppc-dev, Zhao Chenhui-B35336



> -----Original Message-----
> From: Wood Scott-B07421
> Sent: Tuesday, July 30, 2013 1:22 AM
> To: Wang Dongsheng-B40534
> Cc: benh@kernel.crashing.org; galak@kernel.crashing.org; Zhao Chenhui-
> B35336; Li Yang-R58472; Wang Dongsheng-B40534
> Subject: Re: [RFC 1/2] fsl/pm: combined the idle(PH&PW) state
>=20
> On 07/10/2013 03:27:55 AM, Dongsheng Wang wrote:
> > From: Wang Dongsheng <dongsheng.wang@freescale.com>
> >
> > move wait instructions from idle_e500.S to idle_book3e.S
> >
> > idle_e500.S: rename e500_idle to e500_idle_ph.
>=20
> What does _ph mean?
>=20
> If this is a reference to the new PHnn/PWnn terminology used on e6500, I
> don't see how that's relevant to this file, which isn't used on e6500.
> Or if you do plan to use this on e6500, why?
>=20
ph10/ph15 means doze/nap on freescale e500 family processors. On the IBM
platform does not "ph" concept.

Yes, "ph" maybe that's not a good idea. We should keep e500_idle.
On e500 processor, there is doze/nap, but e500mc/e5500/e6500 is using "wait=
".

I want to move "wait" from idle_e500.S into idle_book3e.S, but "book3e" mea=
ns
64bit mode... Now 32bit using idle_e500, 64bit using idle_book3e, and the i=
dle method
does not distinguish according to the platform, only in accordance with the=
 CPU
running mode(32bit/64bit) to distinguish.

So did you have any idea about this? Or another way as follows,

We do not touch idle_e500.S and idle_e6500.S, add fsl_cpuidle_wait() into "=
machdep.h"

arch/powerpc/include/asm/machdep.h
/* Wait for Interrupt */
static inline void fsl_cpuidle_wait(void)
{
#ifdef CONFIG_PPC64
        book3e_idle();
#else
        e500_idle();
#endif
}

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [RFC 1/2] fsl/pm: combined the idle(PH&PW) state
@ 2013-07-10  8:31 Dongsheng Wang
  0 siblings, 0 replies; 6+ messages in thread
From: Dongsheng Wang @ 2013-07-10  8:31 UTC (permalink / raw)
  To: benh, scottwood, galak; +Cc: linuxppc-dev, chenhui.zhao, Wang Dongsheng

From: Wang Dongsheng <dongsheng.wang@freescale.com>

move wait instructions from idle_e500.S to idle_book3e.S

idle_e500.S: rename e500_idle to e500_idle_ph.
idle_book3e.S: rename BOOK3E to E500, this file not only use 64bit
mode.

Next we will modify the current cpu idle running way, and will use
cpuidle framework. Distinguish between PH mode and WAIT mode is to
prepare for subsequent development.

Signed-off-by: Wang Dongsheng <dongsheng.wang@freescale.com>

diff --git a/arch/powerpc/include/asm/machdep.h b/arch/powerpc/include/asm/machdep.h
index 92386fc..5688c39 100644
--- a/arch/powerpc/include/asm/machdep.h
+++ b/arch/powerpc/include/asm/machdep.h
@@ -262,11 +262,11 @@ struct machdep_calls {
 #endif
 };
 
-extern void e500_idle(void);
+extern void e500_idle_ph(void);
 extern void power4_idle(void);
 extern void power7_idle(void);
 extern void ppc6xx_idle(void);
-extern void book3e_idle(void);
+extern void e500_idle_wait(void);
 
 /*
  * ppc_md contains a copy of the machine description structure for the
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
index f960a79..047c7e3 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 idle_book3e.o \
 				   signal.o sysfs.o cacheinfo.o time.o \
 				   prom.o traps.o setup-common.o \
 				   udbg.o misc.o io.o dma.o \
@@ -40,7 +40,7 @@ obj-$(CONFIG_HAVE_HW_BREAKPOINT)	+= hw_breakpoint.o
 obj-$(CONFIG_PPC_BOOK3S_64)	+= cpu_setup_ppc970.o cpu_setup_pa6t.o
 obj-$(CONFIG_PPC_BOOK3S_64)	+= cpu_setup_power.o
 obj64-$(CONFIG_RELOCATABLE)	+= reloc_64.o
-obj-$(CONFIG_PPC_BOOK3E_64)	+= exceptions-64e.o idle_book3e.o
+obj-$(CONFIG_PPC_BOOK3E_64)	+= exceptions-64e.o
 obj-$(CONFIG_PPC_A2)		+= cpu_setup_a2.o
 obj-$(CONFIG_PPC64)		+= vdso64/
 obj-$(CONFIG_ALTIVEC)		+= vecemu.o
diff --git a/arch/powerpc/kernel/idle_book3e.S b/arch/powerpc/kernel/idle_book3e.S
index bfb73cc..229f86b 100644
--- a/arch/powerpc/kernel/idle_book3e.S
+++ b/arch/powerpc/kernel/idle_book3e.S
@@ -1,7 +1,7 @@
 /*
  * Copyright 2010 IBM Corp, Benjamin Herrenschmidt <benh@kernel.crashing.org>
  *
- * Generic idle routine for Book3E processors
+ * Generic idle(wait) routine for e500mc, e5500, e6500 processors
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -18,11 +18,9 @@
 #include <asm/thread_info.h>
 #include <asm/epapr_hcalls.h>
 
-/* 64-bit version only for now */
-#ifdef CONFIG_PPC64
-
-.macro BOOK3E_IDLE name loop
+.macro E500_IDLE_WAIT name loop
 _GLOBAL(\name)
+#ifdef CONFIG_PPC64
 	/* Save LR for later */
 	mflr	r0
 	std	r0,16(r1)
@@ -66,6 +64,12 @@ _GLOBAL(\name)
 	ld	r10,TI_LOCAL_FLAGS(r11)
 	ori	r10,r10,_TLF_NAPPING
 	std	r10,TI_LOCAL_FLAGS(r11)
+#else
+	CURRENT_THREAD_INFO(r11, r1)
+	lwz	r4,TI_LOCAL_FLAGS(r11)	/* set napping bit */
+	ori	r4,r4,_TLF_NAPPING	/* so when we take an exception */
+	stw	r4,TI_LOCAL_FLAGS(r11)	/* it will return to our caller */
+#endif
 
 	/* We can now re-enable hard interrupts and go to sleep */
 	wrteei	1
@@ -73,7 +77,7 @@ _GLOBAL(\name)
 
 .endm
 
-.macro BOOK3E_IDLE_LOOP
+.macro E500_IDLE_LOOP
 1:
 	PPC_WAIT(0)
 	b	1b
@@ -94,8 +98,8 @@ epapr_ev_idle_start:
 	b       idle_loop
 .endm
 
-BOOK3E_IDLE epapr_ev_idle EPAPR_EV_IDLE_LOOP
-
-BOOK3E_IDLE book3e_idle BOOK3E_IDLE_LOOP
+#ifdef CONFIG_PPC64
+E500_IDLE_WAIT epapr_ev_idle EPAPR_EV_IDLE_LOOP
+#endif
 
-#endif /* CONFIG_PPC64 */
+E500_IDLE_WAIT e500_idle_wait E500_IDLE_LOOP
diff --git a/arch/powerpc/kernel/idle_e500.S b/arch/powerpc/kernel/idle_e500.S
index 1544866..8b9ccaa 100644
--- a/arch/powerpc/kernel/idle_e500.S
+++ b/arch/powerpc/kernel/idle_e500.S
@@ -20,23 +20,12 @@
 
 	.text
 
-_GLOBAL(e500_idle)
+_GLOBAL(e500_idle_ph)
 	CURRENT_THREAD_INFO(r3, r1)
 	lwz	r4,TI_LOCAL_FLAGS(r3)	/* set napping bit */
 	ori	r4,r4,_TLF_NAPPING	/* so when we take an exception */
 	stw	r4,TI_LOCAL_FLAGS(r3)	/* it will return to our caller */
 
-#ifdef CONFIG_PPC_E500MC
-	wrteei	1
-1:	wait
-
-	/*
-	 * Guard against spurious wakeups (e.g. from a hypervisor) --
-	 * any real interrupt will cause us to return to LR due to
-	 * _TLF_NAPPING.
-	 */
-	b	1b
-#else
 	/* Check if we can nap or doze, put HID0 mask in r3 */
 	lis	r3,0
 BEGIN_FTR_SECTION
@@ -83,7 +72,6 @@ END_FTR_SECTION_IFSET(CPU_FTR_L2CSR|CPU_FTR_CAN_NAP)
 	mtmsr	r7
 	isync
 2:	b	2b
-#endif /* !E500MC */
 
 /*
  * Return from NAP/DOZE mode, restore some CPU specific registers,
@@ -92,7 +80,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_L2CSR|CPU_FTR_CAN_NAP)
  * We have to preserve r10.
  */
 _GLOBAL(power_save_ppc32_restore)
-	lwz	r9,_LINK(r11)		/* interrupted in e500_idle */
+	lwz	r9,_LINK(r11)		/* interrupted in e500_idle_ph */
 	stw	r9,_NIP(r11)		/* make it do a blr */
 
 #ifdef CONFIG_SMP
diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
index a8f54ec..27c260f 100644
--- a/arch/powerpc/kernel/setup_32.c
+++ b/arch/powerpc/kernel/setup_32.c
@@ -143,7 +143,7 @@ notrace void __init machine_init(u64 dt_ptr)
 #ifdef CONFIG_E500
 	if (cpu_has_feature(CPU_FTR_CAN_DOZE) ||
 	    cpu_has_feature(CPU_FTR_CAN_NAP))
-		ppc_md.power_save = e500_idle;
+		ppc_md.power_save = e500_idle_ph;
 #endif
 	if (ppc_md.progress)
 		ppc_md.progress("id mach(): done", 0x200);
diff --git a/arch/powerpc/platforms/85xx/b4_qds.c b/arch/powerpc/platforms/85xx/b4_qds.c
index 0c6702f..057a763 100644
--- a/arch/powerpc/platforms/85xx/b4_qds.c
+++ b/arch/powerpc/platforms/85xx/b4_qds.c
@@ -88,11 +88,7 @@ define_machine(b4_qds) {
 	.restart		= fsl_rstcr_restart,
 	.calibrate_decr		= generic_calibrate_decr,
 	.progress		= udbg_progress,
-#ifdef CONFIG_PPC64
-	.power_save		= book3e_idle,
-#else
-	.power_save		= e500_idle,
-#endif
+	.power_save		= e500_idle_wait,
 };
 
 machine_arch_initcall(b4_qds, corenet_ds_publish_devices);
diff --git a/arch/powerpc/platforms/85xx/p2041_rdb.c b/arch/powerpc/platforms/85xx/p2041_rdb.c
index 000c089..28202d3 100644
--- a/arch/powerpc/platforms/85xx/p2041_rdb.c
+++ b/arch/powerpc/platforms/85xx/p2041_rdb.c
@@ -77,7 +77,7 @@ define_machine(p2041_rdb) {
 	.restart		= fsl_rstcr_restart,
 	.calibrate_decr		= generic_calibrate_decr,
 	.progress		= udbg_progress,
-	.power_save		= e500_idle,
+	.power_save		= e500_idle_wait,
 };
 
 machine_arch_initcall(p2041_rdb, corenet_ds_publish_devices);
diff --git a/arch/powerpc/platforms/85xx/p3041_ds.c b/arch/powerpc/platforms/85xx/p3041_ds.c
index b3edc20..83acd8f 100644
--- a/arch/powerpc/platforms/85xx/p3041_ds.c
+++ b/arch/powerpc/platforms/85xx/p3041_ds.c
@@ -79,7 +79,7 @@ define_machine(p3041_ds) {
 	.restart		= fsl_rstcr_restart,
 	.calibrate_decr		= generic_calibrate_decr,
 	.progress		= udbg_progress,
-	.power_save		= e500_idle,
+	.power_save		= e500_idle_wait,
 };
 
 machine_arch_initcall(p3041_ds, corenet_ds_publish_devices);
diff --git a/arch/powerpc/platforms/85xx/p4080_ds.c b/arch/powerpc/platforms/85xx/p4080_ds.c
index 54df106..e3a4467 100644
--- a/arch/powerpc/platforms/85xx/p4080_ds.c
+++ b/arch/powerpc/platforms/85xx/p4080_ds.c
@@ -78,7 +78,7 @@ define_machine(p4080_ds) {
 	.restart		= fsl_rstcr_restart,
 	.calibrate_decr		= generic_calibrate_decr,
 	.progress		= udbg_progress,
-	.power_save		= e500_idle,
+	.power_save		= e500_idle_wait,
 };
 
 machine_arch_initcall(p4080_ds, corenet_ds_publish_devices);
diff --git a/arch/powerpc/platforms/85xx/p5020_ds.c b/arch/powerpc/platforms/85xx/p5020_ds.c
index 753a42c..e93e773 100644
--- a/arch/powerpc/platforms/85xx/p5020_ds.c
+++ b/arch/powerpc/platforms/85xx/p5020_ds.c
@@ -84,11 +84,7 @@ define_machine(p5020_ds) {
 	.restart		= fsl_rstcr_restart,
 	.calibrate_decr		= generic_calibrate_decr,
 	.progress		= udbg_progress,
-#ifdef CONFIG_PPC64
-	.power_save		= book3e_idle,
-#else
-	.power_save		= e500_idle,
-#endif
+	.power_save		= e500_idle_wait,
 };
 
 machine_arch_initcall(p5020_ds, corenet_ds_publish_devices);
diff --git a/arch/powerpc/platforms/85xx/p5040_ds.c b/arch/powerpc/platforms/85xx/p5040_ds.c
index 1138185..d9a1a16 100644
--- a/arch/powerpc/platforms/85xx/p5040_ds.c
+++ b/arch/powerpc/platforms/85xx/p5040_ds.c
@@ -75,11 +75,7 @@ define_machine(p5040_ds) {
 	.restart		= fsl_rstcr_restart,
 	.calibrate_decr		= generic_calibrate_decr,
 	.progress		= udbg_progress,
-#ifdef CONFIG_PPC64
-	.power_save		= book3e_idle,
-#else
-	.power_save		= e500_idle,
-#endif
+	.power_save		= e500_idle_wait,
 };
 
 machine_arch_initcall(p5040_ds, corenet_ds_publish_devices);
diff --git a/arch/powerpc/platforms/85xx/t4240_qds.c b/arch/powerpc/platforms/85xx/t4240_qds.c
index 5998e9f..b4c6420 100644
--- a/arch/powerpc/platforms/85xx/t4240_qds.c
+++ b/arch/powerpc/platforms/85xx/t4240_qds.c
@@ -84,11 +84,7 @@ define_machine(t4240_qds) {
 	.restart		= fsl_rstcr_restart,
 	.calibrate_decr		= generic_calibrate_decr,
 	.progress		= udbg_progress,
-#ifdef CONFIG_PPC64
-	.power_save		= book3e_idle,
-#else
-	.power_save		= e500_idle,
-#endif
+	.power_save		= e500_idle_wait,
 };
 
 machine_arch_initcall(t4240_qds, corenet_ds_publish_devices);
diff --git a/arch/powerpc/platforms/wsp/chroma.c b/arch/powerpc/platforms/wsp/chroma.c
index 8ef53bc..203caa1 100644
--- a/arch/powerpc/platforms/wsp/chroma.c
+++ b/arch/powerpc/platforms/wsp/chroma.c
@@ -49,7 +49,7 @@ define_machine(chroma_md) {
 	.calibrate_decr		= generic_calibrate_decr,
 	.init_IRQ		= wsp_setup_irq,
 	.progress		= udbg_progress,
-	.power_save		= book3e_idle,
+	.power_save		= e500_idle_wait,
 };
 
 machine_arch_initcall(chroma_md, wsp_probe_devices);
diff --git a/arch/powerpc/platforms/wsp/psr2.c b/arch/powerpc/platforms/wsp/psr2.c
index 508ec82..86b8662 100644
--- a/arch/powerpc/platforms/wsp/psr2.c
+++ b/arch/powerpc/platforms/wsp/psr2.c
@@ -60,7 +60,7 @@ define_machine(psr2_md) {
 	.calibrate_decr		= generic_calibrate_decr,
 	.init_IRQ		= wsp_setup_irq,
 	.progress		= udbg_progress,
-	.power_save		= book3e_idle,
+	.power_save		= e500_idle_wait,
 };
 
 machine_arch_initcall(psr2_md, wsp_probe_devices);
-- 
1.8.0

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2013-07-30  5:27 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <1373444876-7783-1-git-send-email-dongsheng.wang@freescale.com>
     [not found] ` <1373444876-7783-2-git-send-email-dongsheng.wang@freescale.com>
     [not found]   ` <1373448151.19894.16.camel@pasglop>
2013-07-10  9:29     ` [RFC 2/2] powerpc/cputable: add wait feature for CPU kernel features Wang Dongsheng-B40534
2013-07-10  9:33       ` Benjamin Herrenschmidt
2013-07-10  9:47         ` Wang Dongsheng-B40534
     [not found]   ` <1375118838.30721.43@snotra>
2013-07-30  3:30     ` Wang Dongsheng-B40534
     [not found] ` <1375118509.30721.42@snotra>
2013-07-30  5:27   ` [RFC 1/2] fsl/pm: combined the idle(PH&PW) state Wang Dongsheng-B40534
2013-07-10  8:31 Dongsheng Wang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).