1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (C) 2014 Marvell
4  *
5  * Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
6  * Gregory Clement <gregory.clement@free-electrons.com>
7  */
8 
9 #include <linux/linkage.h>
10 #include <asm/assembler.h>
11 
12 
13 ENTRY(armada_38x_scu_power_up)
14 	mrc     p15, 4, r1, c15, c0	@ get SCU base address
15 	orr	r1, r1, #0x8		@ SCU CPU Power Status Register
16 	mrc	p15, 0, r0, cr0, cr0, 5	@ get the CPU ID
17 	and	r0, r0, #15
18 	add	r1, r1, r0
19 	mov	r0, #0x0
20 	strb	r0, [r1]		@ switch SCU power state to Normal mode
21 	ret	lr
22 ENDPROC(armada_38x_scu_power_up)
23 
24 /*
25  * This is the entry point through which CPUs exiting cpuidle deep
26  * idle state are going.
27  */
28 ENTRY(armada_370_xp_cpu_resume)
29 ARM_BE8(setend	be )			@ go BE8 if entered LE
30 	/*
31 	 * Disable the MMU that might have been enabled in BootROM if
32 	 * this code is used in the resume path of a suspend/resume
33 	 * cycle.
34 	 */
35 	mrc	p15, 0, r1, c1, c0, 0
36 	bic	r1, #1
37 	mcr	p15, 0, r1, c1, c0, 0
38 	bl	ll_add_cpu_to_smp_group
39 	bl	ll_enable_coherency
40 	b	cpu_resume
41 ENDPROC(armada_370_xp_cpu_resume)
42 
43 ENTRY(armada_38x_cpu_resume)
44 	/* do we need it for Armada 38x*/
45 ARM_BE8(setend	be )			@ go BE8 if entered LE
46 	bl	v7_invalidate_l1
47 	bl	armada_38x_scu_power_up
48 	b	cpu_resume
49 ENDPROC(armada_38x_cpu_resume)
50 
51 .global mvebu_boot_wa_start
52 .global mvebu_boot_wa_end
53 
54 /* The following code will be executed from SRAM */
55 ENTRY(mvebu_boot_wa_start)
56 ARM_BE8(setend	be)
57 	adr	r0, 1f
58 	ldr	r0, [r0]		@ load the address of the
59 					@ resume register
60 	ldr	r0, [r0]		@ load the value in the
61 					@ resume register
62 ARM_BE8(rev	r0, r0)			@ the value is stored LE
63 	mov	pc, r0			@ jump to this value
64 /*
65  * the last word of this piece of code will be filled by the physical
66  * address of the boot address register just after being copied in SRAM
67  */
68 1:
69 	.long   .
70 mvebu_boot_wa_end:
71 ENDPROC(mvebu_boot_wa_end)
72