Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * OMAP34xx and OMAP44xx secure APIs file.
0004  *
0005  * Copyright (C) 2010 Texas Instruments, Inc.
0006  * Written by Santosh Shilimkar <santosh.shilimkar@ti.com>
0007  *
0008  * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg>
0009  * Copyright (C) 2013 Pali Rohár <pali@kernel.org>
0010  */
0011 
0012 #include <linux/linkage.h>
0013 
0014 /*
0015  * This is common routine to manage secure monitor API
0016  * used to modify the PL310 secure registers.
0017  * 'r0' contains the value to be modified and 'r12' contains
0018  * the monitor API number. It uses few CPU registers
0019  * internally and hence they need be backed up including
0020  * link register "lr".
0021  * Function signature : void _omap_smc1(u32 fn, u32 arg)
0022  */
0023     .arch armv7-a
0024     .arch_extension sec
0025 ENTRY(_omap_smc1)
0026     stmfd   sp!, {r2-r12, lr}
0027     mov r12, r0
0028     mov     r0, r1
0029     dsb
0030     smc #0
0031     ldmfd   sp!, {r2-r12, pc}
0032 ENDPROC(_omap_smc1)
0033 
0034 /**
0035  * u32 omap_smc2(u32 id, u32 falg, u32 pargs)
0036  * Low level common routine for secure HAL and PPA APIs.
0037  * @id: Application ID of HAL APIs
0038  * @flag: Flag to indicate the criticality of operation
0039  * @pargs: Physical address of parameter list starting
0040  *      with number of parametrs
0041  */
0042 ENTRY(omap_smc2)
0043     stmfd   sp!, {r4-r12, lr}
0044     mov r3, r2
0045     mov r2, r1
0046     mov r1, #0x0    @ Process ID
0047     mov r6, #0xff
0048     mov r12, #0x00  @ Secure Service ID
0049     mov r7, #0
0050     mcr p15, 0, r7, c7, c5, 6
0051     dsb
0052     dmb
0053     smc #0
0054     ldmfd   sp!, {r4-r12, pc}
0055 ENDPROC(omap_smc2)
0056 
0057 /**
0058  * u32 omap_smc3(u32 service_id, u32 process_id, u32 flag, u32 pargs)
0059  * Low level common routine for secure HAL and PPA APIs via smc #1
0060  * r0 - @service_id: Secure Service ID
0061  * r1 - @process_id: Process ID
0062  * r2 - @flag: Flag to indicate the criticality of operation
0063  * r3 - @pargs: Physical address of parameter list
0064  */
0065 ENTRY(omap_smc3)
0066     stmfd   sp!, {r4-r11, lr}
0067     mov r12, r0     @ Copy the secure service ID
0068     mov r6, #0xff   @ Indicate new Task call
0069     dsb         @ Memory Barrier (not sure if needed, copied from omap_smc2)
0070     smc #1      @ Call PPA service
0071     ldmfd   sp!, {r4-r11, pc}
0072 ENDPROC(omap_smc3)
0073 
0074 ENTRY(omap_modify_auxcoreboot0)
0075     stmfd   sp!, {r1-r12, lr}
0076     ldr r12, =0x104
0077     dsb
0078     smc #0
0079     ldmfd   sp!, {r1-r12, pc}
0080 ENDPROC(omap_modify_auxcoreboot0)
0081 
0082 ENTRY(omap_auxcoreboot_addr)
0083     stmfd   sp!, {r2-r12, lr}
0084     ldr r12, =0x105
0085     dsb
0086     smc #0
0087     ldmfd   sp!, {r2-r12, pc}
0088 ENDPROC(omap_auxcoreboot_addr)
0089 
0090 ENTRY(omap_read_auxcoreboot0)
0091     stmfd   sp!, {r2-r12, lr}
0092     ldr r12, =0x103
0093     dsb
0094     smc #0
0095     ldmfd   sp!, {r2-r12, pc}
0096 ENDPROC(omap_read_auxcoreboot0)