xref: /optee_os/core/include/drivers/stm32_remoteproc.h (revision a03044318866a9975808f548a4f2dcd9083da923)
15a2d2237SArnaud Pouliquen /* SPDX-License-Identifier: BSD-2-Clause */
25a2d2237SArnaud Pouliquen /*
35a2d2237SArnaud Pouliquen  * Copyright (c) 2023, STMicroelectronics - All Rights Reserved
45a2d2237SArnaud Pouliquen  */
55a2d2237SArnaud Pouliquen 
65a2d2237SArnaud Pouliquen #ifndef __DRIVERS_STM32_REMOTEPROC_H
75a2d2237SArnaud Pouliquen #define __DRIVERS_STM32_REMOTEPROC_H
85a2d2237SArnaud Pouliquen 
95a2d2237SArnaud Pouliquen #include <stdint.h>
105a2d2237SArnaud Pouliquen #include <tee_api_types.h>
115a2d2237SArnaud Pouliquen #include <types_ext.h>
125a2d2237SArnaud Pouliquen 
135a2d2237SArnaud Pouliquen /* IDs of the supported remote processors*/
145a2d2237SArnaud Pouliquen #define STM32_M4_RPROC_ID 0
155a2d2237SArnaud Pouliquen 
165a2d2237SArnaud Pouliquen /*
175a2d2237SArnaud Pouliquen  * stm32_rproc_get() - get the rproc handle associated to a remote processor ID
185a2d2237SArnaud Pouliquen  * @rproc_id unique identifier of the remote processor
195a2d2237SArnaud Pouliquen  * Return a pointer to the rproc firmware handle related to @rproc_id or NULL.
205a2d2237SArnaud Pouliquen  */
215a2d2237SArnaud Pouliquen void *stm32_rproc_get(uint32_t rproc_id);
225a2d2237SArnaud Pouliquen 
235a2d2237SArnaud Pouliquen /*
245a2d2237SArnaud Pouliquen  * stm32_rproc_da_to_pa() - Convert the coprocessor device address to a CPU
255a2d2237SArnaud Pouliquen  *                          physical address.
265a2d2237SArnaud Pouliquen  * @rproc_id	unique identifier of the remote processor
275a2d2237SArnaud Pouliquen  * @da		device memory address from the remote processor space
285a2d2237SArnaud Pouliquen  *		perspective.
295a2d2237SArnaud Pouliquen  * @size	size of the memory
305a2d2237SArnaud Pouliquen  * @pa		Output CPU physical address associated to @da.
315a2d2237SArnaud Pouliquen  * Return TEE_SUCCESS or appropriate error.
325a2d2237SArnaud Pouliquen  */
335a2d2237SArnaud Pouliquen TEE_Result stm32_rproc_da_to_pa(uint32_t rproc_id, paddr_t da, size_t size,
345a2d2237SArnaud Pouliquen 				paddr_t *pa);
355a2d2237SArnaud Pouliquen 
365a2d2237SArnaud Pouliquen /*
375a2d2237SArnaud Pouliquen  * stm32_rproc_map() - map the physical address if valid
385a2d2237SArnaud Pouliquen  * @rproc_id	unique identifier of the remote processor
395a2d2237SArnaud Pouliquen  * @pa		physical address from the CPU space perspective
405a2d2237SArnaud Pouliquen  * @size	size of the memory
415a2d2237SArnaud Pouliquen  * @va		Output CPU virtual address associated to @pa.
425a2d2237SArnaud Pouliquen  * Return TEE_SUCCESS or appropriate error.
435a2d2237SArnaud Pouliquen  */
445a2d2237SArnaud Pouliquen TEE_Result stm32_rproc_map(uint32_t rproc_id, paddr_t pa, size_t size,
455a2d2237SArnaud Pouliquen 			   void **va);
465a2d2237SArnaud Pouliquen 
475a2d2237SArnaud Pouliquen /*
485a2d2237SArnaud Pouliquen  * stm32_rproc_unmap() - ummap the virtual address mapped with stm32_rproc_map
495a2d2237SArnaud Pouliquen  * @rproc_id	unique identifier of the remote processor
505a2d2237SArnaud Pouliquen  * @va		virtual address
515a2d2237SArnaud Pouliquen  * @size	size of the memory
525a2d2237SArnaud Pouliquen  * Return TEE_SUCCESS or appropriate error.
535a2d2237SArnaud Pouliquen  */
545a2d2237SArnaud Pouliquen TEE_Result stm32_rproc_unmap(uint32_t rproc_id, void *va, size_t size);
555a2d2237SArnaud Pouliquen 
565a2d2237SArnaud Pouliquen /*
575a2d2237SArnaud Pouliquen  * stm32_rproc_start() - start the remote processor core
585a2d2237SArnaud Pouliquen  * @rproc_id	unique identifier of the remote processor
595a2d2237SArnaud Pouliquen  * Return TEE_SUCCESS or appropriate error.
605a2d2237SArnaud Pouliquen  */
615a2d2237SArnaud Pouliquen TEE_Result stm32_rproc_start(uint32_t rproc_id);
625a2d2237SArnaud Pouliquen 
635a2d2237SArnaud Pouliquen /*
645a2d2237SArnaud Pouliquen  * stm32_rproc_stop() - stop the remote processor core
655a2d2237SArnaud Pouliquen  * @rproc_id	unique identifier of the remote processor
665a2d2237SArnaud Pouliquen  * Return TEE_SUCCESS or appropriate error.
675a2d2237SArnaud Pouliquen  */
685a2d2237SArnaud Pouliquen TEE_Result stm32_rproc_stop(uint32_t rproc_id);
695a2d2237SArnaud Pouliquen 
70b8f75963SArnaud Pouliquen /*
71b8f75963SArnaud Pouliquen  * stm32_rproc_clean_up_memories() - clear remote processor memory regions
72b8f75963SArnaud Pouliquen  * @rproc_id	unique identifier of the remote processor
73b8f75963SArnaud Pouliquen  * Return TEE_SUCCESS or appropriate error.
74b8f75963SArnaud Pouliquen  */
75b8f75963SArnaud Pouliquen TEE_Result stm32_rproc_clean_up_memories(uint32_t rproc_id);
76b8f75963SArnaud Pouliquen 
77*a0304431SEtienne Carriere #ifdef CFG_STM32MP_REMOTEPROC
78*a0304431SEtienne Carriere /* Return true is secure loading of remoteproc firmware is enabled */
79*a0304431SEtienne Carriere bool stm32_rproc_is_secure(uint32_t rproc_id);
80*a0304431SEtienne Carriere #else
stm32_rproc_is_secure(uint32_t rproc_id __unused)81*a0304431SEtienne Carriere static inline bool stm32_rproc_is_secure(uint32_t rproc_id __unused)
82*a0304431SEtienne Carriere {
83*a0304431SEtienne Carriere 	return false;
84*a0304431SEtienne Carriere }
85*a0304431SEtienne Carriere #endif
86*a0304431SEtienne Carriere 
875a2d2237SArnaud Pouliquen #endif /* __DRIVERS_STM32_REMOTEPROC_H */
88