From 2090e55283c4bf85c7a61735ca0e872745c55896 Mon Sep 17 00:00:00 2001 From: Manish V Badarkhe Date: Tue, 21 Jun 2022 18:11:53 +0100 Subject: [PATCH] feat(drtm): take DRTM components measurements before DLME launch Taken measurement of various DRTM components in the Event Log buffer to pass it to DLME. Change-Id: Ic56620161f42596d22bf40d5c83c041cbce0b618 Signed-off-by: Manish V Badarkhe --- services/std_svc/drtm/drtm_main.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/services/std_svc/drtm/drtm_main.c b/services/std_svc/drtm/drtm_main.c index 53aafeb4b..a96706d59 100644 --- a/services/std_svc/drtm/drtm_main.c +++ b/services/std_svc/drtm/drtm_main.c @@ -19,6 +19,7 @@ #include #include #include "drtm_main.h" +#include "drtm_measurements.h" #include "drtm_remediation.h" #include #include @@ -392,6 +393,27 @@ static uint64_t drtm_dynamic_launch(uint64_t x1, void *handle) SMC_RET1(handle, ret); } + /* + * The DMA protection is now engaged. Note that any failure mode that + * returns an error to the DRTM-launch caller must now disengage DMA + * protections before returning to the caller. + */ + + ret = drtm_take_measurements(&args); + if (ret != SUCCESS) { + goto err_undo_dma_prot; + } + + SMC_RET1(handle, ret); + +err_undo_dma_prot: + dma_prot_ret = drtm_dma_prot_disengage(); + if (dma_prot_ret != SUCCESS) { + ERROR("%s(): drtm_dma_prot_disengage() failed unexpectedly" + " rc=%d\n", __func__, ret); + panic(); + } + SMC_RET1(handle, ret); }