linux-stable/arch/arm/mach-bcm/bcm_kona_smc_asm.S
Christian Daudt b8eb35fd59 ARM: bcm281xx: Add L2 cache enable code
- Adds a module to provide calls into secure monitor mode
- Uses this module to make secure monitor calls to enable L2 cache.

Updates from V1:
- Split DT portion into separate patch
- replace #ifdef-ed L2 code with "if".
- move init call to board init

Signed-off-by: Christian Daudt <csd@broadcom.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
2013-04-09 09:18:13 -07:00

41 lines
1.5 KiB
ArmAsm

/*
* Copyright (C) 2013 Broadcom Corporation
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation version 2.
*
* This program is distributed "as is" WITHOUT ANY WARRANTY of any
* kind, whether express or implied; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#include <linux/linkage.h>
#include "bcm_kona_smc.h"
/*
* int bcm_kona_smc_asm(u32 service_id, u32 buffer_addr)
*/
ENTRY(bcm_kona_smc_asm)
stmfd sp!, {r4-r12, lr}
mov r4, r0 @ service_id
mov r5, #3 @ Keep IRQ and FIQ off in SM
/*
* Since interrupts are disabled in the open mode, we must keep
* interrupts disabled in secure mode by setting R5=0x3. If interrupts
* are enabled in open mode, we can set R5=0x0 to allow interrupts in
* secure mode. If we did this, the secure monitor would return back
* control to the open mode to handle the interrupt prior to completing
* the secure service. If this happened, R12 would not be
* SEC_EXIT_NORMAL and we would need to call SMC again after resetting
* R5 (it gets clobbered by the secure monitor) and setting R4 to
* SSAPI_RET_FROM_INT_SERV to indicate that we want the secure monitor
* to finish up the previous uncompleted secure service.
*/
mov r6, r1 @ buffer_addr
smc #0
/* Check r12 for SEC_EXIT_NORMAL here if interrupts are enabled */
ldmfd sp!, {r4-r12, pc}
ENDPROC(bcm_kona_smc_asm)