aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Wiklander <jens.wiklander@linaro.org>2015-03-19 15:00:00 +0100
committerJens Wiklander <jens.wiklander@linaro.org>2015-03-31 17:15:40 +0200
commit153c4954e7f0d958428b863acc528e2cad9057ad (patch)
treec2acbafa3900ca63ad8bfb0f5c069a745b4edff7
parentdb886a7f9ab74a374b266638b480fbd872bb97be (diff)
core: split arm32.h
Splits arm32.h into one ARM generic arm.h and one ARM32 specific arm32.h. arm32.h should not be included directly, arm.h should be included instead. Signed-off-by: Jens Wiklander <jens.wiklander@linaro.org> Reviewed-by: Pascal Brand <pascal.brand@linaro.org>
-rw-r--r--core/arch/arm32/arm32.mk6
-rw-r--r--core/arch/arm32/include/arm.h60
-rw-r--r--core/arch/arm32/include/arm32.h41
-rw-r--r--core/arch/arm32/kernel/misc_a32.S2
-rw-r--r--core/arch/arm32/kernel/mutex.c2
-rw-r--r--core/arch/arm32/kernel/proc_a32.S2
-rw-r--r--core/arch/arm32/kernel/ssvce_a32.S2
-rw-r--r--core/arch/arm32/kernel/tee_time_arm_cntpct.c2
-rw-r--r--core/arch/arm32/kernel/thread.c2
-rw-r--r--core/arch/arm32/kernel/thread_a32.S2
-rw-r--r--core/arch/arm32/kernel/vfp.c2
-rw-r--r--core/arch/arm32/mm/core_mmu_lpae.c2
-rw-r--r--core/arch/arm32/mm/core_mmu_v7.c2
-rw-r--r--core/arch/arm32/mm/tee_mmu.c2
-rw-r--r--core/arch/arm32/mm/tee_pager.c2
-rw-r--r--core/arch/arm32/plat-stm/cache_maintenance.c2
-rw-r--r--core/arch/arm32/plat-stm/main.c2
-rw-r--r--core/arch/arm32/plat-sunxi/entry.S2
-rw-r--r--core/arch/arm32/plat-sunxi/main.c2
-rw-r--r--core/arch/arm32/plat-sunxi/platform.c2
-rw-r--r--core/arch/arm32/plat-sunxi/smp_boot.S2
-rw-r--r--core/arch/arm32/plat-vexpress/entry_a32.S2
-rw-r--r--core/arch/arm32/plat-vexpress/juno_core_pos_a32.S2
-rw-r--r--core/arch/arm32/plat-vexpress/main.c2
-rw-r--r--core/arch/arm32/plat-vexpress/platform_flags.mk2
-rw-r--r--core/arch/arm32/sm/sm.c2
-rw-r--r--core/arch/arm32/sm/sm_a32.S2
-rw-r--r--core/arch/arm32/tee/arch_svc.c2
-rw-r--r--core/arch/arm32/tee/arch_svc_a32.S2
-rw-r--r--core/core.mk1
-rw-r--r--ta/arch/arm32/arm32.mk6
-rw-r--r--ta/mk/ta_dev_kit.mk2
-rw-r--r--ta/ta.mk13
33 files changed, 132 insertions, 49 deletions
diff --git a/core/arch/arm32/arm32.mk b/core/arch/arm32/arm32.mk
new file mode 100644
index 00000000..140b7323
--- /dev/null
+++ b/core/arch/arm32/arm32.mk
@@ -0,0 +1,6 @@
+ifeq ($(CFG_ARM64_core),y)
+core-platform-cppflags += -DARM64=1
+endif
+ifeq ($(CFG_ARM32_core),y)
+core-platform-cppflags += -DARM32=1
+endif
diff --git a/core/arch/arm32/include/arm.h b/core/arch/arm32/include/arm.h
new file mode 100644
index 00000000..895c69f5
--- /dev/null
+++ b/core/arch/arm32/include/arm.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2015, Linaro Limited
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef ARM_H
+#define ARM_H
+
+
+#define MPIDR_CPU_MASK 0xff
+#define MPIDR_CLUSTER_SHIFT 8
+#define MPIDR_CLUSTER_MASK (0xff << MPIDR_CLUSTER_SHIFT)
+
+#define ARM32_CPSR_MODE_MASK 0x1f
+#define ARM32_CPSR_MODE_USR 0x10
+#define ARM32_CPSR_MODE_FIQ 0x11
+#define ARM32_CPSR_MODE_IRQ 0x12
+#define ARM32_CPSR_MODE_SVC 0x13
+#define ARM32_CPSR_MODE_MON 0x16
+#define ARM32_CPSR_MODE_ABT 0x17
+#define ARM32_CPSR_MODE_UND 0x1b
+#define ARM32_CPSR_MODE_SYS 0x1f
+
+#define ARM32_CPSR_T (1 << 5)
+#define ARM32_CPSR_F_SHIFT 6
+#define ARM32_CPSR_F (1 << 6)
+#define ARM32_CPSR_I (1 << 7)
+#define ARM32_CPSR_A (1 << 8)
+#define ARM32_CPSR_FIA (ARM32_CPSR_F | ARM32_CPSR_I | ARM32_CPSR_A)
+#define ARM32_CPSR_IT_MASK (ARM32_CPSR_IT_MASK1 | ARM32_CPSR_IT_MASK2)
+#define ARM32_CPSR_IT_MASK1 0x06000000
+#define ARM32_CPSR_IT_MASK2 0x0000fc00
+
+
+#ifdef ARM32
+#include <arm32.h>
+#endif
+
+#endif /*ARM_H*/
diff --git a/core/arch/arm32/include/arm32.h b/core/arch/arm32/include/arm32.h
index d6a12ac9..cd17fd4c 100644
--- a/core/arch/arm32/include/arm32.h
+++ b/core/arch/arm32/include/arm32.h
@@ -32,28 +32,25 @@
#include <stdint.h>
#endif
-#define CPSR_MODE_MASK 0x1f
-#define CPSR_MODE_USR 0x10
-#define CPSR_MODE_FIQ 0x11
-#define CPSR_MODE_IRQ 0x12
-#define CPSR_MODE_SVC 0x13
-#define CPSR_MODE_MON 0x16
-#define CPSR_MODE_ABT 0x17
-#define CPSR_MODE_UND 0x1b
-#define CPSR_MODE_SYS 0x1f
-
-#define CPSR_T (1 << 5)
-#define CPSR_F (1 << 6)
-#define CPSR_I (1 << 7)
-#define CPSR_A (1 << 8)
-#define CPSR_FIA (CPSR_F | CPSR_I | CPSR_A)
-#define CPSR_IT_MASK (CPSR_IT_MASK1 | CPSR_IT_MASK2)
-#define CPSR_IT_MASK1 0x06000000
-#define CPSR_IT_MASK2 0x0000fc00
-
-#define MPIDR_CPU_MASK 0xff
-#define MPIDR_CLUSTER_SHIFT 8
-#define MPIDR_CLUSTER_MASK (0xff << MPIDR_CLUSTER_SHIFT)
+#define CPSR_MODE_MASK ARM32_CPSR_MODE_MASK
+#define CPSR_MODE_USR ARM32_CPSR_MODE_USR
+#define CPSR_MODE_FIQ ARM32_CPSR_MODE_FIQ
+#define CPSR_MODE_IRQ ARM32_CPSR_MODE_IRQ
+#define CPSR_MODE_SVC ARM32_CPSR_MODE_SVC
+#define CPSR_MODE_MON ARM32_CPSR_MODE_MON
+#define CPSR_MODE_ABT ARM32_CPSR_MODE_ABT
+#define CPSR_MODE_UND ARM32_CPSR_MODE_UND
+#define CPSR_MODE_SYS ARM32_CPSR_MODE_SYS
+
+#define CPSR_T ARM32_CPSR_T
+#define CPSR_F_SHIFT ARM32_CPSR_F_SHIFT
+#define CPSR_F ARM32_CPSR_F
+#define CPSR_I ARM32_CPSR_I
+#define CPSR_A ARM32_CPSR_A
+#define CPSR_FIA ARM32_CPSR_FIA
+#define CPSR_IT_MASK ARM32_CPSR_IT_MASK
+#define CPSR_IT_MASK1 ARM32_CPSR_IT_MASK1
+#define CPSR_IT_MASK2 ARM32_CPSR_IT_MASK2
#define SCR_NS (1 << 0)
#define SCR_IRQ (1 << 1)
diff --git a/core/arch/arm32/kernel/misc_a32.S b/core/arch/arm32/kernel/misc_a32.S
index 3a9a70f1..a0405520 100644
--- a/core/arch/arm32/kernel/misc_a32.S
+++ b/core/arch/arm32/kernel/misc_a32.S
@@ -26,7 +26,7 @@
*/
#include <asm.S>
-#include <arm32.h>
+#include <arm.h>
#include <arm32_macros.S>
/* Let platforms override this if needed */
diff --git a/core/arch/arm32/kernel/mutex.c b/core/arch/arm32/kernel/mutex.c
index b3851e7d..059eeef2 100644
--- a/core/arch/arm32/kernel/mutex.c
+++ b/core/arch/arm32/kernel/mutex.c
@@ -35,7 +35,7 @@
#include <mm/core_mmu.h>
#include <sm/teesmc.h>
#include <bitstring.h>
-#include <arm32.h>
+#include <arm.h>
/*
* Mutex design:
diff --git a/core/arch/arm32/kernel/proc_a32.S b/core/arch/arm32/kernel/proc_a32.S
index f654f0b2..279184a4 100644
--- a/core/arch/arm32/kernel/proc_a32.S
+++ b/core/arch/arm32/kernel/proc_a32.S
@@ -31,7 +31,7 @@
#include <kernel/tz_proc_def.h>
#include <asm.S>
-#include <arm32.h>
+#include <arm.h>
#include <arm32_macros.S>
.global cpu_spin_lock
diff --git a/core/arch/arm32/kernel/ssvce_a32.S b/core/arch/arm32/kernel/ssvce_a32.S
index c2d91fea..496d9c8a 100644
--- a/core/arch/arm32/kernel/ssvce_a32.S
+++ b/core/arch/arm32/kernel/ssvce_a32.S
@@ -33,7 +33,7 @@
* Variable(s)
*/
#include <asm.S>
-#include <arm32.h>
+#include <arm.h>
#include <arm32_macros.S>
#include <kernel/tz_proc_def.h>
diff --git a/core/arch/arm32/kernel/tee_time_arm_cntpct.c b/core/arch/arm32/kernel/tee_time_arm_cntpct.c
index 4f6aef3e..1265359e 100644
--- a/core/arch/arm32/kernel/tee_time_arm_cntpct.c
+++ b/core/arch/arm32/kernel/tee_time_arm_cntpct.c
@@ -35,7 +35,7 @@
#include <assert.h>
#include <stdint.h>
#include <mpa.h>
-#include <arm32.h>
+#include <arm.h>
static uint32_t do_div(uint64_t *dividend, uint32_t divisor)
{
diff --git a/core/arch/arm32/kernel/thread.c b/core/arch/arm32/kernel/thread.c
index 2dda1014..e86753f4 100644
--- a/core/arch/arm32/kernel/thread.c
+++ b/core/arch/arm32/kernel/thread.c
@@ -34,7 +34,7 @@
#include <sm/sm.h>
#include <sm/teesmc.h>
#include <sm/teesmc_optee.h>
-#include <arm32.h>
+#include <arm.h>
#include <kernel/tz_proc_def.h>
#include <kernel/tz_proc.h>
#include <kernel/misc.h>
diff --git a/core/arch/arm32/kernel/thread_a32.S b/core/arch/arm32/kernel/thread_a32.S
index 7de9044a..8693136c 100644
--- a/core/arch/arm32/kernel/thread_a32.S
+++ b/core/arch/arm32/kernel/thread_a32.S
@@ -26,7 +26,7 @@
*/
#include <asm.S>
-#include <arm32.h>
+#include <arm.h>
#include <arm32_macros.S>
#include <sm/teesmc.h>
#include <sm/teesmc_opteed_macros.h>
diff --git a/core/arch/arm32/kernel/vfp.c b/core/arch/arm32/kernel/vfp.c
index 53323f1b..478515e0 100644
--- a/core/arch/arm32/kernel/vfp.c
+++ b/core/arch/arm32/kernel/vfp.c
@@ -1,4 +1,4 @@
-#include <arm32.h>
+#include <arm.h>
#include <kernel/vfp.h>
#include "vfp_private.h"
#include <assert.h>
diff --git a/core/arch/arm32/mm/core_mmu_lpae.c b/core/arch/arm32/mm/core_mmu_lpae.c
index 9ce6d8d2..4661f511 100644
--- a/core/arch/arm32/mm/core_mmu_lpae.c
+++ b/core/arch/arm32/mm/core_mmu_lpae.c
@@ -65,7 +65,7 @@
#include <mm/tee_mmu_defs.h>
#include <kernel/thread.h>
#include <kernel/panic.h>
-#include <arm32.h>
+#include <arm.h>
#include "core_mmu_private.h"
#ifndef DEBUG_XLAT_TABLE
diff --git a/core/arch/arm32/mm/core_mmu_v7.c b/core/arch/arm32/mm/core_mmu_v7.c
index 4ca6a1c9..87e2651b 100644
--- a/core/arch/arm32/mm/core_mmu_v7.c
+++ b/core/arch/arm32/mm/core_mmu_v7.c
@@ -28,7 +28,7 @@
#include <stdlib.h>
#include <assert.h>
-#include <arm32.h>
+#include <arm.h>
#include <mm/core_mmu.h>
#include <mm/tee_mmu_defs.h>
#include <trace.h>
diff --git a/core/arch/arm32/mm/tee_mmu.c b/core/arch/arm32/mm/tee_mmu.c
index 75a9945c..09c629fa 100644
--- a/core/arch/arm32/mm/tee_mmu.c
+++ b/core/arch/arm32/mm/tee_mmu.c
@@ -28,7 +28,7 @@
#include <stdlib.h>
#include <types_ext.h>
-#include <arm32.h>
+#include <arm.h>
#include <util.h>
#include <kernel/tee_common.h>
#include <mm/tee_mmu.h>
diff --git a/core/arch/arm32/mm/tee_pager.c b/core/arch/arm32/mm/tee_pager.c
index c2c01563..537951f5 100644
--- a/core/arch/arm32/mm/tee_pager.c
+++ b/core/arch/arm32/mm/tee_pager.c
@@ -41,7 +41,7 @@
#include <mm/tee_mm.h>
#include <mm/core_mmu.h>
#include <tee/arch_svc.h>
-#include <arm32.h>
+#include <arm.h>
#include <tee/tee_cryp_provider.h>
#include <tee_api_defines.h>
#include <utee_defines.h>
diff --git a/core/arch/arm32/plat-stm/cache_maintenance.c b/core/arch/arm32/plat-stm/cache_maintenance.c
index e71b93f5..54f037a2 100644
--- a/core/arch/arm32/plat-stm/cache_maintenance.c
+++ b/core/arch/arm32/plat-stm/cache_maintenance.c
@@ -25,7 +25,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <compiler.h>
-#include <arm32.h>
+#include <arm.h>
#include <mm/core_mmu.h>
#include <kernel/tz_ssvce_pl310.h>
diff --git a/core/arch/arm32/plat-stm/main.c b/core/arch/arm32/plat-stm/main.c
index 7041dc72..4052e6ac 100644
--- a/core/arch/arm32/plat-stm/main.c
+++ b/core/arch/arm32/plat-stm/main.c
@@ -30,7 +30,7 @@
#include <sm/tee_mon.h>
#include <sm/teesmc.h>
#include <sm/teesmc_optee.h>
-#include <arm32.h>
+#include <arm.h>
#include <kernel/thread.h>
#include <kernel/panic.h>
#include <malloc.h>
diff --git a/core/arch/arm32/plat-sunxi/entry.S b/core/arch/arm32/plat-sunxi/entry.S
index 3d3d67d1..79878d95 100644
--- a/core/arch/arm32/plat-sunxi/entry.S
+++ b/core/arch/arm32/plat-sunxi/entry.S
@@ -28,7 +28,7 @@
#include <platform_config.h>
#include <asm.S>
-#include <arm32.h>
+#include <arm.h>
#include <arm32_macros.S>
#include <sm/teesmc.h>
#include <sm/teesmc_opteed_macros.h>
diff --git a/core/arch/arm32/plat-sunxi/main.c b/core/arch/arm32/plat-sunxi/main.c
index 8d3c030f..d56612ad 100644
--- a/core/arch/arm32/plat-sunxi/main.c
+++ b/core/arch/arm32/plat-sunxi/main.c
@@ -36,7 +36,7 @@
#include <sm/teesmc.h>
#include <sm/teesmc_optee.h>
-#include <arm32.h>
+#include <arm.h>
#include <kernel/thread.h>
#include <kernel/time_source.h>
#include <kernel/panic.h>
diff --git a/core/arch/arm32/plat-sunxi/platform.c b/core/arch/arm32/plat-sunxi/platform.c
index 576d9a5d..2671f865 100644
--- a/core/arch/arm32/plat-sunxi/platform.c
+++ b/core/arch/arm32/plat-sunxi/platform.c
@@ -32,7 +32,7 @@
#include <sm/teesmc.h>
#include <sm/teesmc_optee.h>
-#include <arm32.h>
+#include <arm.h>
#include <kernel/thread.h>
#include <kernel/time_source.h>
#include <kernel/panic.h>
diff --git a/core/arch/arm32/plat-sunxi/smp_boot.S b/core/arch/arm32/plat-sunxi/smp_boot.S
index 4d04a046..498d4328 100644
--- a/core/arch/arm32/plat-sunxi/smp_boot.S
+++ b/core/arch/arm32/plat-sunxi/smp_boot.S
@@ -26,7 +26,7 @@
*/
#include <asm.S>
-#include <arm32.h>
+#include <arm.h>
#include <arm32_macros.S>
#include <sm/teesmc.h>
#include <sm/teesmc_opteed_macros.h>
diff --git a/core/arch/arm32/plat-vexpress/entry_a32.S b/core/arch/arm32/plat-vexpress/entry_a32.S
index 8c9df0fb..fe5383e8 100644
--- a/core/arch/arm32/plat-vexpress/entry_a32.S
+++ b/core/arch/arm32/plat-vexpress/entry_a32.S
@@ -28,7 +28,7 @@
#include <platform_config.h>
#include <asm.S>
-#include <arm32.h>
+#include <arm.h>
#include <arm32_macros.S>
#include <sm/teesmc.h>
#include <sm/teesmc_opteed_macros.h>
diff --git a/core/arch/arm32/plat-vexpress/juno_core_pos_a32.S b/core/arch/arm32/plat-vexpress/juno_core_pos_a32.S
index ca6d89c5..699d7f51 100644
--- a/core/arch/arm32/plat-vexpress/juno_core_pos_a32.S
+++ b/core/arch/arm32/plat-vexpress/juno_core_pos_a32.S
@@ -26,7 +26,7 @@
*/
#include <asm.S>
-#include <arm32.h>
+#include <arm.h>
#include <arm32_macros.S>
/* For Juno number the two A57s as 4 to 5 and A53s as 0 to 3 */
diff --git a/core/arch/arm32/plat-vexpress/main.c b/core/arch/arm32/plat-vexpress/main.c
index 1a8032aa..5c1c3115 100644
--- a/core/arch/arm32/plat-vexpress/main.c
+++ b/core/arch/arm32/plat-vexpress/main.c
@@ -38,7 +38,7 @@
#include <util.h>
-#include <arm32.h>
+#include <arm.h>
#include <kernel/thread.h>
#include <kernel/panic.h>
#include <trace.h>
diff --git a/core/arch/arm32/plat-vexpress/platform_flags.mk b/core/arch/arm32/plat-vexpress/platform_flags.mk
index e0cb767b..cf68baeb 100644
--- a/core/arch/arm32/plat-vexpress/platform_flags.mk
+++ b/core/arch/arm32/plat-vexpress/platform_flags.mk
@@ -2,7 +2,6 @@ PLATFORM_FLAVOR ?= fvp
PLATFORM_FLAVOR_$(PLATFORM_FLAVOR) := y
# 32-bit flags
-arm32-platform-cppflags += -DARM32=1 -DILP32=1
arm32-platform-cpuarch := cortex-a15
arm32-platform-cflags += -mcpu=$(arm32-platform-cpuarch) -mthumb
arm32-platform-cflags += -pipe -mthumb-interwork -mlong-calls
@@ -13,7 +12,6 @@ arm32-platform-aflags += -mcpu=$(arm32-platform-cpuarch)
arm32-platform-aflags += -mfpu=neon
# 64-bit flags
-arm64-platform-cppflags += -DARM64=1 -DLP64=1
arm64-platform-cflags += -mgeneral-regs-only
platform-cflags += -ffunction-sections -fdata-sections
diff --git a/core/arch/arm32/sm/sm.c b/core/arch/arm32/sm/sm.c
index 619475ce..0f15a695 100644
--- a/core/arch/arm32/sm/sm.c
+++ b/core/arch/arm32/sm/sm.c
@@ -31,7 +31,7 @@
#include <sm/teesmc_opteed_macros.h>
#include <sm/teesmc_opteed.h>
-#include <arm32.h>
+#include <arm.h>
#include <kernel/misc.h>
diff --git a/core/arch/arm32/sm/sm_a32.S b/core/arch/arm32/sm/sm_a32.S
index c4da5bf5..d2b1dc4e 100644
--- a/core/arch/arm32/sm/sm_a32.S
+++ b/core/arch/arm32/sm/sm_a32.S
@@ -26,7 +26,7 @@
*/
#include <asm.S>
-#include <arm32.h>
+#include <arm.h>
#include <arm32_macros.S>
#include <sm/teesmc.h>
diff --git a/core/arch/arm32/tee/arch_svc.c b/core/arch/arm32/tee/arch_svc.c
index a4606635..b5ec9b83 100644
--- a/core/arch/arm32/tee/arch_svc.c
+++ b/core/arch/arm32/tee/arch_svc.c
@@ -25,7 +25,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
-#include <arm32.h>
+#include <arm.h>
#include <kernel/thread.h>
#include <tee/tee_svc.h>
#include <tee/arch_svc.h>
diff --git a/core/arch/arm32/tee/arch_svc_a32.S b/core/arch/arm32/tee/arch_svc_a32.S
index 784f9542..67616084 100644
--- a/core/arch/arm32/tee/arch_svc_a32.S
+++ b/core/arch/arm32/tee/arch_svc_a32.S
@@ -27,7 +27,7 @@
#include "tee_syscall_numbers.h"
#include "trace_levels.h"
#include <asm.S>
-#include <arm32.h>
+#include <arm.h>
#include <tee_api_defines.h>
#include <kernel/thread.h>
diff --git a/core/core.mk b/core/core.mk
index 347c8096..a4dc5e72 100644
--- a/core/core.mk
+++ b/core/core.mk
@@ -7,6 +7,7 @@ sm-$(sm) := y
arch-dir := core/arch/$(ARCH)
platform-dir := $(arch-dir)/plat-$(PLATFORM)
include $(platform-dir)/conf.mk
+include core/arch/$(ARCH)/$(ARCH).mk
# Setup compiler for this sub module
CROSS_COMPILE_$(sm) ?= $(CROSS_COMPILE)
diff --git a/ta/arch/arm32/arm32.mk b/ta/arch/arm32/arm32.mk
new file mode 100644
index 00000000..40a25486
--- /dev/null
+++ b/ta/arch/arm32/arm32.mk
@@ -0,0 +1,6 @@
+ifeq ($(CFG_ARM64_user_ta),y)
+user_ta-platform-cppflags += -DARM64=1
+endif
+ifeq ($(CFG_ARM32_user_ta),y)
+user_ta-platform-cppflags += -DARM32=1
+endif
diff --git a/ta/mk/ta_dev_kit.mk b/ta/mk/ta_dev_kit.mk
index b36ce076..37265da1 100644
--- a/ta/mk/ta_dev_kit.mk
+++ b/ta/mk/ta_dev_kit.mk
@@ -32,6 +32,8 @@ cflags$(sm) += $(platform-cflags) $(user_ta-platform-cflags)
cppflags$(sm) += -I. -I$(ta-dev-kit-dir)/include
+include $(ta-dev-kit-dir)/mk/arch.mk
+
libdirs += $(ta-dev-kit-dir)/lib
libnames += utils mpa utee
libdeps += $(ta-dev-kit-dir)/lib/libutils.a
diff --git a/ta/ta.mk b/ta/ta.mk
index dcb3b536..531c1f46 100644
--- a/ta/ta.mk
+++ b/ta/ta.mk
@@ -9,6 +9,8 @@ CROSS_COMPILE_$(sm) ?= $(CROSS_COMPILE)
COMPILER_$(sm) ?= $(COMPILER)
include mk/$(COMPILER_$(sm)).mk
+include ta/arch/$(ARCH)/$(ARCH).mk
+
cppflags$(sm) += $(platform-cppflags) $(user_ta-platform-cppflags)
cflags$(sm) += $(platform-cflags) $(user_ta-platform-cflags)
aflags$(sm) += $(platform-aflags) $(user_ta-platform-aflags)
@@ -66,6 +68,17 @@ ta-mkfiles = mk/compile.mk mk/subdir.mk mk/gcc.mk \
$(foreach f, $(ta-mkfiles), \
$(eval $(call copy-file, $(f), $(out-dir)/export-user_ta/mk)))
+# Special treatment for ta/arch/$(ARCH)/$(ARCH).mk
+arch-arch-mk := $(out-dir)/export-user_ta/mk/arch.mk
+$(arch-arch-mk): ta/arch/$(ARCH)/$(ARCH).mk
+ @set -e; \
+ mkdir -p $(dir $@) ; \
+ echo ' INSTALL $@' ; \
+ cp $< $@
+
+cleanfiles += $(arch-arch-mk)
+all: $(arch-arch-mk)
+
# Copy the .h files for TAs
define copy-incdir
sf := $(subst $1/, , $(shell find $1 -name "*.h"))