Browse Source

feat(fvp): introduce PLATFORM_TEST_RAS_FFH config

While doing RAS related tests there were few patches related with
fault injection and handling were applied through CI hooks.
These patches were invisible as they were applied and removed after the
build is done.

This patch introduces build macro PLATFORM_TEST_RAS_FFH and moves the
patches applied through CI under this.

Signed-off-by: Manish Pandey <manish.pandey2@arm.com>
Change-Id: Iddba52f3ebf21f575a473e50c607a944391156b9
pull/1982/merge
Manish Pandey 2 years ago
parent
commit
5602ce1d8d
  1. 51
      plat/arm/board/fvp/aarch64/fvp_ras.c
  2. 12
      plat/arm/board/fvp/include/platform_def.h
  3. 12
      plat/arm/board/fvp/platform.mk

51
plat/arm/board/fvp/aarch64/fvp_ras.c

@ -4,12 +4,63 @@
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <inttypes.h>
#include <stdint.h>
#include <lib/extensions/ras.h>
#include <services/sdei.h>
#ifdef PLATFORM_TEST_RAS_FFH
static int injected_fault_handler(const struct err_record_info *info,
int probe_data, const struct err_handler_data *const data)
{
uint64_t status;
int ret;
/*
* The faulting error record is already selected by the SER probe
* function.
*/
status = read_erxstatus_el1();
ERROR("Fault reported by system error record %d on 0x%lx: status=0x%" PRIx64 "\n",
probe_data, read_mpidr_el1(), status);
ERROR(" exception reason=%u syndrome=0x%" PRIx64 "\n", data->ea_reason,
data->flags);
/* Clear error */
write_erxstatus_el1(status);
ret = sdei_dispatch_event(5000);
if (ret < 0) {
ERROR("Can't dispatch event to SDEI\n");
panic();
} else {
INFO("SDEI event dispatched\n");
}
return 0;
}
void plat_handle_uncontainable_ea(void)
{
/* Do not change the string, CI expects it. Wait forever */
INFO("Injected Uncontainable Error\n");
while (true) {
wfe();
}
}
#endif
struct ras_interrupt fvp_ras_interrupts[] = {
};
struct err_record_info fvp_err_records[] = {
#ifdef PLATFORM_TEST_RAS_FFH
/* Record for injected fault */
ERR_RECORD_SYSREG_V1(0, 2, ras_err_ser_probe_sysreg,
injected_fault_handler, NULL),
#endif
};
REGISTER_ERR_RECORD_INFO(fvp_err_records);

12
plat/arm/board/fvp/include/platform_def.h

@ -397,7 +397,17 @@ defined(IMAGE_BL2) && MEASURED_BOOT
#define PLAT_SDEI_DP_EVENT_MAX_CNT ARM_SDEI_DP_EVENT_MAX_CNT
#define PLAT_SDEI_DS_EVENT_MAX_CNT ARM_SDEI_DS_EVENT_MAX_CNT
#else
#define PLAT_ARM_PRIVATE_SDEI_EVENTS ARM_SDEI_PRIVATE_EVENTS
#if PLATFORM_TEST_RAS_FFH
#define PLAT_ARM_PRIVATE_SDEI_EVENTS \
ARM_SDEI_PRIVATE_EVENTS, \
SDEI_EXPLICIT_EVENT(5000, SDEI_MAPF_NORMAL), \
SDEI_EXPLICIT_EVENT(5001, SDEI_MAPF_NORMAL), \
SDEI_EXPLICIT_EVENT(5002, SDEI_MAPF_NORMAL), \
SDEI_EXPLICIT_EVENT(5003, SDEI_MAPF_CRITICAL), \
SDEI_EXPLICIT_EVENT(5004, SDEI_MAPF_CRITICAL)
#else
#define PLAT_ARM_PRIVATE_SDEI_EVENTS ARM_SDEI_PRIVATE_EVENTS
#endif
#define PLAT_ARM_SHARED_SDEI_EVENTS ARM_SDEI_SHARED_EVENTS
#endif

12
plat/arm/board/fvp/platform.mk

@ -505,6 +505,11 @@ endif
PSCI_OS_INIT_MODE := 1
ifeq (${SPD},spmd)
BL31_SOURCES += plat/arm/board/fvp/fvp_spmd.c
endif
# Test specific macros, keep them at bottom of this file
$(eval $(call add_define,PLATFORM_TEST_EA_FFH))
ifeq (${PLATFORM_TEST_EA_FFH}, 1)
ifeq (${HANDLE_EA_EL3_FIRST_NS}, 0)
@ -513,6 +518,9 @@ ifeq (${PLATFORM_TEST_EA_FFH}, 1)
BL31_SOURCES += plat/arm/board/fvp/aarch64/fvp_ea.c
endif
ifeq (${SPD},spmd)
BL31_SOURCES += plat/arm/board/fvp/fvp_spmd.c
$(eval $(call add_define,PLATFORM_TEST_RAS_FFH))
ifeq (${PLATFORM_TEST_RAS_FFH}, 1)
ifeq (${RAS_EXTENSION}, 0)
$(error "PLATFORM_TEST_RAS_FFH expects RAS_EXTENSION to be 1")
endif
endif

Loading…
Cancel
Save