/* SPDX-License-Identifier: GPL-2.0+ */ /* * Copyright 2022-2023 Arm Limited and/or its affiliates * * Authors: * Abdellatif El Khlifi */ #ifndef __SANDBOX_ARM_FFA_PRV_H #define __SANDBOX_ARM_FFA_PRV_H #include /* This header is exclusively used by the Sandbox FF-A driver and emulator */ /* Non-secure physical FF-A instance */ #define NS_PHYS_ENDPOINT_ID (0) #define GET_NS_PHYS_ENDPOINT_ID_MASK GENMASK(31, 16) #define GET_NS_PHYS_ENDPOINT_ID(x) \ ((u16)(FIELD_GET(GET_NS_PHYS_ENDPOINT_ID_MASK, (x)))) /* Helper macro for reading the destination partition ID */ #define GET_DST_SP_ID_MASK GENMASK(15, 0) #define GET_DST_SP_ID(x) \ ((u16)(FIELD_GET(GET_DST_SP_ID_MASK, (x)))) /* Helper macro for setting the source partition ID */ #define PREP_SRC_SP_ID_MASK GENMASK(31, 16) #define PREP_SRC_SP_ID(x) \ (FIELD_PREP(PREP_SRC_SP_ID_MASK, (x))) /* Helper macro for setting the destination endpoint ID */ #define PREP_NS_PHYS_ENDPOINT_ID_MASK GENMASK(15, 0) #define PREP_NS_PHYS_ENDPOINT_ID(x) \ (FIELD_PREP(PREP_NS_PHYS_ENDPOINT_ID_MASK, (x))) /* RX/TX buffers minimum size */ #define RXTX_BUFFERS_MIN_SIZE (RXTX_4K) #define RXTX_BUFFERS_MIN_PAGES (1) /* MBZ registers info */ /* x1-x7 MBZ */ #define FFA_X1X7_MBZ_CNT (7) #define FFA_X1X7_MBZ_REG_START (&res->a1) /* x4-x7 MBZ */ #define FFA_X4X7_MBZ_CNT (4) #define FFA_X4X7_MBZ_REG_START (&res->a4) /* x3-x7 MBZ */ #define FFA_X3X7_MBZ_CNT (5) #define FFA_X3_MBZ_REG_START (&res->a3) /* number of emulated FF-A secure partitions (SPs) */ #define SANDBOX_PARTITIONS_CNT (4) /* Binary data of the emulated services UUIDs */ /* service 1 UUID binary data (little-endian format) */ #define SANDBOX_SERVICE1_UUID_A1 0xed32d533 #define SANDBOX_SERVICE1_UUID_A2 0x99e64209 #define SANDBOX_SERVICE1_UUID_A3 0x9cc02d72 #define SANDBOX_SERVICE1_UUID_A4 0xcdd998a7 /* service 2 UUID binary data (little-endian format) */ #define SANDBOX_SERVICE2_UUID_A1 0xed32d544 #define SANDBOX_SERVICE2_UUID_A2 0x99e64209 #define SANDBOX_SERVICE2_UUID_A3 0x9cc02d72 #define SANDBOX_SERVICE2_UUID_A4 0xcdd998a7 /** * struct ffa_rxtxpair_info - structure hosting the RX/TX buffers flags * @rxbuf_owned: RX buffer ownership flag (the owner is non secure world) * @rxbuf_mapped: RX buffer mapping flag * @txbuf_owned TX buffer ownership flag * @txbuf_mapped: TX buffer mapping flag * @rxtx_buf_size: RX/TX buffers size * * Hosts the ownership/mapping flags of the RX/TX buffers * When a buffer is owned/mapped its corresponding flag is set to 1 otherwise 0. */ struct ffa_rxtxpair_info { u8 rxbuf_owned; u8 rxbuf_mapped; u8 txbuf_owned; u8 txbuf_mapped; u32 rxtx_buf_size; }; /** * struct sandbox_ffa_emul - emulator data * * @fwk_version: FF-A framework version * @id: u-boot endpoint ID * @partitions: The partitions descriptors structure * @pair: The RX/TX buffers pair * @pair_info: The RX/TX buffers pair flags and size * @test_ffa_data: The data of the FF-A bus under test * * Hosts all the emulated secure world data. */ struct sandbox_ffa_emul { u32 fwk_version; u16 id; struct ffa_partitions partitions; struct ffa_rxtxpair pair; struct ffa_rxtxpair_info pair_info; }; /** * ffa_emul_find() - Finds the FF-A emulator * @dev: the sandbox FF-A device (sandbox-arm-ffa) * @emulp: the FF-A emulator device (sandbox-ffa-emul) * Return: * 0 on success. Otherwise, failure */ int ffa_emul_find(struct udevice *dev, struct udevice **emulp); #endif