1 /* 2 * Arm SCP/MCP Software 3 * Copyright (c) 2017-2021, Arm Limited and Contributors. All rights reserved. 4 * 5 * SPDX-License-Identifier: BSD-3-Clause 6 * 7 * Description: 8 * Software defined memory map shared between SCP and AP cores. 9 */ 10 11 #ifndef SOFTWARE_MMAP_H 12 #define SOFTWARE_MMAP_H 13 14 #include "system_mmap.h" 15 16 #include <fwk_macros.h> 17 18 /* 19 * The 4KiB AP/SCP Shared memory at the base of Trusted SRAM is used for several 20 * purposes. These are: the Shared Data Storage (SDS) Memory Region, the SCMI 21 * secure payload areas, and the context area for Application Processor 22 * firmware. 23 * 24 * Shared Data Storage (SDS) Memory Region: Used for structured storage of data 25 * that is shared between SCP Firmware and Application Processor firmware. The 26 * SDS Memory Region occupies the area between the context region base and 27 * the SCMI Secure Payload base. 28 * 29 * SCMI Secure Payload Areas: Storage for SCMI message contents in both the 30 * Agent->Platform and Platform->Agent directions. 31 * 32 * Application Processor Context Area: The usage of this area is defined by the 33 * firmware running on the Application Processors. The SCP Firmware must zero 34 * this memory before releasing any Application Processors. This area must 35 * always be located in the top 64 bytes of the 4KiB reserved region. 36 * 37 * +-----------------------+ 4096 38 * | | 39 * 64B | AP Context Area | 40 * | | 41 * +-----------------------+ 42 * | | 43 * 256B | Unused | 44 * | | 45 * +-----------------------+ 46 * | | 47 * | SCMI Sec. Payload | 48 * 128B | Platform to Agent | 49 * | | 50 * +-----------------------+ 51 * | | 52 * 128B | SCMI Sec. Payload | 53 * | Agent to Platform | 54 * | | 55 * +-----------------------+ 56 * | | 57 * 3520B | SDS Memory Region | 58 * | | 59 * +-----------------------+ 0 60 */ 61 62 /* Secure shared memory at the base of Trusted SRAM */ 63 #define SHARED_SECURE_BASE (TRUSTED_RAM_BASE) 64 #define SHARED_SECURE_SIZE (4 * FWK_KIB) 65 66 /* SDS Memory Region */ 67 #define SDS_SECURE_BASE (SHARED_SECURE_BASE) 68 #define SDS_SECURE_SIZE (3520) 69 70 /* AP Context Area */ 71 #define AP_CONTEXT_BASE (SHARED_SECURE_BASE + SHARED_SECURE_SIZE - \ 72 AP_CONTEXT_SIZE) 73 #define AP_CONTEXT_SIZE (64) 74 75 /* SCMI Secure Payload Areas */ 76 #define SCMI_PAYLOAD_SIZE (128) 77 #define SCMI_PAYLOAD_S_A2P_BASE (SDS_SECURE_BASE + SDS_SECURE_SIZE) 78 #define SCMI_PAYLOAD_S_P2A_BASE (SCMI_PAYLOAD_S_A2P_BASE + SCMI_PAYLOAD_SIZE) 79 80 /* 81 * The 4KiB AP/SCP Shared memory at the base of Non-trusted SRAM is used for the 82 * SCMI non-secure payload areas. 83 * 84 * Shared Data Storage (SDS) Memory Region: Used for structured storage of data 85 * that is shared between SCP Firmware and Application Processor firmware. It 86 * exists along the SDS region in secure RAM so that AP code unable to access 87 * the secure RAM is still able to use SDS, if required. 88 * 89 * Two SCMI non-Secure Payload Areas: Storage for SCMI message contents in both 90 * the Agent->Platform and Platform->Agent directions. 91 * 92 * +-----------------------+ 4096 93 * 2560B | Unused | 94 * +-----------------------+ 95 * | | 96 * 1024B | Non-Sec. SDS memory | 97 * | region | 98 * | | 99 * +-----------------------+ 100 * | | 101 * | Non-Sec. Channel 1 | 102 * | SCMI non-Sec. Payload | 103 * 128B | Platform to Agent | 104 * | | 105 * +-----------------------+ 106 * | | 107 * | Non-Sec. Channel 1 | 108 * 128B | SCMI non-Sec. Payload | 109 * | Agent to Platform | 110 * | | 111 * +-----------------------+ 112 * | | 113 * | Non-Sec. Channel 0 | 114 * | SCMI non-Sec. Payload | 115 * 128B | Platform to Agent | 116 * | | 117 * +-----------------------+ 118 * | | 119 * | Non-Sec. Channel 0 | 120 * 128B | SCMI non-Sec. Payload | 121 * | Agent to Platform | 122 * | | 123 * +-----------------------+ 0 124 */ 125 126 /* Non-secure shared memory at the base of Non-trusted SRAM */ 127 #define SHARED_NONSECURE_BASE (NONTRUSTED_RAM_BASE) 128 #define SHARED_NONSECURE_SIZE (4 * FWK_KIB) 129 130 /* SCMI Non-Secure Payload Areas */ 131 #define SCMI_PAYLOAD0_NS_A2P_BASE (SHARED_NONSECURE_BASE) 132 #define SCMI_PAYLOAD0_NS_P2A_BASE (SCMI_PAYLOAD0_NS_A2P_BASE + \ 133 SCMI_PAYLOAD_SIZE) 134 #define SCMI_PAYLOAD1_NS_A2P_BASE (SCMI_PAYLOAD0_NS_P2A_BASE + \ 135 SCMI_PAYLOAD_SIZE) 136 #define SCMI_PAYLOAD1_NS_P2A_BASE (SCMI_PAYLOAD1_NS_A2P_BASE + \ 137 SCMI_PAYLOAD_SIZE) 138 139 /* SDS Memory Region */ 140 #define SDS_NONSECURE_BASE (SCMI_PAYLOAD1_NS_P2A_BASE + \ 141 SCMI_PAYLOAD_SIZE) 142 #define SDS_NONSECURE_SIZE (1024) 143 144 #endif /* SOFTWARE_MMAP_H */ 145