feat(plat/arm): Introduce the common arm platform

This patch introduced the common arm platform which can be used
by any compatible hardware. This allows reuse of code across multiple
platforms and possibly a single binary which can run on these platforms.
This depends on the MAX_CPU and RMM_MAX_GRANULES and RMM_MAX_SIZE can
encompass the superset of the values.

Signed-off-by: Harry Moulton <harry.moulton@arm.com>
Signed-off-by: Soby Mathew <soby.mathew@arm.com>
Change-Id: I69ceea101595f0e8cac81bd9e4d8754d2b1edbc3
diff --git a/cmake/CommonConfigs.cmake b/cmake/CommonConfigs.cmake
index d212c06..ea517a3 100644
--- a/cmake/CommonConfigs.cmake
+++ b/cmake/CommonConfigs.cmake
@@ -48,9 +48,7 @@
     NAME RMM_FPU_USE_AT_REL2
     HELP "Enable Advanced SIMD support in RMM"
     TYPE BOOL
-    DEFAULT ON
-    DEPENDS (RMM_ARCH STREQUAL aarch64)
-    ELSE OFF)
+    DEFAULT OFF)
 
 #
 # The number of 4K pages allocated for attestation buffer.
diff --git a/configs/fvp_defcfg.cmake b/configs/fvp_defcfg.cmake
index 5d9bc2e..b0b1867 100644
--- a/configs/fvp_defcfg.cmake
+++ b/configs/fvp_defcfg.cmake
@@ -6,39 +6,15 @@
 #
 # Set the RMM_PLATFORM variable to Cmake cache.
 #
-set(RMM_PLATFORM "fvp" CACHE STRING "platform")
+set(RMM_PLATFORM "arm" CACHE STRING "platform")
 arm_config_option_override(NAME RMM_TOOLCHAIN DEFAULT "gnu")
 
 #
-# Width of the virtual address space for the system.
-#
-arm_config_option_override(NAME VIRT_ADDR_SPACE_WIDTH DEFAULT 38)
-
-#
 # Set RMM_MAX_SIZE for this platform (24MB)
 #
 arm_config_option_override(NAME RMM_MAX_SIZE DEFAULT 0x01800000)
 
 #
-# Extra memory regions needed by this platform
-#
-arm_config_option_override(NAME PLAT_CMN_EXTRA_MMAP_REGIONS DEFAULT 1)
-
-#
-# Maximum number of translation tables allocated by the runtime context
-# for the translation library.
-#
-arm_config_option_override(NAME PLAT_CMN_CTX_MAX_XLAT_TABLES DEFAULT 6)
-
-#
-# Disable FPU/SIMD usage in RMM. Enabling this option turns on
-# DMBEDTLS_SHAXXX_USE_A64_CRYPTO_ONLY in Mbed TLS. To run RMM that was compiled
-# this way requires Crypto.so plugin to be present for the FVP. This plugin is
-# delivered separate to the FVP, and might not be present in all environments.
-#
-arm_config_option_override(NAME RMM_FPU_USE_AT_REL2 DEFAULT OFF)
-
-#
 # Maximum number of granules supported, enough to cover
 # (2GB - 64MB) of DRAM0 and 2GB of DRAM1. We overprovision
 # for the case that DT has not catered for the 64 MB carveout.
diff --git a/lib/realm/CMakeLists.txt b/lib/realm/CMakeLists.txt
index bf2ce52..ef4ddc0 100644
--- a/lib/realm/CMakeLists.txt
+++ b/lib/realm/CMakeLists.txt
@@ -8,7 +8,7 @@
 arm_config_option(
     NAME VIRT_ADDR_SPACE_WIDTH
     HELP "Size in bits of the virtual address space."
-    DEFAULT 0x0
+    DEFAULT 38
     TYPE STRING
     ADVANCED)
 
