xref: /rk3399_ARM-atf/plat/arm/board/fvp/fvp_el3_spmc.c (revision a8be4cd057bce5f0b4ac6af396c0c870474d1ef4)
16a0788bcSMarc Bonnici /*
26a0788bcSMarc Bonnici  * Copyright (c) 2022, Arm Limited and Contributors. All rights reserved.
36a0788bcSMarc Bonnici  *
46a0788bcSMarc Bonnici  * SPDX-License-Identifier: BSD-3-Clause
56a0788bcSMarc Bonnici  */
6*a8be4cd0SMarc Bonnici #include <services/el3_spmc_ffa_memory.h>
76a0788bcSMarc Bonnici 
86a0788bcSMarc Bonnici #include <platform_def.h>
96a0788bcSMarc Bonnici 
106a0788bcSMarc Bonnici /*
116a0788bcSMarc Bonnici  * On the FVP platform when using the EL3 SPMC implementation allocate the
126a0788bcSMarc Bonnici  * datastore for tracking shared memory descriptors in the TZC DRAM section
136a0788bcSMarc Bonnici  * to ensure sufficient storage can be allocated.
146a0788bcSMarc Bonnici  * Provide an implementation of the accessor method to allow the datastore
156a0788bcSMarc Bonnici  * details to be retrieved by the SPMC.
166a0788bcSMarc Bonnici  * The SPMC will take care of initializing the memory region.
176a0788bcSMarc Bonnici  */
186a0788bcSMarc Bonnici 
196a0788bcSMarc Bonnici #define PLAT_SPMC_SHMEM_DATASTORE_SIZE 512 * 1024
206a0788bcSMarc Bonnici 
216a0788bcSMarc Bonnici __section("arm_el3_tzc_dram") static uint8_t
226a0788bcSMarc Bonnici plat_spmc_shmem_datastore[PLAT_SPMC_SHMEM_DATASTORE_SIZE];
236a0788bcSMarc Bonnici 
246a0788bcSMarc Bonnici int plat_spmc_shmem_datastore_get(uint8_t **datastore, size_t *size)
256a0788bcSMarc Bonnici {
266a0788bcSMarc Bonnici 	*datastore = plat_spmc_shmem_datastore;
276a0788bcSMarc Bonnici 	*size = PLAT_SPMC_SHMEM_DATASTORE_SIZE;
286a0788bcSMarc Bonnici 	return 0;
296a0788bcSMarc Bonnici }
30*a8be4cd0SMarc Bonnici 
31*a8be4cd0SMarc Bonnici /*
32*a8be4cd0SMarc Bonnici  * Add dummy implementations of memory management related platform hooks.
33*a8be4cd0SMarc Bonnici  * These can be used to implement platform specific functionality to support
34*a8be4cd0SMarc Bonnici  * a memory sharing/lending operation.
35*a8be4cd0SMarc Bonnici  *
36*a8be4cd0SMarc Bonnici  * Note: The hooks must be located as part of the initial share request and
37*a8be4cd0SMarc Bonnici  * final reclaim to prevent order dependencies with operations that may take
38*a8be4cd0SMarc Bonnici  * place in the normal world without visibility of the SPMC.
39*a8be4cd0SMarc Bonnici  */
40*a8be4cd0SMarc Bonnici int plat_spmc_shmem_begin(struct ffa_mtd *desc)
41*a8be4cd0SMarc Bonnici {
42*a8be4cd0SMarc Bonnici 	return 0;
43*a8be4cd0SMarc Bonnici }
44*a8be4cd0SMarc Bonnici int plat_spmc_shmem_reclaim(struct ffa_mtd *desc)
45*a8be4cd0SMarc Bonnici {
46*a8be4cd0SMarc Bonnici 	return 0;
47*a8be4cd0SMarc Bonnici }
48