summaryrefslogtreecommitdiff
path: root/big-little/switcher/trigger/handle_switchover.s
diff options
context:
space:
mode:
authorDave Martin <dave.martin@linaro.org>2011-12-16 11:41:59 +0000
committerDave Martin <dave.martin@linaro.org>2011-12-16 11:41:59 +0000
commit9945995974f51e86ff8a5e3162c47e1019ce9a08 (patch)
tree254d310b4a81e31f5ea2ab914b3cb9e643bf64a6 /big-little/switcher/trigger/handle_switchover.s
arm-virtualizer: Initial import of v2.1 releasearm_v2.1
From Release_Notes.txt: ARM Virtualizer software release v2.1 This software release is a v2.1 snapshot of the ARM Virtualizer software. The ARM Virtualizer software is example code that demonstrates cluster context switching capability on a coherent dual cluster system composed of a Cortex-A7 cluster and a Cortex-A15 cluster. The intent behind this delivery is to allow inspection of the software architecture and to demonstrate existing functionality. It is possible to execute the ARM Virtualizer software on a Kingfisher Real-Time System Model (RTSM VE Cortex-A15 KF CCI version 6.2 Beta).
Diffstat (limited to 'big-little/switcher/trigger/handle_switchover.s')
-rw-r--r--big-little/switcher/trigger/handle_switchover.s61
1 files changed, 61 insertions, 0 deletions
diff --git a/big-little/switcher/trigger/handle_switchover.s b/big-little/switcher/trigger/handle_switchover.s
new file mode 100644
index 0000000..d18ba21
--- /dev/null
+++ b/big-little/switcher/trigger/handle_switchover.s
@@ -0,0 +1,61 @@
+ ;
+ ; Copyright (c) 2011, ARM Limited. All rights reserved.
+ ;
+ ; Redistribution and use in source and binary forms, with
+ ; or without modification, are permitted provided that the
+ ; following conditions are met:
+ ;
+ ; Redistributions of source code must retain the above
+ ; copyright notice, this list of conditions and the
+ ; following disclaimer.
+ ;
+ ; Redistributions in binary form must reproduce the
+ ; above copyright notice, this list of conditions and
+ ; the following disclaimer in the documentation
+ ; and/or other materials provided with the distribution.
+ ;
+ ; Neither the name of ARM nor the names of its
+ ; contributors may be used to endorse or promote products
+ ; derived from this software without specific prior written
+ ; permission.
+ ;
+
+ AREA SwitchoverCode, CODE, READONLY, ALIGN=5
+
+ PRESERVE8
+
+ IMPORT save_context
+ IMPORT smc
+ EXPORT switch_cluster
+
+SMC_SEC_SHUTDOWN EQU 0x2
+
+ ; ----------------------------------------------------
+ ; This function directs the switchover to the inbound
+ ; cluster. The context is first saved, stacks switched
+ ; & the cluster is powered down.
+ ; We need to switch stacks from being resident in normal
+ ; WBWA/S memory to SO memory to prevent potential stack
+ ; corruption after turning off the C bit in the HSCTLR.
+ ; Subsequent accesses will be SO while there will be
+ ; valid cache lines of the stack from prior accesses
+ ; ----------------------------------------------------
+switch_cluster FUNCTION
+ ; ----------------------------------------------------
+ ; We don't push any registers on the stack as we are
+ ; not going to return from this function
+ ; ----------------------------------------------------
+ MOV r4, r0
+ BL save_context
+ ; ----------------------------------------------------
+ ; We are now through with saving the context and the
+ ; inbound cluster has started picking it up. Switch to
+ ; the secure world to clean the caches and power down
+ ; the cluster
+ ; ----------------------------------------------------
+ MOV r0, #SMC_SEC_SHUTDOWN
+ BL smc
+ ENDFUNC
+
+ END
+