Support later revisions of the Foundation FVP
authorAndrew Thoelke <andrew.thoelke@arm.com>
Thu, 26 Jun 2014 13:27:26 +0000 (14:27 +0100)
committerAndrew Thoelke <andrew.thoelke@arm.com>
Fri, 27 Jun 2014 08:50:36 +0000 (09:50 +0100)
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
plat/fvp/fvp_def.h

index 580c79368b6912a64a5a42d9dbce339ee558ccbb..ec81d5bbbc82cd249aa9ff2ea981d5a359ac733a 100644 (file)
@@ -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;
index 59dcc90be43011e75a9369adfe7360be968360a9..19422fd49c64864d8897303518e98f9003fd03d0 100644 (file)
@@ -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
 
 #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