diff --git a/plat/arm/CMakeLists.txt b/plat/arm/CMakeLists.txt
new file mode 100644
index 0000000..8161aec
--- /dev/null
+++ b/plat/arm/CMakeLists.txt
@@ -0,0 +1,35 @@
+#
+# SPDX-License-Identifier: BSD-3-Clause
+# SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
+#
+
+add_library(rmm-plat-arm)
+
+#
+# Extra memory regions needed by this platform
+#
+arm_config_option_override(NAME PLAT_CMN_EXTRA_MMAP_REGIONS DEFAULT 1)
+
+#
+# Maximum number of translation tables allocated by the runtime context
+# for the translation library.
+#
+arm_config_option_override(NAME PLAT_CMN_CTX_MAX_XLAT_TABLES DEFAULT 6)
+
+add_subdirectory("${RMM_SOURCE_DIR}/drivers/pl011" ${RMM_BINARY_DIR}/drivers/pl011)
+add_subdirectory("${RMM_SOURCE_DIR}/plat/common" ${RMM_BINARY_DIR}/plat/common)
+
+target_link_libraries(rmm-plat-arm
+    PRIVATE rmm-driver-pl011
+            rmm-lib
+            rmm-plat-common)
+
+target_sources(rmm-plat-arm
+    PRIVATE "src/arm_setup.c"
+            "src/arm_granule.c"
+            "src/arm_memory.c")
+
+target_include_directories(rmm-plat-arm
+    PRIVATE "src/include")
+
+add_library(rmm-platform ALIAS rmm-plat-arm)
diff --git a/plat/arm/src/arm_granule.c b/plat/arm/src/arm_granule.c
new file mode 100644
index 0000000..983b6ee
--- /dev/null
+++ b/plat/arm/src/arm_granule.c
@@ -0,0 +1,49 @@
+/*
+ * SPDX-License-Identifier: BSD-3-Clause
+ * SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
+ */
+
+#include <arm_dram.h>
+#include <assert.h>
+#include <platform_api.h>
+#include <utils_def.h>
+
+static struct arm_dram_layout arm_dram;
+
+struct arm_dram_layout *arm_get_dram_layout(void)
+{
+	return &arm_dram;
+}
+
+unsigned long plat_granule_addr_to_idx(unsigned long addr)
+{
+	if (!GRANULE_ALIGNED(addr)) {
+		return UINT64_MAX;
+	}
+
+	if ((addr >= arm_dram.arm_bank[0].start_addr) &&
+	    (addr <= arm_dram.arm_bank[0].end_addr)) {
+		return (addr - arm_dram.arm_bank[0].start_addr) / GRANULE_SIZE;
+	}
+
+	if ((arm_dram.arm_bank[1].start_addr != 0UL) &&
+	    (addr >= arm_dram.arm_bank[1].start_addr) &&
+	    (addr <= arm_dram.arm_bank[1].end_addr)) {
+		return ((addr - arm_dram.arm_bank[1].start_addr) /
+			GRANULE_SIZE) + arm_dram.idx_bank_1;
+	}
+
+	return UINT64_MAX;
+}
+
+unsigned long plat_granule_idx_to_addr(unsigned long idx)
+{
+	assert(idx < arm_dram.num_granules);
+
+	if (idx < arm_dram.idx_bank_1) {
+		return arm_dram.arm_bank[0].start_addr + (idx * GRANULE_SIZE);
+	}
+
+	return arm_dram.arm_bank[1].start_addr +
+			((idx - arm_dram.idx_bank_1) * GRANULE_SIZE);
+}
diff --git a/plat/fvp/src/fvp_memory.c b/plat/arm/src/arm_memory.c
similarity index 75%
rename from plat/fvp/src/fvp_memory.c
rename to plat/arm/src/arm_memory.c
index ff6a816..01783df 100644
--- a/plat/fvp/src/fvp_memory.c
+++ b/plat/arm/src/arm_memory.c
@@ -4,17 +4,17 @@
  */
 
 #include <arch_helpers.h>
+#include <arm_dram.h>
 #include <assert.h>
-#include <fvp_dram.h>
 #include <rmm_el3_ifc.h>
 
 COMPILER_ASSERT(MAX_DRAM_NUM_BANKS == 2UL);
 
