From 90e31479bfc55952243850250f37b757bcda5895 Mon Sep 17 00:00:00 2001 From: Andrew Thoelke Date: Thu, 26 Jun 2014 14:27:26 +0100 Subject: [PATCH] Support later revisions of the Foundation FVP The code in the FVP port which checks the platform type and revision information in the SYS_ID register strictly supported only the first revision of the Base and Foundation FVPs. The current check also does not reflect the fact that the board revision field is 'local' to the board type (HBI field). Support for a new Foundation model is required now, and the checking code is relaxed to allow execution (with a diagnostic) on unrecognised revisions of the Base and Foundation FVP. Change-Id: I7cd3519dfb56954aafe5f52ce1fcea0ee257ba9f --- plat/fvp/aarch64/fvp_common.c | 35 ++++++++++++++++++++++++++++++++--- plat/fvp/fvp_def.h | 7 +++++-- 2 files changed, 37 insertions(+), 5 deletions(-) diff --git a/plat/fvp/aarch64/fvp_common.c b/plat/fvp/aarch64/fvp_common.c index 580c79368b..ec81d5bbbc 100644 --- a/plat/fvp/aarch64/fvp_common.c +++ b/plat/fvp/aarch64/fvp_common.c @@ -131,8 +131,10 @@ int fvp_config_setup(void) bld = (sys_id >> SYS_ID_BLD_SHIFT) & SYS_ID_BLD_MASK; arch = (sys_id >> SYS_ID_ARCH_SHIFT) & SYS_ID_ARCH_MASK; - if ((rev != REV_FVP) || (arch != ARCH_MODEL)) + if (arch != ARCH_MODEL) { + ERROR("This firmware is for FVP models\n"); panic(); + } /* * The build field in the SYS_ID tells which variant of the GIC @@ -152,7 +154,8 @@ int fvp_config_setup(void) fvp_config[CONFIG_GICV_ADDR] = BASE_GICV_BASE; break; default: - assert(0); + ERROR("Unsupported board build %x\n", bld); + panic(); } /* @@ -167,6 +170,19 @@ int fvp_config_setup(void) fvp_config[CONFIG_BASE_MMAP] = 0; fvp_config[CONFIG_HAS_CCI] = 0; fvp_config[CONFIG_HAS_TZC] = 0; + + /* + * Check for supported revisions of Foundation FVP + * Allow future revisions to run but emit warning diagnostic + */ + switch (rev) { + case REV_FOUNDATION_V2_0: + case REV_FOUNDATION_V2_1: + break; + default: + WARN("Unrecognized Foundation FVP revision %x\n", rev); + break; + } break; case HBI_FVP_BASE: midr_pn = (read_midr() >> MIDR_PN_SHIFT) & MIDR_PN_MASK; @@ -180,9 +196,22 @@ int fvp_config_setup(void) fvp_config[CONFIG_BASE_MMAP] = 1; fvp_config[CONFIG_HAS_CCI] = 1; fvp_config[CONFIG_HAS_TZC] = 1; + + /* + * Check for supported revisions + * Allow future revisions to run but emit warning diagnostic + */ + switch (rev) { + case REV_FVP_BASE_V0: + break; + default: + WARN("Unrecognized Base FVP revision %x\n", rev); + break; + } break; default: - assert(0); + ERROR("Unsupported board HBI number 0x%x\n", hbi); + panic(); } return 0; diff --git a/plat/fvp/fvp_def.h b/plat/fvp/fvp_def.h index 59dcc90be4..19422fd49c 100644 --- a/plat/fvp/fvp_def.h +++ b/plat/fvp/fvp_def.h @@ -1,4 +1,4 @@ -/* +#/* * Copyright (c) 2014, ARM Limited and Contributors. All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -151,9 +151,12 @@ #define SYS_ID_BLD_LENGTH 4 -#define REV_FVP 0x0 #define HBI_FVP_BASE 0x020 +#define REV_FVP_BASE_V0 0x0 + #define HBI_FOUNDATION 0x010 +#define REV_FOUNDATION_V2_0 0x0 +#define REV_FOUNDATION_V2_1 0x1 #define BLD_GIC_VE_MMAP 0x0 #define BLD_GIC_A53A57_MMAP 0x1