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 Carrierestatic 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