68 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
| /* SPDX-License-Identifier: GPL-2.0+ */
 | |
| /*
 | |
|  * Copyright 2018 NXP
 | |
|  */
 | |
| 
 | |
| #include <config.h>
 | |
| #include <linux/linkage.h>
 | |
| 
 | |
| #include <asm/armv7.h>
 | |
| #include <asm/psci.h>
 | |
| 
 | |
| 	.pushsection ._secure.text, "ax"
 | |
| 
 | |
| 	.arch_extension sec
 | |
| 
 | |
| .globl v7_invalidate_l1
 | |
| v7_invalidate_l1:
 | |
| 	mov	r0, #0
 | |
| 	mcr	p15, 2, r0, c0, c0, 0
 | |
| 	mrc	p15, 1, r0, c0, c0, 0
 | |
| 
 | |
| 	movw	r1, #0x7fff
 | |
| 	and	r2, r1, r0, lsr #13
 | |
| 
 | |
| 	movw	r1, #0x3ff
 | |
| 
 | |
| 	and	r3, r1, r0, lsr #3      @ NumWays - 1
 | |
| 	add	r2, r2, #1              @ NumSets
 | |
| 
 | |
| 	and	r0, r0, #0x7
 | |
| 	add	r0, r0, #4      @ SetShift
 | |
| 
 | |
| 	clz	r1, r3          @ WayShift
 | |
| 	add	r4, r3, #1      @ NumWays
 | |
| 1:
 | |
| 	sub	r2, r2, #1      @ NumSets--
 | |
| 	mov	r3, r4          @ Temp = NumWays
 | |
| 2:
 | |
| 	subs	r3, r3, #1      @ Temp--
 | |
| 	mov	r5, r3, lsl r1
 | |
| 	mov	r6, r2, lsl r0
 | |
| 	orr	r5, r5, r6      @ Reg = (Temp<<WayShift)|(NumSets<<SetShift)
 | |
| 	mcr	p15, 0, r5, c7, c6, 2
 | |
| 	bgt	2b
 | |
| 	cmp	r2, #0
 | |
| 	bgt	1b
 | |
| 	dsb	st
 | |
| 	isb
 | |
| 	mov	pc, lr
 | |
| 
 | |
| .globl psci_system_resume
 | |
| psci_system_resume:
 | |
| 	mov	sp, r0
 | |
| 
 | |
| 	/* invalidate L1 I-cache first */
 | |
| 	mov	r6, #0x0
 | |
| 	mcr	p15, 0, r6, c7, c5, 0
 | |
| 	mcr	p15, 0, r6, c7, c5, 6
 | |
| 	/* enable the Icache and branch prediction */
 | |
| 	mov	r6, #0x1800
 | |
| 	mcr	p15, 0, r6, c1, c0, 0
 | |
| 	isb
 | |
| 
 | |
| 	bl	v7_invalidate_l1
 | |
| 	b	imx_system_resume
 | |
| 
 | |
| 	.popsection
 |