65 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /* SPDX-License-Identifier: GPL-2.0-only */
 | |
| /*
 | |
|  * Copyright (c) 2014, Fuzhou Rockchip Electronics Co., Ltd
 | |
|  * Author: Tony Xie <tony.xie@rock-chips.com>
 | |
|  */
 | |
| 
 | |
| #include <linux/linkage.h>
 | |
| #include <asm/assembler.h>
 | |
| #include <asm/memory.h>
 | |
| 
 | |
| .data
 | |
| /*
 | |
|  * this code will be copied from
 | |
|  * ddr to sram for system resumeing.
 | |
|  * so it is ".data section".
 | |
|  */
 | |
| 	.align	2
 | |
| 
 | |
| ENTRY(rockchip_slp_cpu_resume)
 | |
| 	setmode	PSR_I_BIT | PSR_F_BIT | SVC_MODE, r1  @ set svc, irqs off
 | |
| 	mrc	p15, 0, r1, c0, c0, 5
 | |
| 	and	r1, r1, #0xf
 | |
| 	cmp	r1, #0
 | |
| 	/* olny cpu0 can continue to run, the others is halt here */
 | |
| 	beq	cpu0run
 | |
| secondary_loop:
 | |
| 	wfe
 | |
| 	b	secondary_loop
 | |
| cpu0run:
 | |
| 	ldr	r3, rkpm_bootdata_l2ctlr_f
 | |
| 	cmp	r3, #0
 | |
| 	beq	sp_set
 | |
| 	ldr	r3, rkpm_bootdata_l2ctlr
 | |
| 	mcr	p15, 1, r3, c9, c0, 2
 | |
| sp_set:
 | |
| 	ldr	sp, rkpm_bootdata_cpusp
 | |
| 	ldr	r1, rkpm_bootdata_cpu_code
 | |
| 	bx	r1
 | |
| ENDPROC(rockchip_slp_cpu_resume)
 | |
| 
 | |
| /* Parameters filled in by the kernel */
 | |
| 
 | |
| /* Flag for whether to restore L2CTLR on resume */
 | |
| 	.global rkpm_bootdata_l2ctlr_f
 | |
| rkpm_bootdata_l2ctlr_f:
 | |
| 	.long 0
 | |
| 
 | |
| /* Saved L2CTLR to restore on resume */
 | |
| 	.global rkpm_bootdata_l2ctlr
 | |
| rkpm_bootdata_l2ctlr:
 | |
| 	.long 0
 | |
| 
 | |
| /* CPU resume SP addr */
 | |
| 	.globl rkpm_bootdata_cpusp
 | |
| rkpm_bootdata_cpusp:
 | |
| 	.long 0
 | |
| 
 | |
| /* CPU resume function (physical address) */
 | |
| 	.globl rkpm_bootdata_cpu_code
 | |
| rkpm_bootdata_cpu_code:
 | |
| 	.long 0
 | |
| 
 | |
| ENTRY(rk3288_bootram_sz)
 | |
|         .word   . - rockchip_slp_cpu_resume
 |