]> git.baikalelectronics.ru Git - arm-tf.git/commitdiff
feat(fvp): add platform hooks for DRTM DMA protection
authorLucian Paul-Trifu <lucian.paultrifu@gmail.com>
Wed, 22 Jun 2022 17:45:30 +0000 (18:45 +0100)
committerManish V Badarkhe <Manish.Badarkhe@arm.com>
Wed, 5 Oct 2022 14:25:28 +0000 (15:25 +0100)
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

include/plat/common/plat_drtm.h [new file with mode: 0644]
include/plat/common/platform.h
plat/arm/board/fvp/fvp_drtm_dma_prot.c [new file with mode: 0644]
plat/arm/board/fvp/platform.mk

diff --git a/include/plat/common/plat_drtm.h b/include/plat/common/plat_drtm.h
new file mode 100644 (file)
index 0000000..3c4e3d5
--- /dev/null
@@ -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 */
index da7462467c28fd5def9233dc83a7745ace8de811..58e08d4aa5518a7d3314c1a00defe89eeb25df12 100644 (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
diff --git a/plat/arm/board/fvp/fvp_drtm_dma_prot.c b/plat/arm/board/fvp/fvp_drtm_dma_prot.c
new file mode 100644 (file)
index 0000000..ec9cd7a
--- /dev/null
@@ -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;
+       }
+}
index a20343b356030d33d4afe1307f0fb16e18acd863..811b2754b76d65e78c114c1b7f3a17e159c999f7 100644 (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