1 /*
2  * Arm SCP/MCP Software
3  * Copyright (c) 2018-2023, Arm Limited and Contributors. All rights reserved.
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  */
7 
8 #ifndef MORELLO_SDS_H
9 #define MORELLO_SDS_H
10 
11 #include <mod_sds.h>
12 
13 #include <stdint.h>
14 
15 /*
16  * Structure identifiers.
17  */
18 enum morello_sds_struct_id {
19     MORELLO_SDS_CPU_INFO = 1 | (1 << MOD_SDS_ID_VERSION_MAJOR_POS),
20     MORELLO_SDS_FIRMWARE_VERSION = 2 | (1 << MOD_SDS_ID_VERSION_MAJOR_POS),
21     MORELLO_SDS_PLATFORM_ID = 3 | (1 << MOD_SDS_ID_VERSION_MAJOR_POS),
22     MORELLO_SDS_RESET_SYNDROME = 4 | (1 << MOD_SDS_ID_VERSION_MAJOR_POS),
23     MORELLO_SDS_FEATURE_AVAILABILITY = 5 | (1 << MOD_SDS_ID_VERSION_MAJOR_POS),
24     MORELLO_SDS_CPU_BOOTCTR = 6 | (1 << MOD_SDS_ID_VERSION_MAJOR_POS),
25     MORELLO_SDS_CPU_FLAGS = 7 | (1 << MOD_SDS_ID_VERSION_MAJOR_POS),
26     MORELLO_SDS_PLATFORM_INFO = 8 | (1 << MOD_SDS_ID_VERSION_MAJOR_POS),
27 };
28 
29 enum morello_sds_region_idx {
30     MORELLO_SDS_REGION_SECURE,
31 #ifdef BUILD_MODE_DEBUG
32     MORELLO_SDS_REGION_NONSECURE,
33 #endif
34     MORELLO_SDS_REGION_COUNT,
35 };
36 
37 /*
38  * Structure sizes.
39  */
40 #define MORELLO_SDS_CPU_INFO_SIZE 4
41 #define MORELLO_SDS_FIRMWARE_VERSION_SIZE 4
42 #define MORELLO_SDS_PLATFORM_ID_SIZE 8
43 #define MORELLO_SDS_RESET_SYNDROME_SIZE 4
44 #define MORELLO_SDS_FEATURE_AVAILABILITY_SIZE 4
45 #define MORELLO_SDS_CPU_BOOTCTR_SIZE 256
46 #define MORELLO_SDS_CPU_FLAGS_SIZE 256
47 #if defined(PLAT_FVP)
48 #    define MORELLO_SDS_PLATFORM_INFO_SIZE 8
49 #else
50 #    define MORELLO_SDS_PLATFORM_INFO_SIZE 26
51 #endif
52 
53 /*
54  * Field offsets for morello silicon revision.
55  */
56 #define MORELLO_SILICON_REVISION_R_POS 16
57 #define MORELLO_SILICON_REVISION_P_POS 0
58 
59 /*
60  * Field masks and offsets for the MORELLO_SDS_AP_CPU_INFO structure.
61  */
62 #define MORELLO_SDS_CPU_INFO_PRIMARY_MASK 0xFFFFFFFF
63 #define MORELLO_SDS_CPU_INFO_PRIMARY_POS 0
64 
65 /*
66  * Platform information
67  */
68 struct morello_sds_platid {
69     /* Subsystem part number */
70     uint32_t platform_identifier;
71     /* Platform type information */
72     uint32_t platform_type_identifier;
73 };
74 
75 /*
76  * Field masks and offsets for the MORELLO_SDS_FEATURE_AVAILABILITY structure.
77  */
78 #define MORELLO_SDS_FEATURE_FIRMWARE_MASK 0x1
79 #define MORELLO_SDS_FEATURE_DMC_MASK 0x2
80 #define MORELLO_SDS_FEATURE_MESSAGING_MASK 0x4
81 
82 #define MORELLO_SDS_FEATURE_FIRMWARE_POS 0
83 #define MORELLO_SDS_FEATURE_DMC_POS 1
84 #define MORELLO_SDS_FEATURE_MESSAGING_POS 2
85 
86 /*
87  * Element identifiers for SDS structures
88  */
89 #define SDS_ELEMENT_IDX_FEATURE_AVAILABILITY 3
90 #define SDS_ELEMENT_IDX_PLATFORM_INFO 4
91 #endif /* MORELLO_SDS_H */
92