feat(fvp): add platform hooks for DRTM DMA protection

Added necessary platform hooks for DRTM DMA protection.
These calls will be used by the subsequent DRTM implementation
patches.
DRTM platform API declarations have been listed down in a
separate header file.

Signed-off-by: Manish V Badarkhe <manish.badarkhe@arm.com>
Signed-off-by: Lucian Paul-Trifu <lucian.paultrifu@gmail.com>
Change-Id: Ib9726d1d3570800241bde702ee7006a64f1739ec
This commit is contained in:
Lucian Paul-Trifu 2022-06-22 18:45:30 +01:00 committed by Manish V Badarkhe
parent 6f70cce625
commit d72c486b52
4 changed files with 85 additions and 1 deletions

View file

@ -0,0 +1,17 @@
/*
* Copyright (c) 2022, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef PLAT_DRTM_H
#define PLAT_DRTM_H
/* platform-specific DMA protection functions */
bool plat_has_non_host_platforms(void);
bool plat_has_unmanaged_dma_peripherals(void);
unsigned int plat_get_total_smmus(void);
void plat_enumerate_smmus(const uintptr_t **smmus_out,
size_t *smmu_count_out);
#endif /* PLAT_DRTM_H */

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2013-2022, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2013-2022, Arm Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
@ -20,6 +20,9 @@
#include "plat_trng.h"
#endif
#include <drivers/fwu/fwu_metadata.h>
#if DRTM_SUPPORT
#include "plat_drtm.h"
#endif /* DRTM_SUPPORT */
/*******************************************************************************
* Forward declarations

View file

@ -0,0 +1,60 @@
/*
* Copyright (c) 2022, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <stdbool.h>
#include <stddef.h>
#include <drivers/arm/smmu_v3.h>
#include <lib/utils_def.h>
#include <plat/arm/common/arm_config.h>
#include <plat/common/platform.h>
#include <platform_def.h>
/**
* Array mentioning number of SMMUs supported by FVP
*/
static const uintptr_t fvp_smmus[] = {
PLAT_FVP_SMMUV3_BASE,
};
bool plat_has_non_host_platforms(void)
{
/* FVP base platforms typically have GPU, as per FVP Reference guide */
return true;
}
bool plat_has_unmanaged_dma_peripherals(void)
{
/*
* FVP Reference guide does not show devices that are described as
* DMA-capable but not managed by an SMMU in the FVP documentation.
* However, the SMMU seems to have only been introduced in the RevC
* revision.
*/
return (arm_config.flags & ARM_CONFIG_FVP_HAS_SMMUV3) == 0;
}
unsigned int plat_get_total_smmus(void)
{
if ((arm_config.flags & ARM_CONFIG_FVP_HAS_SMMUV3) != 0U) {
return ARRAY_SIZE(fvp_smmus);
} else {
return 0;
}
}
void plat_enumerate_smmus(const uintptr_t **smmus_out,
size_t *smmu_count_out)
{
if ((arm_config.flags & ARM_CONFIG_FVP_HAS_SMMUV3) != 0U) {
*smmus_out = fvp_smmus;
*smmu_count_out = ARRAY_SIZE(fvp_smmus);
} else {
*smmus_out = NULL;
*smmu_count_out = 0;
}
}

View file

@ -413,6 +413,10 @@ endif
endif
ifeq (${DRTM_SUPPORT}, 1)
BL31_SOURCES += plat/arm/board/fvp/fvp_drtm_dma_prot.c
endif
ifeq (${TRUSTED_BOARD_BOOT}, 1)
BL1_SOURCES += plat/arm/board/fvp/fvp_trusted_boot.c
BL2_SOURCES += plat/arm/board/fvp/fvp_trusted_boot.c