-void fvp_set_dram_layout(struct ns_dram_info *plat_dram)
+void arm_set_dram_layout(struct ns_dram_info *plat_dram)
 {
 	uint64_t num_banks, num_granules = 0UL;
 	struct ns_dram_bank *bank_ptr;
-	struct fvp_dram_layout *dram_ptr = fvp_get_dram_layout();
+	struct arm_dram_layout *dram_ptr = arm_get_dram_layout();
 
 	/* Number of banks */
 	num_banks = plat_dram->num_banks;
@@ -36,13 +36,13 @@
 		/* Total number of granules */
 		num_granules += (size / GRANULE_SIZE);
 
-		dram_ptr->fvp_bank[i].start_addr = start;
-		dram_ptr->fvp_bank[i].end_addr = end;
+		dram_ptr->arm_bank[i].start_addr = start;
+		dram_ptr->arm_bank[i].end_addr = end;
 
 		bank_ptr++;
 	}
 
 	dram_ptr->num_granules = num_granules;
 
-	inv_dcache_range((uintptr_t)dram_ptr, sizeof(struct fvp_dram_layout));
+	inv_dcache_range((uintptr_t)dram_ptr, sizeof(struct arm_dram_layout));
 }
diff --git a/plat/fvp/src/fvp_setup.c b/plat/arm/src/arm_setup.c
similarity index 93%
rename from plat/fvp/src/fvp_setup.c
rename to plat/arm/src/arm_setup.c
index 0e22551..e17dccf 100644
--- a/plat/fvp/src/fvp_setup.c
+++ b/plat/arm/src/arm_setup.c
@@ -4,8 +4,8 @@
  */
 
 #include <arch_features.h>
+#include <arm_dram.h>
 #include <debug.h>
-#include <fvp_dram.h>
 #include <pl011.h>
 #include <plat_common.h>
 #include <platform_api.h>
@@ -14,10 +14,7 @@
 #include <string.h>
 #include <xlat_tables.h>
 
-/* FVP UART Base address. */
-#define FVP_UART_ADDR	UL(0x1c0c0000)
-
-#define FVP_RMM_UART	MAP_REGION_FLAT(			\
+#define ARM_RMM_UART	MAP_REGION_FLAT(			\
 				0,			\
 				SZ_4K,				\
 				(MT_DEVICE | MT_RW | MT_REALM))
@@ -61,7 +58,7 @@
 
 	/* TBD Initialize UART for early log */
 	struct xlat_mmap_region plat_regions[] = {
-		FVP_RMM_UART,
+		ARM_RMM_UART,
 		{0}
 	};
 
@@ -122,8 +119,8 @@
 		rmm_el3_ifc_report_fail_to_el3(ret);
 	}
 
-	/* Set up FVP DRAM layout */
-	fvp_set_dram_layout(plat_dram);
+	/* Set up Arm DRAM layout */
+	arm_set_dram_layout(plat_dram);
 
 	plat_warmboot_setup(x0, x1, x2, x3);
 }
diff --git a/plat/fvp/src/include/fvp_dram.h b/plat/arm/src/include/arm_dram.h
similarity index 60%
rename from plat/fvp/src/include/fvp_dram.h
rename to plat/arm/src/include/arm_dram.h
index 054e6f1..468bc94 100644
--- a/plat/fvp/src/include/fvp_dram.h
+++ b/plat/arm/src/include/arm_dram.h
@@ -3,8 +3,8 @@
  * SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
  */
 
-#ifndef FVP_DRAM_H
-#define FVP_DRAM_H
+#ifndef ARM_DRAM_H
+#define ARM_DRAM_H
 
 #include <rmm_el3_ifc.h>
 #include <stddef.h>
@@ -13,19 +13,19 @@
 /* Maximum number of DRAM banks supported */
 #define MAX_DRAM_NUM_BANKS	2UL
 
