mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-17 10:04:26 +00:00

Retrieve DLME image authentication features and report them back to the DCE preamble. Currently, this value is always set to 0, as no platform supports DLME authentication. Additionally, the default schema is always used instead of the DLME PCR schema since DLME authentication is not currently supported. This change primarily upgrades the DRTM parameters version to V2, aligning with DRTM spec v1.1 [1]. [1]: https://developer.arm.com/documentation/den0113/c/?lang=en Change-Id: Ie2ceb0d2ff49465643597e8725710a93d89e74a2 Signed-off-by: Manish V Badarkhe <Manish.Badarkhe@arm.com>
119 lines
2.9 KiB
C
119 lines
2.9 KiB
C
/*
|
|
* Copyright (c) 2022-2025 Arm Limited. All rights reserved.
|
|
*
|
|
* SPDX-License-Identifier: BSD-3-Clause
|
|
*
|
|
*/
|
|
#ifndef DRTM_MAIN_H
|
|
#define DRTM_MAIN_H
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <assert.h>
|
|
#include <lib/smccc.h>
|
|
|
|
#include "drtm_dma_prot.h"
|
|
|
|
#define ALIGNED_UP(x, a) __extension__ ({ \
|
|
__typeof__(a) _a = (a); \
|
|
__typeof__(a) _one = 1; \
|
|
assert(IS_POWER_OF_TWO(_a)); \
|
|
((x) + (_a - _one)) & ~(_a - _one); \
|
|
})
|
|
|
|
#define ALIGNED_DOWN(x, a) __extension__ ({ \
|
|
__typeof__(a) _a = (a); \
|
|
__typeof__(a) _one = 1; \
|
|
assert(IS_POWER_OF_TWO(_a)); \
|
|
(x) & ~(_a - _one); \
|
|
})
|
|
|
|
#define DRTM_PAGE_SIZE (4 * (1 << 10))
|
|
#define DRTM_PAGE_SIZE_STR "4-KiB"
|
|
|
|
#define DL_ARGS_GET_DMA_PROT_TYPE(a) (((a)->features >> 3) & 0x7U)
|
|
#define DL_ARGS_GET_PCR_SCHEMA(a) (((a)->features >> 1) & 0x3U)
|
|
#define DL_ARGS_GET_DLME_ENTRY_POINT(a) \
|
|
(((a)->dlme_paddr + (a)->dlme_img_off + (a)->dlme_img_ep_off))
|
|
|
|
/*
|
|
* Minimum size of Event Log in DLME data (64 KiB)
|
|
*/
|
|
#define ARM_DRTM_MIN_EVENT_LOG_SIZE U(0x10000)
|
|
|
|
/*
|
|
* Range(Min/Max) of DRTM parameter structure versions supported
|
|
*/
|
|
#define ARM_DRTM_PARAMS_MIN_VERSION U(1)
|
|
#define ARM_DRTM_PARAMS_MAX_VERSION U(2)
|
|
|
|
enum drtm_dlme_el {
|
|
DLME_AT_EL1 = MODE_EL1,
|
|
DLME_AT_EL2 = MODE_EL2
|
|
};
|
|
|
|
enum drtm_retc {
|
|
SUCCESS = SMC_OK,
|
|
NOT_SUPPORTED = SMC_UNK,
|
|
INVALID_PARAMETERS = -2,
|
|
DENIED = -3,
|
|
NOT_FOUND = -4,
|
|
INTERNAL_ERROR = -5,
|
|
MEM_PROTECT_INVALID = -6,
|
|
COPROCESSOR_ERROR = -7,
|
|
OUT_OF_RESOURCE = -8,
|
|
INVALID_DATA = -9,
|
|
SECONDARY_PE_NOT_OFF = -10,
|
|
ALREADY_CLOSED = -11,
|
|
TPM_ERROR = -12
|
|
};
|
|
|
|
typedef struct {
|
|
uint64_t tpm_features;
|
|
uint64_t minimum_memory_requirement;
|
|
uint64_t dma_prot_features;
|
|
uint64_t boot_pe_id;
|
|
uint64_t tcb_hash_features;
|
|
uint64_t dlme_image_auth_features;
|
|
} drtm_features_t;
|
|
|
|
struct __packed drtm_dl_args_v1 {
|
|
uint16_t version; /* Must be 1. */
|
|
uint8_t __res[2];
|
|
uint32_t features;
|
|
uint64_t dlme_paddr;
|
|
uint64_t dlme_size;
|
|
uint64_t dlme_img_off;
|
|
uint64_t dlme_img_ep_off;
|
|
uint64_t dlme_img_size;
|
|
uint64_t dlme_data_off;
|
|
uint64_t dce_nwd_paddr;
|
|
uint64_t dce_nwd_size;
|
|
drtm_dl_dma_prot_args_v1_t dma_prot_args;
|
|
} __aligned(__alignof(uint16_t /* First member's type, `uint16_t version' */));
|
|
|
|
struct __packed dlme_data_header_v1 {
|
|
uint16_t version; /* Must be 1. */
|
|
uint16_t this_hdr_size;
|
|
uint8_t __res[4];
|
|
uint64_t dlme_data_size;
|
|
uint64_t dlme_prot_regions_size;
|
|
uint64_t dlme_addr_map_size;
|
|
uint64_t dlme_tpm_log_size;
|
|
uint64_t dlme_tcb_hashes_table_size;
|
|
uint64_t dlme_acpi_tables_region_size;
|
|
uint64_t dlme_impdef_region_size;
|
|
} __aligned(__alignof(uint16_t /* First member's type, `uint16_t version'. */));
|
|
|
|
typedef struct dlme_data_header_v1 struct_dlme_data_header;
|
|
|
|
drtm_memory_region_descriptor_table_t *drtm_build_address_map(void);
|
|
uint64_t drtm_get_address_map_size(void);
|
|
|
|
/*
|
|
* Version-independent type. May be used to avoid excessive line of code
|
|
* changes when migrating to new struct versions.
|
|
*/
|
|
typedef struct drtm_dl_args_v1 struct_drtm_dl_args;
|
|
|
|
#endif /* DRTM_MAIN_H */
|