]>
Commit | Line | Data |
---|---|---|
d2912cb1 | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
d660f9a2 | 2 | /* |
a33f1788 | 3 | * OMAP34xx and OMAP44xx secure APIs file. |
d660f9a2 SS |
4 | * |
5 | * Copyright (C) 2010 Texas Instruments, Inc. | |
6 | * Written by Santosh Shilimkar <santosh.shilimkar@ti.com> | |
7 | * | |
a33f1788 PR |
8 | * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg> |
9 | * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com> | |
d660f9a2 SS |
10 | */ |
11 | ||
12 | #include <linux/linkage.h> | |
13 | ||
14 | /* | |
15 | * This is common routine to manage secure monitor API | |
16 | * used to modify the PL310 secure registers. | |
17 | * 'r0' contains the value to be modified and 'r12' contains | |
18 | * the monitor API number. It uses few CPU registers | |
19 | * internally and hence they need be backed up including | |
20 | * link register "lr". | |
21 | * Function signature : void omap_smc1(u32 fn, u32 arg) | |
22 | */ | |
3fe1ee40 SA |
23 | .arch armv7-a |
24 | .arch_extension sec | |
d660f9a2 SS |
25 | ENTRY(omap_smc1) |
26 | stmfd sp!, {r2-r12, lr} | |
27 | mov r12, r0 | |
28 | mov r0, r1 | |
29 | dsb | |
df571c4a | 30 | smc #0 |
d660f9a2 | 31 | ldmfd sp!, {r2-r12, pc} |
f96bdfa0 | 32 | ENDPROC(omap_smc1) |
3f9eaf09 | 33 | |
ba9456ac SS |
34 | /** |
35 | * u32 omap_smc2(u32 id, u32 falg, u32 pargs) | |
36 | * Low level common routine for secure HAL and PPA APIs. | |
37 | * @id: Application ID of HAL APIs | |
38 | * @flag: Flag to indicate the criticality of operation | |
39 | * @pargs: Physical address of parameter list starting | |
40 | * with number of parametrs | |
41 | */ | |
42 | ENTRY(omap_smc2) | |
43 | stmfd sp!, {r4-r12, lr} | |
44 | mov r3, r2 | |
45 | mov r2, r1 | |
46 | mov r1, #0x0 @ Process ID | |
47 | mov r6, #0xff | |
48 | mov r12, #0x00 @ Secure Service ID | |
49 | mov r7, #0 | |
50 | mcr p15, 0, r7, c7, c5, 6 | |
51 | dsb | |
52 | dmb | |
53 | smc #0 | |
54 | ldmfd sp!, {r4-r12, pc} | |
55 | ENDPROC(omap_smc2) | |
56 | ||
a33f1788 PR |
57 | /** |
58 | * u32 omap_smc3(u32 service_id, u32 process_id, u32 flag, u32 pargs) | |
59 | * Low level common routine for secure HAL and PPA APIs via smc #1 | |
60 | * r0 - @service_id: Secure Service ID | |
61 | * r1 - @process_id: Process ID | |
62 | * r2 - @flag: Flag to indicate the criticality of operation | |
63 | * r3 - @pargs: Physical address of parameter list | |
64 | */ | |
65 | ENTRY(omap_smc3) | |
66 | stmfd sp!, {r4-r11, lr} | |
67 | mov r12, r0 @ Copy the secure service ID | |
68 | mov r6, #0xff @ Indicate new Task call | |
69 | dsb @ Memory Barrier (not sure if needed, copied from omap_smc2) | |
70 | smc #1 @ Call PPA service | |
71 | ldmfd sp!, {r4-r11, pc} | |
72 | ENDPROC(omap_smc3) | |
73 | ||
3f9eaf09 SS |
74 | ENTRY(omap_modify_auxcoreboot0) |
75 | stmfd sp!, {r1-r12, lr} | |
76 | ldr r12, =0x104 | |
77 | dsb | |
78 | smc #0 | |
79 | ldmfd sp!, {r1-r12, pc} | |
f96bdfa0 | 80 | ENDPROC(omap_modify_auxcoreboot0) |
3f9eaf09 SS |
81 | |
82 | ENTRY(omap_auxcoreboot_addr) | |
83 | stmfd sp!, {r2-r12, lr} | |
84 | ldr r12, =0x105 | |
85 | dsb | |
86 | smc #0 | |
87 | ldmfd sp!, {r2-r12, pc} | |
f96bdfa0 | 88 | ENDPROC(omap_auxcoreboot_addr) |
3f9eaf09 SS |
89 | |
90 | ENTRY(omap_read_auxcoreboot0) | |
91 | stmfd sp!, {r2-r12, lr} | |
92 | ldr r12, =0x103 | |
93 | dsb | |
94 | smc #0 | |
3f9eaf09 | 95 | ldmfd sp!, {r2-r12, pc} |
f96bdfa0 | 96 | ENDPROC(omap_read_auxcoreboot0) |