blob: f03a52f987627645212f7969ed082cdba96aeb80 [file] [log] [blame]
Ruari Phipps1925b2a2020-09-10 14:05:55 +01001/*
2 * Copyright (c) 2021, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#include <assert.h>
8#include <debug.h>
9#include <drivers/arm/pl011.h>
10#include <drivers/console.h>
11#include <errno.h>
12#include <ffa_helpers.h>
13#include <lib/aarch64/arch_helpers.h>
14#include <lib/xlat_tables/xlat_mmu_helpers.h>
15#include <lib/xlat_tables/xlat_tables_v2.h>
16#include <plat_arm.h>
17#include <plat/common/platform.h>
18#include <platform_def.h>
19#include <sp_debug.h>
20#include <sp_helpers.h>
21#include <std_svc.h>
22
23#include "ivy.h"
24#include "ivy_def.h"
25
26static void shim_print_memory_layout(void)
27{
Olivier Deprez24bd1702021-10-05 14:35:17 +020028 INFO("Secure Partition memory layout:\n");
Ruari Phipps1925b2a2020-09-10 14:05:55 +010029
Olivier Deprez24bd1702021-10-05 14:35:17 +020030 INFO(" Image regions\n");
31 INFO(" Text region : %p - %p\n",
Ruari Phipps1925b2a2020-09-10 14:05:55 +010032 (void *)IVY_TEXT_START, (void *)IVY_TEXT_END);
Olivier Deprez24bd1702021-10-05 14:35:17 +020033 INFO(" Read-only data region : %p - %p\n",
Ruari Phipps1925b2a2020-09-10 14:05:55 +010034 (void *)IVY_RODATA_START, (void *)IVY_RODATA_END);
Olivier Deprez24bd1702021-10-05 14:35:17 +020035 INFO(" Data region : %p - %p\n",
Ruari Phipps1925b2a2020-09-10 14:05:55 +010036 (void *)IVY_DATA_START, (void *)IVY_DATA_END);
Olivier Deprez24bd1702021-10-05 14:35:17 +020037 INFO(" BSS region : %p - %p\n",
Ruari Phipps1925b2a2020-09-10 14:05:55 +010038 (void *)IVY_BSS_START, (void *)IVY_BSS_END);
Olivier Deprez24bd1702021-10-05 14:35:17 +020039 INFO(" Total image memory : %p - %p\n",
Ruari Phipps1925b2a2020-09-10 14:05:55 +010040 (void *)IVY_IMAGE_BASE,
41 (void *)(IVY_IMAGE_BASE + IVY_IMAGE_SIZE));
Olivier Deprez24bd1702021-10-05 14:35:17 +020042 INFO(" SPM regions\n");
43 INFO(" SPM <-> SP buffer : %p - %p\n",
Ruari Phipps1925b2a2020-09-10 14:05:55 +010044 (void *)IVY_SPM_BUF_BASE,
45 (void *)(IVY_SPM_BUF_BASE + IVY_SPM_BUF_SIZE));
Olivier Deprez24bd1702021-10-05 14:35:17 +020046 INFO(" NS <-> SP buffer : %p - %p\n",
Ruari Phipps1925b2a2020-09-10 14:05:55 +010047 (void *)IVY_NS_BUF_BASE,
48 (void *)(IVY_NS_BUF_BASE + IVY_NS_BUF_SIZE));
49}
50
51static void shim_plat_configure_mmu(void)
52{
53 mmap_add_region(SHIM_TEXT_START,
54 SHIM_TEXT_START,
55 SHIM_TEXT_END - SHIM_TEXT_START,
56 MT_CODE | MT_PRIVILEGED);
57 mmap_add_region(SHIM_RODATA_START,
58 SHIM_RODATA_START,
59 SHIM_RODATA_END - SHIM_RODATA_START,
60 MT_RO_DATA | MT_PRIVILEGED);
61 mmap_add_region(SHIM_DATA_START,
62 SHIM_DATA_START,
63 SHIM_DATA_END - SHIM_DATA_START,
64 MT_RW_DATA | MT_PRIVILEGED);
65 mmap_add_region(SHIM_BSS_START,
66 SHIM_BSS_START,
67 SHIM_BSS_END - SHIM_BSS_START,
68 MT_RW_DATA | MT_PRIVILEGED);
69 mmap_add_region(IVY_TEXT_START,
70 IVY_TEXT_START,
71 IVY_TEXT_END - IVY_TEXT_START,
72 MT_CODE | MT_USER);
73 mmap_add_region(IVY_RODATA_START,
74 IVY_RODATA_START,
75 IVY_RODATA_END - IVY_RODATA_START,
76 MT_RO_DATA | MT_USER);
77 mmap_add_region(IVY_DATA_START,
78 IVY_DATA_START,
79 IVY_DATA_END - IVY_DATA_START,
80 MT_RW_DATA | MT_USER);
81 mmap_add_region(IVY_BSS_START,
82 IVY_BSS_START,
83 IVY_BSS_END - IVY_BSS_START,
84 MT_RW_DATA | MT_USER);
85
86 init_xlat_tables();
87}
88
89int shim_main(void)
90{
91 assert(IS_IN_EL1() != 0);
92
93 /* Initialise console */
94 set_putc_impl(HVC_CALL_AS_STDOUT);
95
Olivier Deprez24bd1702021-10-05 14:35:17 +020096 INFO("Booting S-EL1 Shim\n");
Ruari Phipps1925b2a2020-09-10 14:05:55 +010097
98 /* Configure and enable Stage-1 MMU, enable D-Cache */
99 shim_plat_configure_mmu();
100 enable_mmu_el1(0);
101
102 shim_print_memory_layout();
103
104 return 0;
105}