aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTamas Kaman <tamas.kaman@arm.com>2019-07-29 12:56:27 +0200
committerMáté Tóth-Pál <Mate.Toth-Pal@arm.com>2019-07-30 11:35:53 +0000
commita55506889adfa10d64d217539166afd231624018 (patch)
tree2b378b61fa7ec5cc80a16748f272af18e2b51849
parent3ad2e3e2b07f260087034025f237e44ae23bb771 (diff)
downloadtrusted-firmware-m-a55506889adfa10d64d217539166afd231624018.tar.gz
Fix AN524 MPC and PPC init sequence
Both MPC and PPC driver needs initialization before any other API is called. This was missing in several cases which caused AN524 platform init to fail. Change-Id: I034d8959f3bda46446f907cd775b44538d90f954 Signed-off-by: Tamas Kaman <tamas.kaman@arm.com>
-rw-r--r--platform/ext/target/mps3/an524/target_cfg.c60
1 files changed, 59 insertions, 1 deletions
diff --git a/platform/ext/target/mps3/an524/target_cfg.c b/platform/ext/target/mps3/an524/target_cfg.c
index 8aded94fc5..e8a01b20da 100644
--- a/platform/ext/target/mps3/an524/target_cfg.c
+++ b/platform/ext/target/mps3/an524/target_cfg.c
@@ -333,7 +333,47 @@ int32_t mpc_init_cfg(void)
}
#endif /* BL2 */
- /* NSPE use the last 32KB(ISARM 3) */
+ /* SPE uses the first 96kB (3 ISRAM banks) for data */
+ ret = Driver_ISRAM0_MPC.Initialize();
+ if (ret != ARM_DRIVER_OK) {
+ return ret;
+ }
+
+ ret = Driver_ISRAM0_MPC.ConfigRegion(
+ MPC_ISRAM0_RANGE_BASE_S,
+ MPC_ISRAM0_RANGE_LIMIT_S,
+ ARM_MPC_ATTR_SECURE);
+ if (ret != ARM_DRIVER_OK) {
+ return ret;
+ }
+
+ ret = Driver_ISRAM1_MPC.Initialize();
+ if (ret != ARM_DRIVER_OK) {
+ return ret;
+ }
+
+ ret = Driver_ISRAM1_MPC.ConfigRegion(
+ MPC_ISRAM1_RANGE_BASE_S,
+ MPC_ISRAM1_RANGE_LIMIT_S,
+ ARM_MPC_ATTR_SECURE);
+ if (ret != ARM_DRIVER_OK) {
+ return ret;
+ }
+
+ ret = Driver_ISRAM2_MPC.Initialize();
+ if (ret != ARM_DRIVER_OK) {
+ return ret;
+ }
+
+ ret = Driver_ISRAM2_MPC.ConfigRegion(
+ MPC_ISRAM2_RANGE_BASE_S,
+ MPC_ISRAM2_RANGE_LIMIT_S,
+ ARM_MPC_ATTR_SECURE);
+ if (ret != ARM_DRIVER_OK) {
+ return ret;
+ }
+
+ /* NSPE use the last 32KB (ISRAM 3) */
ret = Driver_ISRAM3_MPC.Initialize();
if (ret != ARM_DRIVER_OK) {
return ret;
@@ -353,6 +393,16 @@ int32_t mpc_init_cfg(void)
return ret;
}
+ ret = Driver_ISRAM0_MPC.LockDown();
+ if (ret != ARM_DRIVER_OK) {
+ return ret;
+ }
+
+ ret = Driver_ISRAM1_MPC.LockDown();
+ if (ret != ARM_DRIVER_OK) {
+ return ret;
+ }
+
ret = Driver_ISRAM2_MPC.LockDown();
if (ret != ARM_DRIVER_OK) {
return ret;
@@ -435,6 +485,14 @@ int32_t ppc_init_cfg(void)
return ret;
}
+ /* No peripherals are configured on APB PPC EXP0 but device needs to be
+ * initialialized so that the interrupt can be enabled later.
+ */
+ ret = Driver_APB_PPCEXP0.Initialize();
+ if (ret != ARM_DRIVER_OK) {
+ return ret;
+ }
+
/* Grant non-secure access for APB peripherals on EXP1 */
ret = Driver_APB_PPCEXP1.Initialize();
if (ret != ARM_DRIVER_OK) {