-/* FVP runtime structures */
-struct fvp_dram_bank {
+/* Arm runtime structures */
+struct arm_dram_bank {
 	uintptr_t start_addr;		/* start address */
 	uintptr_t end_addr;		/* end address */
 };
 
-struct fvp_dram_layout {
+struct arm_dram_layout {
 	unsigned long idx_bank_1;	/* start granule index in bank 1 */
 	unsigned long num_granules;	/* number of granules */
-	struct fvp_dram_bank fvp_bank[MAX_DRAM_NUM_BANKS];
+	struct arm_dram_bank arm_bank[MAX_DRAM_NUM_BANKS];
 };
 
-void fvp_set_dram_layout(struct ns_dram_info *plat_dram);
-struct fvp_dram_layout *fvp_get_dram_layout(void);
+void arm_set_dram_layout(struct ns_dram_info *plat_dram);
+struct arm_dram_layout *arm_get_dram_layout(void);
 
-#endif /* FVP_DRAM_H */
+#endif /* ARM_DRAM_H */
diff --git a/plat/fvp/CMakeLists.txt b/plat/fvp/CMakeLists.txt
deleted file mode 100644
index 3d4f067..0000000
--- a/plat/fvp/CMakeLists.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-#
-# SPDX-License-Identifier: BSD-3-Clause
-# SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
-#
-
-add_library(rmm-fvp)
-
-add_subdirectory("${RMM_SOURCE_DIR}/drivers/pl011" ${RMM_BINARY_DIR}/drivers/pl011)
-add_subdirectory("${RMM_SOURCE_DIR}/plat/common" ${RMM_BINARY_DIR}/plat/common)
-
-target_link_libraries(rmm-fvp
-    PRIVATE rmm-driver-pl011
-            rmm-lib
-            rmm-plat-common)
-
-target_sources(rmm-fvp
-    PRIVATE "src/fvp_setup.c"
-            "src/fvp_granule.c"
-            "src/fvp_memory.c")
-
-target_include_directories(rmm-fvp
-    PRIVATE "src/include")
-
-add_library(rmm-platform ALIAS rmm-fvp)
diff --git a/plat/fvp/src/fvp_granule.c b/plat/fvp/src/fvp_granule.c
deleted file mode 100644
index 8e3eeec..0000000
--- a/plat/fvp/src/fvp_granule.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * SPDX-License-Identifier: BSD-3-Clause
- * SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
- */
-
-#include <assert.h>
-#include <fvp_dram.h>
-#include <platform_api.h>
-#include <utils_def.h>
-
-static struct fvp_dram_layout fvp_dram;
-
-struct fvp_dram_layout *fvp_get_dram_layout(void)
-{
-	return &fvp_dram;
-}
-
-unsigned long plat_granule_addr_to_idx(unsigned long addr)
-{
-	if (!GRANULE_ALIGNED(addr)) {
-		return UINT64_MAX;
-	}
-
-	if ((addr >= fvp_dram.fvp_bank[0].start_addr) &&
-	    (addr <= fvp_dram.fvp_bank[0].end_addr)) {
-		return (addr - fvp_dram.fvp_bank[0].start_addr) / GRANULE_SIZE;
-	}
-
-	if ((fvp_dram.fvp_bank[1].start_addr != 0UL) &&
-	    (addr >= fvp_dram.fvp_bank[1].start_addr) &&
-	    (addr <= fvp_dram.fvp_bank[1].end_addr)) {
-		return ((addr - fvp_dram.fvp_bank[1].start_addr) /
-			GRANULE_SIZE) + fvp_dram.idx_bank_1;
-	}
-
-	return UINT64_MAX;
-}
-
-unsigned long plat_granule_idx_to_addr(unsigned long idx)
-{
-	assert(idx < fvp_dram.num_granules);
-
-	if (idx < fvp_dram.idx_bank_1) {
-		return fvp_dram.fvp_bank[0].start_addr + (idx * GRANULE_SIZE);
-	}
-
-	return fvp_dram.fvp_bank[1].start_addr +
-			((idx - fvp_dram.idx_bank_1) * GRANULE_SIZE);
-}
diff --git a/plat/fvp/src/include/fvp_private.h b/plat/fvp/src/include/fvp_private.h
deleted file mode 100644
index d4c9fe9..0000000
--- a/plat/fvp/src/include/fvp_private.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * SPDX-License-Identifier: BSD-3-Clause
- * SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
- */
-
-#ifndef FVP_PRIVATE_H
-#define FVP_PRIVATE_H
-
-/* Default number of CPUs per cluster */
-#define FVP_MAX_CPUS_PER_CLUSTER	4
-
-/* Default number of threads per CPU */
-#define FVP_MAX_PE_PER_CPU		1
-
-#define FVP_UART_BAUDRATE		115200
-#define FVP_UART_CLK_IN_HZ		14745600
-
-#endif /* FVP_PRIVATE_H */