xref: /rk3399_ARM-atf/services/std_svc/drtm/drtm_main.h (revision 63d2020f577aadb9f600a7f1a525d427117fd11d)
1e62748e3SManish V Badarkhe /*
289f5c753SStuart Yoder  * Copyright (c) 2022-2024 Arm Limited. All rights reserved.
3e62748e3SManish V Badarkhe  *
4e62748e3SManish V Badarkhe  * SPDX-License-Identifier:    BSD-3-Clause
5e62748e3SManish V Badarkhe  *
6e62748e3SManish V Badarkhe  */
7e62748e3SManish V Badarkhe #ifndef DRTM_MAIN_H
8e62748e3SManish V Badarkhe #define DRTM_MAIN_H
9e62748e3SManish V Badarkhe 
10e62748e3SManish V Badarkhe #include <stdint.h>
11e62748e3SManish V Badarkhe 
1240e1fad6SManish Pandey #include <assert.h>
13e62748e3SManish V Badarkhe #include <lib/smccc.h>
14e62748e3SManish V Badarkhe 
15d54792bdSManish V Badarkhe #include "drtm_dma_prot.h"
16d54792bdSManish V Badarkhe 
1740e1fad6SManish Pandey #define ALIGNED_UP(x, a) __extension__ ({ \
1840e1fad6SManish Pandey 	__typeof__(a) _a = (a); \
1940e1fad6SManish Pandey 	__typeof__(a) _one = 1; \
2040e1fad6SManish Pandey 	assert(IS_POWER_OF_TWO(_a)); \
2140e1fad6SManish Pandey 	((x) + (_a - _one)) & ~(_a - _one); \
2240e1fad6SManish Pandey })
2340e1fad6SManish Pandey 
2440e1fad6SManish Pandey #define ALIGNED_DOWN(x, a) __extension__ ({ \
2540e1fad6SManish Pandey 	__typeof__(a) _a = (a); \
2640e1fad6SManish Pandey 	__typeof__(a) _one = 1; \
2740e1fad6SManish Pandey 	assert(IS_POWER_OF_TWO(_a)); \
2840e1fad6SManish Pandey 	(x) & ~(_a - _one); \
2940e1fad6SManish Pandey })
3040e1fad6SManish Pandey 
3140e1fad6SManish Pandey #define DRTM_PAGE_SIZE		(4 * (1 << 10))
3240e1fad6SManish Pandey #define DRTM_PAGE_SIZE_STR	"4-KiB"
3340e1fad6SManish Pandey 
342b13a985SManish V Badarkhe #define DL_ARGS_GET_DMA_PROT_TYPE(a)    (((a)->features >> 3) & 0x7U)
3540814266SManish V Badarkhe #define DL_ARGS_GET_PCR_SCHEMA(a)	(((a)->features >> 1) & 0x3U)
3640814266SManish V Badarkhe #define DL_ARGS_GET_DLME_ENTRY_POINT(a)	\
3740814266SManish V Badarkhe 		(((a)->dlme_paddr + (a)->dlme_img_off + (a)->dlme_img_ep_off))
3840814266SManish V Badarkhe 
39c503ded2SManish V Badarkhe /*
40*63d2020fSManish V Badarkhe  * Minimum size of Event Log in DLME data (64 KiB)
41*63d2020fSManish V Badarkhe  */
42*63d2020fSManish V Badarkhe #define ARM_DRTM_MIN_EVENT_LOG_SIZE	U(0x10000)
43*63d2020fSManish V Badarkhe 
44*63d2020fSManish V Badarkhe /*
45c503ded2SManish V Badarkhe  * Range(Min/Max) of DRTM parameter structure versions supported
46c503ded2SManish V Badarkhe  */
47c503ded2SManish V Badarkhe #define ARM_DRTM_PARAMS_MIN_VERSION	U(1)
48c503ded2SManish V Badarkhe #define ARM_DRTM_PARAMS_MAX_VERSION	U(1)
49c503ded2SManish V Badarkhe 
50d1747e1bSManish Pandey enum drtm_dlme_el {
51d1747e1bSManish Pandey 	DLME_AT_EL1 = MODE_EL1,
52d1747e1bSManish Pandey 	DLME_AT_EL2 = MODE_EL2
53d1747e1bSManish Pandey };
54d1747e1bSManish Pandey 
55e62748e3SManish V Badarkhe enum drtm_retc {
56e62748e3SManish V Badarkhe 	SUCCESS = SMC_OK,
57e62748e3SManish V Badarkhe 	NOT_SUPPORTED = SMC_UNK,
58e62748e3SManish V Badarkhe 	INVALID_PARAMETERS = -2,
59e62748e3SManish V Badarkhe 	DENIED = -3,
60e62748e3SManish V Badarkhe 	NOT_FOUND = -4,
61e62748e3SManish V Badarkhe 	INTERNAL_ERROR = -5,
62e62748e3SManish V Badarkhe 	MEM_PROTECT_INVALID = -6,
6389f5c753SStuart Yoder 	COPROCESSOR_ERROR = -7,
6489f5c753SStuart Yoder 	OUT_OF_RESOURCE = -8,
6589f5c753SStuart Yoder 	INVALID_DATA = -9,
6689f5c753SStuart Yoder 	SECONDARY_PE_NOT_OFF = -10,
6789f5c753SStuart Yoder 	ALREADY_CLOSED = -11,
6889f5c753SStuart Yoder 	TPM_ERROR = -12
69e62748e3SManish V Badarkhe };
70e62748e3SManish V Badarkhe 
712a1cdee4Sjohpow01 typedef struct {
722a1cdee4Sjohpow01 	uint64_t tpm_features;
732a1cdee4Sjohpow01 	uint64_t minimum_memory_requirement;
742a1cdee4Sjohpow01 	uint64_t dma_prot_features;
752a1cdee4Sjohpow01 	uint64_t boot_pe_id;
762a1cdee4Sjohpow01 	uint64_t tcb_hash_features;
772a1cdee4Sjohpow01 } drtm_features_t;
782a1cdee4Sjohpow01 
7940e1fad6SManish Pandey struct __packed drtm_dl_args_v1 {
8040e1fad6SManish Pandey 	uint16_t version;	/* Must be 1. */
8140e1fad6SManish Pandey 	uint8_t __res[2];
8240e1fad6SManish Pandey 	uint32_t features;
8340e1fad6SManish Pandey 	uint64_t dlme_paddr;
8440e1fad6SManish Pandey 	uint64_t dlme_size;
8540e1fad6SManish Pandey 	uint64_t dlme_img_off;
8640e1fad6SManish Pandey 	uint64_t dlme_img_ep_off;
8740e1fad6SManish Pandey 	uint64_t dlme_img_size;
8840e1fad6SManish Pandey 	uint64_t dlme_data_off;
8940e1fad6SManish Pandey 	uint64_t dce_nwd_paddr;
9040e1fad6SManish Pandey 	uint64_t dce_nwd_size;
9140e1fad6SManish Pandey 	drtm_dl_dma_prot_args_v1_t dma_prot_args;
9240e1fad6SManish Pandey } __aligned(__alignof(uint16_t /* First member's type, `uint16_t version' */));
93d42119ccSManish V Badarkhe 
94d42119ccSManish V Badarkhe struct __packed dlme_data_header_v1 {
95d42119ccSManish V Badarkhe 	uint16_t version;	/* Must be 1. */
96d42119ccSManish V Badarkhe 	uint16_t this_hdr_size;
97d42119ccSManish V Badarkhe 	uint8_t __res[4];
98d42119ccSManish V Badarkhe 	uint64_t dlme_data_size;
99d42119ccSManish V Badarkhe 	uint64_t dlme_prot_regions_size;
100d42119ccSManish V Badarkhe 	uint64_t dlme_addr_map_size;
101d42119ccSManish V Badarkhe 	uint64_t dlme_tpm_log_size;
102d42119ccSManish V Badarkhe 	uint64_t dlme_tcb_hashes_table_size;
1035dde96b0SStuart Yoder 	uint64_t dlme_acpi_tables_region_size;
104d42119ccSManish V Badarkhe 	uint64_t dlme_impdef_region_size;
105d42119ccSManish V Badarkhe } __aligned(__alignof(uint16_t /* First member's type, `uint16_t version'. */));
106d42119ccSManish V Badarkhe 
107d42119ccSManish V Badarkhe typedef struct dlme_data_header_v1 struct_dlme_data_header;
10840e1fad6SManish Pandey 
1092a1cdee4Sjohpow01 drtm_memory_region_descriptor_table_t *drtm_build_address_map(void);
1102a1cdee4Sjohpow01 uint64_t drtm_get_address_map_size(void);
1112a1cdee4Sjohpow01 
11240e1fad6SManish Pandey /*
11340e1fad6SManish Pandey  * Version-independent type.  May be used to avoid excessive line of code
11440e1fad6SManish Pandey  * changes when migrating to new struct versions.
11540e1fad6SManish Pandey  */
11640e1fad6SManish Pandey typedef struct drtm_dl_args_v1 struct_drtm_dl_args;
11740e1fad6SManish Pandey 
118e62748e3SManish V Badarkhe #endif /* DRTM_MAIN_H */
119