1*91f16700Schasinglulu /* 2*91f16700Schasinglulu * Copyright (c) 2022-2023, Arm Limited. All rights reserved. 3*91f16700Schasinglulu * 4*91f16700Schasinglulu * SPDX-License-Identifier: BSD-3-Clause 5*91f16700Schasinglulu */ 6*91f16700Schasinglulu 7*91f16700Schasinglulu #ifndef RMM_CORE_MANIFEST_H 8*91f16700Schasinglulu #define RMM_CORE_MANIFEST_H 9*91f16700Schasinglulu 10*91f16700Schasinglulu #include <assert.h> 11*91f16700Schasinglulu #include <stddef.h> 12*91f16700Schasinglulu #include <stdint.h> 13*91f16700Schasinglulu 14*91f16700Schasinglulu #include <lib/cassert.h> 15*91f16700Schasinglulu 16*91f16700Schasinglulu #define RMMD_MANIFEST_VERSION_MAJOR U(0) 17*91f16700Schasinglulu #define RMMD_MANIFEST_VERSION_MINOR U(2) 18*91f16700Schasinglulu 19*91f16700Schasinglulu /* 20*91f16700Schasinglulu * Manifest version encoding: 21*91f16700Schasinglulu * - Bit[31] RES0 22*91f16700Schasinglulu * - Bits [30:16] Major version 23*91f16700Schasinglulu * - Bits [15:0] Minor version 24*91f16700Schasinglulu */ 25*91f16700Schasinglulu #define SET_RMMD_MANIFEST_VERSION(_major, _minor) \ 26*91f16700Schasinglulu ((((_major) & 0x7FFF) << 16) | ((_minor) & 0xFFFF)) 27*91f16700Schasinglulu 28*91f16700Schasinglulu #define RMMD_MANIFEST_VERSION SET_RMMD_MANIFEST_VERSION( \ 29*91f16700Schasinglulu RMMD_MANIFEST_VERSION_MAJOR, \ 30*91f16700Schasinglulu RMMD_MANIFEST_VERSION_MINOR) 31*91f16700Schasinglulu 32*91f16700Schasinglulu #define RMMD_GET_MANIFEST_VERSION_MAJOR(_version) \ 33*91f16700Schasinglulu ((_version >> 16) & 0x7FFF) 34*91f16700Schasinglulu 35*91f16700Schasinglulu #define RMMD_GET_MANIFEST_VERSION_MINOR(_version) \ 36*91f16700Schasinglulu (_version & 0xFFFF) 37*91f16700Schasinglulu 38*91f16700Schasinglulu /* NS DRAM bank structure */ 39*91f16700Schasinglulu struct ns_dram_bank { 40*91f16700Schasinglulu uintptr_t base; /* Base address */ 41*91f16700Schasinglulu uint64_t size; /* Size of bank */ 42*91f16700Schasinglulu }; 43*91f16700Schasinglulu 44*91f16700Schasinglulu CASSERT(offsetof(struct ns_dram_bank, base) == 0UL, 45*91f16700Schasinglulu rmm_manifest_base_unaligned); 46*91f16700Schasinglulu CASSERT(offsetof(struct ns_dram_bank, size) == 8UL, 47*91f16700Schasinglulu rmm_manifest_size_unaligned); 48*91f16700Schasinglulu 49*91f16700Schasinglulu /* NS DRAM layout info structure */ 50*91f16700Schasinglulu struct ns_dram_info { 51*91f16700Schasinglulu uint64_t num_banks; /* Number of NS DRAM banks */ 52*91f16700Schasinglulu struct ns_dram_bank *banks; /* Pointer to ns_dram_bank[] */ 53*91f16700Schasinglulu uint64_t checksum; /* Checksum of ns_dram_info data */ 54*91f16700Schasinglulu }; 55*91f16700Schasinglulu 56*91f16700Schasinglulu CASSERT(offsetof(struct ns_dram_info, num_banks) == 0UL, 57*91f16700Schasinglulu rmm_manifest_num_banks_unaligned); 58*91f16700Schasinglulu CASSERT(offsetof(struct ns_dram_info, banks) == 8UL, 59*91f16700Schasinglulu rmm_manifest_dram_data_unaligned); 60*91f16700Schasinglulu CASSERT(offsetof(struct ns_dram_info, checksum) == 16UL, 61*91f16700Schasinglulu rmm_manifest_checksum_unaligned); 62*91f16700Schasinglulu 63*91f16700Schasinglulu /* Boot manifest core structure as per v0.2 */ 64*91f16700Schasinglulu struct rmm_manifest { 65*91f16700Schasinglulu uint32_t version; /* Manifest version */ 66*91f16700Schasinglulu uint32_t padding; /* RES0 */ 67*91f16700Schasinglulu uintptr_t plat_data; /* Manifest platform data */ 68*91f16700Schasinglulu struct ns_dram_info plat_dram; /* Platform NS DRAM data */ 69*91f16700Schasinglulu }; 70*91f16700Schasinglulu 71*91f16700Schasinglulu CASSERT(offsetof(struct rmm_manifest, version) == 0UL, 72*91f16700Schasinglulu rmm_manifest_version_unaligned); 73*91f16700Schasinglulu CASSERT(offsetof(struct rmm_manifest, plat_data) == 8UL, 74*91f16700Schasinglulu rmm_manifest_plat_data_unaligned); 75*91f16700Schasinglulu CASSERT(offsetof(struct rmm_manifest, plat_dram) == 16UL, 76*91f16700Schasinglulu rmm_manifest_plat_dram_unaligned); 77*91f16700Schasinglulu 78*91f16700Schasinglulu #endif /* RMM_CORE_MANIFEST_H */ 79