Merge tag 'efi-2019-10-rc2' of https://gitlab.denx.de/u-boot/custodians/u-boot-efi
[oweals/u-boot.git] / arch / arm / mach-omap2 / lowlevel_init.S
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Board specific setup info
4  *
5  * (C) Copyright 2010
6  * Texas Instruments, <www.ti.com>
7  *
8  * Author :
9  *      Aneesh V        <aneesh@ti.com>
10  */
11
12 #include <config.h>
13 #include <asm/arch/omap.h>
14 #include <asm/omap_common.h>
15 #include <asm/arch/spl.h>
16 #include <linux/linkage.h>
17
18 .arch_extension sec
19
20 #ifdef CONFIG_SPL
21 ENTRY(save_boot_params)
22         ldr     r1, =OMAP_SRAM_SCRATCH_BOOT_PARAMS
23         str     r0, [r1]
24         b       save_boot_params_ret
25 ENDPROC(save_boot_params)
26
27 #if !defined(CONFIG_TI_SECURE_DEVICE) && defined(CONFIG_ARMV7_LPAE)
28 ENTRY(switch_to_hypervisor)
29
30 /*
31  * Switch to hypervisor mode
32  */
33         adr     r0, save_sp
34         str     sp, [r0]
35         adr     r1, restore_from_hyp
36         ldr     r0, =0x102
37         b       omap_smc1
38 restore_from_hyp:
39         adr     r0, save_sp
40         ldr     sp, [r0]
41         MRC p15, 4, R0, c1, c0, 0
42         ldr     r1, =0X1004     @Set cache enable bits for hypervisor mode
43         orr     r0, r0, r1
44         MCR p15, 4, R0, c1, c0, 0
45         b       switch_to_hypervisor_ret
46 save_sp:
47         .word   0x0
48 ENDPROC(switch_to_hypervisor)
49 #endif
50 #endif
51
52 ENTRY(omap_smc1)
53         push    {r4-r12, lr}    @ save registers - ROM code may pollute
54                                 @ our registers
55         mov     r12, r0         @ Service
56         mov     r0, r1          @ Argument
57
58         dsb
59         dmb
60         smc     0               @ SMC #0 to enter monitor mode
61                                 @ call ROM Code API for the service requested
62         pop     {r4-r12, pc}
63 ENDPROC(omap_smc1)
64
65 ENTRY(omap_smc_sec)
66         push    {r4-r12, lr}    @ save registers - ROM code may pollute
67                                 @ our registers
68         mov     r6, #0xFF       @ Indicate new Task call
69         mov     r12, #0x00      @ Secure Service ID in R12
70
71         dsb
72         dmb
73         smc     0               @ SMC #0 to enter monitor mode
74
75         b       omap_smc_sec_end @ exit at end of the service execution
76         nop
77
78         @ In case of IRQ happening in Secure, then ARM will branch here.
79         @ At that moment, IRQ will be pending and ARM will jump to Non Secure
80         @ IRQ handler
81         mov     r12, #0xFE
82
83         dsb
84         dmb
85         smc     0               @ SMC #0 to enter monitor mode
86
87 omap_smc_sec_end:
88         pop     {r4-r12, pc}
89 ENDPROC(omap_smc_sec)