TSP: Let the platform decide which secure memory to use
authorSandrine Bailleux <sandrine.bailleux@arm.com>
Tue, 20 May 2014 16:22:24 +0000 (17:22 +0100)
committerSandrine Bailleux <sandrine.bailleux@arm.com>
Thu, 22 May 2014 16:30:58 +0000 (17:30 +0100)
The TSP's linker script used to assume that the TSP would
execute from secure DRAM. Although it is currently the case
on FVPs, platforms are free to use any secure memory they wish.

This patch introduces the flexibility to load the TSP into any
secure memory. The platform code gets to specify the extents of
this memory in the platform header file, as well as the BL3-2 image
limit address. The latter definition allows to check in a generic way
that the BL3-2 image fits in its bounds.

Change-Id: I9450f2d8b32d74bd00b6ce57a0a1542716ab449c

bl32/tsp/tsp.ld.S
docs/porting-guide.md
plat/fvp/bl2_plat_setup.c
plat/fvp/platform.h

index 53bce7d5a04c19a279bd72b4d6f829235b0b39e5..797d8d7c13fa2c8e11493c57e65519645c4fa8e2 100644 (file)
@@ -36,7 +36,7 @@ ENTRY(tsp_entrypoint)
 
 
 MEMORY {
-    RAM (rwx): ORIGIN = TZDRAM_BASE, LENGTH = TZDRAM_SIZE
+    RAM (rwx): ORIGIN = TSP_SEC_MEM_BASE, LENGTH = TSP_SEC_MEM_SIZE
 }
 
 
@@ -119,5 +119,5 @@ SECTIONS
     __COHERENT_RAM_UNALIGNED_SIZE__ =
         __COHERENT_RAM_END_UNALIGNED__ - __COHERENT_RAM_START__;
 
-    ASSERT(. <= TZDRAM_BASE + (1 << 21), "BL32 image does not fit in the first 2MB of Trusted DRAM.")
+    ASSERT(. <= BL32_LIMIT, "BL3-2 image does not fit.")
 }
index 721ba1b6359bd7a44d1acd7c7c9d97263f1342c7..c66279ca60b052557dee1c385f9bd33c37e7b4e7 100644 (file)
@@ -191,9 +191,36 @@ constants defined. In the ARM FVP port, this file is found in
     image. Must be aligned on a page-size boundary.
 
 *   **#define : NS_IMAGE_OFFSET**
+
     Defines the base address in non-secure DRAM where BL2 loads the BL3-3 binary
     image. Must be aligned on a page-size boundary.
 
+If the BL3-2 image is supported by the platform, the following constants must
+be defined as well:
+
+*   **#define : TSP_SEC_MEM_BASE**
+
+    Defines the base address of the secure memory used by the BL3-2 image on the
+    platform.
+
+*   **#define : TSP_SEC_MEM_SIZE**
+
+    Defines the size of the secure memory used by the BL3-2 image on the
+    platform.
+
+*   **#define : BL32_BASE**
+
+    Defines the base address in secure memory where BL2 loads the BL3-2 binary
+    image. Must be inside the secure memory identified by `TSP_SEC_MEM_BASE` and
+    `TSP_SEC_MEM_SIZE` constants. Must also be aligned on a page-size boundary.
+
+*   **#define : BL32_LIMIT**
+
+    Defines the maximum address that the BL3-2 image can occupy. Must be inside
+    the secure memory identified by `TSP_SEC_MEM_BASE` and `TSP_SEC_MEM_SIZE`
+    constants.
+
+
 ### File : platform_macros.S [mandatory]
 
 Each platform must export a file of this name with the following
index ea9d0a48866c1f4e59b08e64aec433503847892d..672f096756d357783fc13e7d37fa95b0c6d11bf5 100644 (file)
@@ -271,9 +271,9 @@ void bl2_plat_get_bl32_meminfo(meminfo_t *bl32_meminfo)
        bl32_meminfo->total_base = BL32_BASE;
        bl32_meminfo->free_base = BL32_BASE;
        bl32_meminfo->total_size =
-                       (TZDRAM_BASE + TZDRAM_SIZE) - BL32_BASE;
+                       (TSP_SEC_MEM_BASE + TSP_SEC_MEM_SIZE) - BL32_BASE;
        bl32_meminfo->free_size =
-                       (TZDRAM_BASE + TZDRAM_SIZE) - BL32_BASE;
+                       (TSP_SEC_MEM_BASE + TSP_SEC_MEM_SIZE) - BL32_BASE;
        bl32_meminfo->attr = BOT_LOAD;
        bl32_meminfo->next = 0;
 }
index bd76d678b1bb065fbdba45c7b5cee0a65b674621..07c79d9ffb2633de97866550375a9048e336b7a7 100644 (file)
 /*******************************************************************************
  * BL32 specific defines.
  ******************************************************************************/
+#define TSP_SEC_MEM_BASE               TZDRAM_BASE
+#define TSP_SEC_MEM_SIZE               TZDRAM_SIZE
 #define BL32_BASE                      (TZDRAM_BASE + 0x2000)
+#define BL32_LIMIT                     (TZDRAM_BASE + (1 << 21))
 
 /*******************************************************************************
  * Platform specific page table and MMU setup constants