mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-09-04 20:19:47 +08:00 
			
		
		
		
	powerpc/powernv: Make pnv_powersave_common more generic
pnv_powersave_common does common steps needed before entering idle state and eventually changes MSR to MSR_IDLE and does rfid to pnv_enter_arch207_idle_mode. Move the updation of HSTATE_HWTHREAD_STATE to pnv_powersave_common from pnv_enter_arch207_idle_mode and make it more generic by passing the rfid address as a function parameter. Reviewed-by: Gautham R. Shenoy <ego@linux.vnet.ibm.com> Signed-off-by: Shreyas B. Prabhu <shreyas@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
		
							parent
							
								
									5fa6b6bd7a
								
							
						
					
					
						commit
						4eae2c9ae5
					
				| @ -75,6 +75,8 @@ core_idle_lock_held: | ||||
|  * To check IRQ_HAPPENED in r4 | ||||
|  * 	0 - don't check | ||||
|  * 	1 - check | ||||
|  * | ||||
|  * Address to 'rfid' to in r5 | ||||
|  */ | ||||
| _GLOBAL(pnv_powersave_common) | ||||
| 	/* Use r3 to pass state nap/sleep/winkle */ | ||||
| @ -127,28 +129,28 @@ _GLOBAL(pnv_powersave_common) | ||||
| 	std	r9,_MSR(r1) | ||||
| 	std	r1,PACAR1(r13) | ||||
| 
 | ||||
| #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE | ||||
| 	/* Tell KVM we're entering idle */ | ||||
| 	li	r4,KVM_HWTHREAD_IN_NAP | ||||
| 	stb	r4,HSTATE_HWTHREAD_STATE(r13) | ||||
| #endif | ||||
| 
 | ||||
| 	/* | ||||
| 	 * Go to real mode to do the nap, as required by the architecture. | ||||
| 	 * Also, we need to be in real mode before setting hwthread_state, | ||||
| 	 * because as soon as we do that, another thread can switch | ||||
| 	 * the MMU context to the guest. | ||||
| 	 */ | ||||
| 	LOAD_REG_IMMEDIATE(r5, MSR_IDLE) | ||||
| 	LOAD_REG_IMMEDIATE(r7, MSR_IDLE) | ||||
| 	li	r6, MSR_RI | ||||
| 	andc	r6, r9, r6 | ||||
| 	LOAD_REG_ADDR(r7, pnv_enter_arch207_idle_mode) | ||||
| 	mtmsrd	r6, 1		/* clear RI before setting SRR0/1 */ | ||||
| 	mtspr	SPRN_SRR0, r7 | ||||
| 	mtspr	SPRN_SRR1, r5 | ||||
| 	mtspr	SPRN_SRR0, r5 | ||||
| 	mtspr	SPRN_SRR1, r7 | ||||
| 	rfid | ||||
| 
 | ||||
| 	.globl pnv_enter_arch207_idle_mode
 | ||||
| pnv_enter_arch207_idle_mode: | ||||
| #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE | ||||
| 	/* Tell KVM we're napping */ | ||||
| 	li	r4,KVM_HWTHREAD_IN_NAP | ||||
| 	stb	r4,HSTATE_HWTHREAD_STATE(r13) | ||||
| #endif | ||||
| 	stb	r3,PACA_THREAD_IDLE_STATE(r13) | ||||
| 	cmpwi	cr3,r3,PNV_THREAD_SLEEP | ||||
| 	bge	cr3,2f | ||||
| @ -243,18 +245,21 @@ _GLOBAL(power7_idle) | ||||
| _GLOBAL(power7_nap) | ||||
| 	mr	r4,r3 | ||||
| 	li	r3,PNV_THREAD_NAP | ||||
| 	LOAD_REG_ADDR(r5, pnv_enter_arch207_idle_mode) | ||||
| 	b	pnv_powersave_common | ||||
| 	/* No return */ | ||||
| 
 | ||||
| _GLOBAL(power7_sleep) | ||||
| 	li	r3,PNV_THREAD_SLEEP | ||||
| 	li	r4,1 | ||||
| 	LOAD_REG_ADDR(r5, pnv_enter_arch207_idle_mode) | ||||
| 	b	pnv_powersave_common | ||||
| 	/* No return */ | ||||
| 
 | ||||
| _GLOBAL(power7_winkle) | ||||
| 	li	r3,PNV_THREAD_WINKLE | ||||
| 	li	r4,1 | ||||
| 	LOAD_REG_ADDR(r5, pnv_enter_arch207_idle_mode) | ||||
| 	b	pnv_powersave_common | ||||
| 	/* No return */ | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Shreyas B. Prabhu
						Shreyas B. Prabhu