mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 01:24:27 +00:00
feat(fvp): capture timestamps in bl stages
When ENABLE_RUNTIME_INSTRUMENTATION flag is set timestamps are captured and output to the fvp console at various boot stages using the PMF library (which are based on aarch timers). Timestamps are captured at entry and exit points for Bl1, Bl2 and, Bl3 respectively. Change-Id: I7c0c502e5dbf73d711700b2fe0085ca3eb9346d2 Signed-off-by: Thaddeus Serna <Thaddeus.Gonzalez-Serna@arm.com>
This commit is contained in:
parent
d2b66cc87e
commit
ed8f06ddda
6 changed files with 84 additions and 6 deletions
|
@ -25,6 +25,10 @@ ifeq (${TRUSTED_BOARD_BOOT},1)
|
|||
BL1_SOURCES += bl1/bl1_fwu.c
|
||||
endif
|
||||
|
||||
ifeq (${ENABLE_PMF},1)
|
||||
BL1_SOURCES += lib/pmf/pmf_main.c
|
||||
endif
|
||||
|
||||
ifneq ($(findstring gcc,$(notdir $(LD))),)
|
||||
BL1_LDFLAGS += -Wl,--sort-section=alignment
|
||||
else ifneq ($(findstring ld,$(notdir $(LD))),)
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2013-2022, Arm Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2013-2023, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -17,7 +17,9 @@
|
|||
#include <drivers/auth/auth_mod.h>
|
||||
#include <drivers/auth/crypto_mod.h>
|
||||
#include <drivers/console.h>
|
||||
#include <lib/bootmarker_capture.h>
|
||||
#include <lib/cpus/errata.h>
|
||||
#include <lib/pmf/pmf.h>
|
||||
#include <lib/utils.h>
|
||||
#include <plat/common/platform.h>
|
||||
#include <smccc_helpers.h>
|
||||
|
@ -31,6 +33,11 @@ static void bl1_load_bl2(void);
|
|||
uint64_t bl1_apiakey[2];
|
||||
#endif
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_REGISTER_SERVICE(bl_svc, PMF_RT_INSTR_SVC_ID,
|
||||
BL_TOTAL_IDS, PMF_DUMP_ENABLE)
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
* Helper utility to calculate the BL2 memory layout taking into consideration
|
||||
* the BL1 RW data assuming that it is at the top of the memory layout.
|
||||
|
@ -81,6 +88,10 @@ void bl1_main(void)
|
|||
{
|
||||
unsigned int image_id;
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_CAPTURE_TIMESTAMP(bl_svc, BL1_ENTRY, PMF_CACHE_MAINT);
|
||||
#endif
|
||||
|
||||
/* Announce our arrival */
|
||||
NOTICE(FIRMWARE_WELCOME_STR);
|
||||
NOTICE("BL1: %s\n", version_string);
|
||||
|
@ -156,6 +167,10 @@ void bl1_main(void)
|
|||
|
||||
bl1_prepare_next_image(image_id);
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_CAPTURE_TIMESTAMP(bl_svc, BL1_EXIT, PMF_CACHE_MAINT);
|
||||
#endif
|
||||
|
||||
console_flush();
|
||||
}
|
||||
|
||||
|
|
|
@ -49,3 +49,7 @@ endif
|
|||
|
||||
BL2_DEFAULT_LINKER_SCRIPT_SOURCE := bl2/bl2_el3.ld.S
|
||||
endif
|
||||
|
||||
ifeq (${ENABLE_PMF},1)
|
||||
BL2_SOURCES += lib/pmf/pmf_main.c
|
||||
endif
|
|
@ -16,7 +16,9 @@
|
|||
#include <drivers/auth/crypto_mod.h>
|
||||
#include <drivers/console.h>
|
||||
#include <drivers/fwu/fwu.h>
|
||||
#include <lib/bootmarker_capture.h>
|
||||
#include <lib/extensions/pauth.h>
|
||||
#include <lib/pmf/pmf.h>
|
||||
#include <plat/common/platform.h>
|
||||
|
||||
#include "bl2_private.h"
|
||||
|
@ -27,6 +29,11 @@
|
|||
#define NEXT_IMAGE "BL32"
|
||||
#endif
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_REGISTER_SERVICE(bl_svc, PMF_RT_INSTR_SVC_ID,
|
||||
BL_TOTAL_IDS, PMF_DUMP_ENABLE);
|
||||
#endif
|
||||
|
||||
#if RESET_TO_BL2
|
||||
/*******************************************************************************
|
||||
* Setup function for BL2 when RESET_TO_BL2=1
|
||||
|
@ -81,6 +88,10 @@ void bl2_main(void)
|
|||
{
|
||||
entry_point_info_t *next_bl_ep_info;
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_CAPTURE_TIMESTAMP(bl_svc, BL2_ENTRY, PMF_CACHE_MAINT);
|
||||
#endif
|
||||
|
||||
NOTICE("BL2: %s\n", version_string);
|
||||
NOTICE("BL2: %s\n", build_message);
|
||||
|
||||
|
@ -118,8 +129,6 @@ void bl2_main(void)
|
|||
disable_mmu_icache_secure();
|
||||
#endif /* !__aarch64__ */
|
||||
|
||||
console_flush();
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
/*
|
||||
* Disable pointer authentication before running next boot image
|
||||
|
@ -127,6 +136,12 @@ void bl2_main(void)
|
|||
pauth_disable_el1();
|
||||
#endif /* ENABLE_PAUTH */
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_CAPTURE_TIMESTAMP(bl_svc, BL2_EXIT, PMF_CACHE_MAINT);
|
||||
#endif
|
||||
|
||||
console_flush();
|
||||
|
||||
/*
|
||||
* Run next BL image via an SMC to BL1. Information on how to pass
|
||||
* control to the BL32 (if present) and BL33 software images will
|
||||
|
@ -137,6 +152,9 @@ void bl2_main(void)
|
|||
|
||||
NOTICE("BL2: Booting " NEXT_IMAGE "\n");
|
||||
print_entry_point_info(next_bl_ep_info);
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_CAPTURE_TIMESTAMP(bl_svc, BL2_EXIT, PMF_CACHE_MAINT);
|
||||
#endif
|
||||
console_flush();
|
||||
|
||||
#if ENABLE_PAUTH
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2013-2022, Arm Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2013-2023, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -17,6 +17,7 @@
|
|||
#include <common/feat_detect.h>
|
||||
#include <common/runtime_svc.h>
|
||||
#include <drivers/console.h>
|
||||
#include <lib/bootmarker_capture.h>
|
||||
#include <lib/el3_runtime/context_mgmt.h>
|
||||
#include <lib/pmf/pmf.h>
|
||||
#include <lib/runtime_instr.h>
|
||||
|
@ -24,8 +25,13 @@
|
|||
#include <services/std_svc.h>
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_REGISTER_SERVICE_SMC(rt_instr_svc, PMF_RT_INSTR_SVC_ID,
|
||||
RT_INSTR_TOTAL_IDS, PMF_STORE_ENABLE)
|
||||
PMF_REGISTER_SERVICE_SMC(rt_instr_svc, PMF_RT_INSTR_SVC_ID,
|
||||
RT_INSTR_TOTAL_IDS, PMF_STORE_ENABLE)
|
||||
#endif
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_REGISTER_SERVICE(bl_svc, PMF_RT_INSTR_SVC_ID,
|
||||
BL_TOTAL_IDS, PMF_DUMP_ENABLE)
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
|
@ -123,6 +129,10 @@ void bl31_main(void)
|
|||
detect_arch_features();
|
||||
#endif /* FEATURE_DETECTION */
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_CAPTURE_TIMESTAMP(bl_svc, BL31_ENTRY, PMF_CACHE_MAINT);
|
||||
#endif
|
||||
|
||||
#ifdef SUPPORT_UNKNOWN_MPID
|
||||
if (unsupported_mpid_flag == 0) {
|
||||
NOTICE("Unsupported MPID detected!\n");
|
||||
|
@ -201,6 +211,11 @@ void bl31_main(void)
|
|||
* from BL31
|
||||
*/
|
||||
bl31_plat_runtime_setup();
|
||||
|
||||
#if ENABLE_RUNTIME_INSTRUMENTATION
|
||||
PMF_CAPTURE_TIMESTAMP(bl_svc, BL31_EXIT, PMF_CACHE_MAINT);
|
||||
console_flush();
|
||||
#endif
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
|
|
22
include/lib/bootmarker_capture.h
Normal file
22
include/lib/bootmarker_capture.h
Normal file
|
@ -0,0 +1,22 @@
|
|||
/*
|
||||
* Copyright (c) 2023, Arm Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#ifndef BOOTMARKER_CAPTURE_H
|
||||
#define BOOTMARKER_CAPTURE_H
|
||||
|
||||
#define BL1_ENTRY U(0)
|
||||
#define BL1_EXIT U(1)
|
||||
#define BL2_ENTRY U(2)
|
||||
#define BL2_EXIT U(3)
|
||||
#define BL31_ENTRY U(4)
|
||||
#define BL31_EXIT U(5)
|
||||
#define BL_TOTAL_IDS U(6)
|
||||
|
||||
#ifdef __ASSEMBLER__
|
||||
PMF_DECLARE_CAPTURE_TIMESTAMP(bl_svc)
|
||||
#endif /*__ASSEMBLER__*/
|
||||
|
||||
#endif /*BOOTMARKER_CAPTURE_H*/
|
Loading…
Add table
Reference in a new issue