xref: /rk3399_ARM-atf/include/bl32/tsp/tsp.h (revision d5f130930624ceb95cde40de999a880aa2b00493)
15a06bb7eSDan Handley /*
25a06bb7eSDan Handley  * Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved.
35a06bb7eSDan Handley  *
45a06bb7eSDan Handley  * Redistribution and use in source and binary forms, with or without
55a06bb7eSDan Handley  * modification, are permitted provided that the following conditions are met:
65a06bb7eSDan Handley  *
75a06bb7eSDan Handley  * Redistributions of source code must retain the above copyright notice, this
85a06bb7eSDan Handley  * list of conditions and the following disclaimer.
95a06bb7eSDan Handley  *
105a06bb7eSDan Handley  * Redistributions in binary form must reproduce the above copyright notice,
115a06bb7eSDan Handley  * this list of conditions and the following disclaimer in the documentation
125a06bb7eSDan Handley  * and/or other materials provided with the distribution.
135a06bb7eSDan Handley  *
145a06bb7eSDan Handley  * Neither the name of ARM nor the names of its contributors may be used
155a06bb7eSDan Handley  * to endorse or promote products derived from this software without specific
165a06bb7eSDan Handley  * prior written permission.
175a06bb7eSDan Handley  *
185a06bb7eSDan Handley  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
195a06bb7eSDan Handley  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
205a06bb7eSDan Handley  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
215a06bb7eSDan Handley  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
225a06bb7eSDan Handley  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
235a06bb7eSDan Handley  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
245a06bb7eSDan Handley  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
255a06bb7eSDan Handley  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
265a06bb7eSDan Handley  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
275a06bb7eSDan Handley  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
285a06bb7eSDan Handley  * POSSIBILITY OF SUCH DAMAGE.
295a06bb7eSDan Handley  */
305a06bb7eSDan Handley 
315a06bb7eSDan Handley #ifndef __TSP_H__
325a06bb7eSDan Handley #define __TSP_H__
335a06bb7eSDan Handley 
345a06bb7eSDan Handley /*
355a06bb7eSDan Handley  * SMC function IDs that TSP uses to signal various forms of completions
365a06bb7eSDan Handley  * to the secure payload dispatcher.
375a06bb7eSDan Handley  */
385a06bb7eSDan Handley #define TSP_ENTRY_DONE		0xf2000000
395a06bb7eSDan Handley #define TSP_ON_DONE		0xf2000001
405a06bb7eSDan Handley #define TSP_OFF_DONE		0xf2000002
415a06bb7eSDan Handley #define TSP_SUSPEND_DONE	0xf2000003
425a06bb7eSDan Handley #define TSP_RESUME_DONE		0xf2000004
435a06bb7eSDan Handley #define TSP_PREEMPTED		0xf2000005
44*d5f13093SJuan Castillo #define TSP_SYSTEM_OFF_DONE	0xf2000008
45*d5f13093SJuan Castillo #define TSP_SYSTEM_RESET_DONE	0xf2000009
465a06bb7eSDan Handley 
475a06bb7eSDan Handley /*
485a06bb7eSDan Handley  * Function identifiers to handle FIQs through the synchronous handling model.
495a06bb7eSDan Handley  * If the TSP was previously interrupted then control has to be returned to
505a06bb7eSDan Handley  * the TSPD after handling the interrupt else execution can remain in the TSP.
515a06bb7eSDan Handley  */
525a06bb7eSDan Handley #define TSP_HANDLED_S_EL1_FIQ		0xf2000006
535a06bb7eSDan Handley #define TSP_EL3_FIQ			0xf2000007
545a06bb7eSDan Handley 
555a06bb7eSDan Handley /* SMC function ID that TSP uses to request service from secure monitor */
565a06bb7eSDan Handley #define TSP_GET_ARGS		0xf2001000
575a06bb7eSDan Handley 
585a06bb7eSDan Handley /*
595a06bb7eSDan Handley  * Identifiers for various TSP services. Corresponding function IDs (whether
605a06bb7eSDan Handley  * fast or standard) are generated by macros defined below
615a06bb7eSDan Handley  */
625a06bb7eSDan Handley #define TSP_ADD		0x2000
635a06bb7eSDan Handley #define TSP_SUB		0x2001
645a06bb7eSDan Handley #define TSP_MUL		0x2002
655a06bb7eSDan Handley #define TSP_DIV		0x2003
665a06bb7eSDan Handley #define TSP_HANDLE_FIQ_AND_RETURN	0x2004
675a06bb7eSDan Handley 
685a06bb7eSDan Handley /*
695a06bb7eSDan Handley  * Generate function IDs for TSP services to be used in SMC calls, by
705a06bb7eSDan Handley  * appropriately setting bit 31 to differentiate standard and fast SMC calls
715a06bb7eSDan Handley  */
725a06bb7eSDan Handley #define TSP_STD_FID(fid)	((fid) | 0x72000000 | (0 << 31))
735a06bb7eSDan Handley #define TSP_FAST_FID(fid)	((fid) | 0x72000000 | (1 << 31))
745a06bb7eSDan Handley 
755a06bb7eSDan Handley /* SMC function ID to request a previously preempted std smc */
765a06bb7eSDan Handley #define TSP_FID_RESUME		TSP_STD_FID(0x3000)
775a06bb7eSDan Handley 
785a06bb7eSDan Handley /*
795a06bb7eSDan Handley  * Identify a TSP service from function ID filtering the last 16 bits from the
805a06bb7eSDan Handley  * SMC function ID
815a06bb7eSDan Handley  */
825a06bb7eSDan Handley #define TSP_BARE_FID(fid)	((fid) & 0xffff)
835a06bb7eSDan Handley 
845a06bb7eSDan Handley /*
855a06bb7eSDan Handley  * Total number of function IDs implemented for services offered to NS clients.
865a06bb7eSDan Handley  * The function IDs are defined above
875a06bb7eSDan Handley  */
885a06bb7eSDan Handley #define TSP_NUM_FID		0x4
895a06bb7eSDan Handley 
905a06bb7eSDan Handley /* TSP implementation version numbers */
915a06bb7eSDan Handley #define TSP_VERSION_MAJOR	0x0 /* Major version */
925a06bb7eSDan Handley #define TSP_VERSION_MINOR	0x1 /* Minor version */
935a06bb7eSDan Handley 
945a06bb7eSDan Handley /*
955a06bb7eSDan Handley  * Standard Trusted OS Function IDs that fall under Trusted OS call range
965a06bb7eSDan Handley  * according to SMC calling convention
975a06bb7eSDan Handley  */
985a06bb7eSDan Handley #define TOS_CALL_COUNT		0xbf00ff00 /* Number of calls implemented */
995a06bb7eSDan Handley #define TOS_UID			0xbf00ff01 /* Implementation UID */
1005a06bb7eSDan Handley /*				0xbf00ff02 is reserved */
1015a06bb7eSDan Handley #define TOS_CALL_VERSION	0xbf00ff03 /* Trusted OS Call Version */
1025a06bb7eSDan Handley 
1035a06bb7eSDan Handley 
1045a06bb7eSDan Handley #ifndef __ASSEMBLY__
1055a06bb7eSDan Handley 
1065a06bb7eSDan Handley #include <stdint.h>
1075a06bb7eSDan Handley 
1085a06bb7eSDan Handley 
1095a06bb7eSDan Handley typedef uint32_t tsp_vector_isn_t;
1105a06bb7eSDan Handley 
1115a06bb7eSDan Handley typedef struct tsp_vectors {
1125a06bb7eSDan Handley 	tsp_vector_isn_t std_smc_entry;
1135a06bb7eSDan Handley 	tsp_vector_isn_t fast_smc_entry;
1145a06bb7eSDan Handley 	tsp_vector_isn_t cpu_on_entry;
1155a06bb7eSDan Handley 	tsp_vector_isn_t cpu_off_entry;
1165a06bb7eSDan Handley 	tsp_vector_isn_t cpu_resume_entry;
1175a06bb7eSDan Handley 	tsp_vector_isn_t cpu_suspend_entry;
1185a06bb7eSDan Handley 	tsp_vector_isn_t fiq_entry;
119*d5f13093SJuan Castillo 	tsp_vector_isn_t system_off_entry;
120*d5f13093SJuan Castillo 	tsp_vector_isn_t system_reset_entry;
1215a06bb7eSDan Handley } tsp_vectors_t;
1225a06bb7eSDan Handley 
1235a06bb7eSDan Handley 
1245a06bb7eSDan Handley #endif /* __ASSEMBLY__ */
1255a06bb7eSDan Handley 
1265a06bb7eSDan Handley #endif /* __TSP_H__ */
127