blob: f6170a0f82c79ab03ef9618ec12fc1b87a9389e8 [file] [log] [blame]
Ruari Phipps1925b2a2020-09-10 14:05:55 +01001/*
2 * Copyright (c) 2021, Arm Limited. All rights reserved.
Varun Wadekar4bf62f02021-11-08 07:55:45 -08003 * Copyright (c) 2021, NVIDIA Corporation. All rights reserved.
Ruari Phipps1925b2a2020-09-10 14:05:55 +01004 *
5 * SPDX-License-Identifier: BSD-3-Clause
6 */
7
8#include <assert.h>
9#include <debug.h>
10#include <drivers/arm/pl011.h>
11#include <drivers/console.h>
12#include <errno.h>
13#include <ffa_helpers.h>
14#include <lib/aarch64/arch_helpers.h>
15#include <lib/xlat_tables/xlat_mmu_helpers.h>
16#include <lib/xlat_tables/xlat_tables_v2.h>
17#include <plat_arm.h>
18#include <plat/common/platform.h>
19#include <platform_def.h>
20#include <sp_debug.h>
21#include <sp_helpers.h>
22#include <std_svc.h>
23
24#include "ivy.h"
25#include "ivy_def.h"
26
27static void shim_print_memory_layout(void)
28{
Olivier Deprez24bd1702021-10-05 14:35:17 +020029 INFO("Secure Partition memory layout:\n");
Ruari Phipps1925b2a2020-09-10 14:05:55 +010030
Olivier Deprez24bd1702021-10-05 14:35:17 +020031 INFO(" Image regions\n");
32 INFO(" Text region : %p - %p\n",
Ruari Phipps1925b2a2020-09-10 14:05:55 +010033 (void *)IVY_TEXT_START, (void *)IVY_TEXT_END);
Olivier Deprez24bd1702021-10-05 14:35:17 +020034 INFO(" Read-only data region : %p - %p\n",
Ruari Phipps1925b2a2020-09-10 14:05:55 +010035 (void *)IVY_RODATA_START, (void *)IVY_RODATA_END);
Olivier Deprez24bd1702021-10-05 14:35:17 +020036 INFO(" Data region : %p - %p\n",
Ruari Phipps1925b2a2020-09-10 14:05:55 +010037 (void *)IVY_DATA_START, (void *)IVY_DATA_END);
Olivier Deprez24bd1702021-10-05 14:35:17 +020038 INFO(" BSS region : %p - %p\n",
Ruari Phipps1925b2a2020-09-10 14:05:55 +010039 (void *)IVY_BSS_START, (void *)IVY_BSS_END);
Olivier Deprez24bd1702021-10-05 14:35:17 +020040 INFO(" Total image memory : %p - %p\n",
Ruari Phipps1925b2a2020-09-10 14:05:55 +010041 (void *)IVY_IMAGE_BASE,
42 (void *)(IVY_IMAGE_BASE + IVY_IMAGE_SIZE));
Olivier Deprez24bd1702021-10-05 14:35:17 +020043 INFO(" SPM regions\n");
44 INFO(" SPM <-> SP buffer : %p - %p\n",
Ruari Phipps1925b2a2020-09-10 14:05:55 +010045 (void *)IVY_SPM_BUF_BASE,
46 (void *)(IVY_SPM_BUF_BASE + IVY_SPM_BUF_SIZE));
Olivier Deprez24bd1702021-10-05 14:35:17 +020047 INFO(" NS <-> SP buffer : %p - %p\n",
Ruari Phipps1925b2a2020-09-10 14:05:55 +010048 (void *)IVY_NS_BUF_BASE,
49 (void *)(IVY_NS_BUF_BASE + IVY_NS_BUF_SIZE));
50}
51
52static void shim_plat_configure_mmu(void)
53{
54 mmap_add_region(SHIM_TEXT_START,
55 SHIM_TEXT_START,
56 SHIM_TEXT_END - SHIM_TEXT_START,
57 MT_CODE | MT_PRIVILEGED);
58 mmap_add_region(SHIM_RODATA_START,
59 SHIM_RODATA_START,
60 SHIM_RODATA_END - SHIM_RODATA_START,
61 MT_RO_DATA | MT_PRIVILEGED);
62 mmap_add_region(SHIM_DATA_START,
63 SHIM_DATA_START,
64 SHIM_DATA_END - SHIM_DATA_START,
65 MT_RW_DATA | MT_PRIVILEGED);
66 mmap_add_region(SHIM_BSS_START,
67 SHIM_BSS_START,
68 SHIM_BSS_END - SHIM_BSS_START,
69 MT_RW_DATA | MT_PRIVILEGED);
70 mmap_add_region(IVY_TEXT_START,
71 IVY_TEXT_START,
72 IVY_TEXT_END - IVY_TEXT_START,
73 MT_CODE | MT_USER);
74 mmap_add_region(IVY_RODATA_START,
75 IVY_RODATA_START,
76 IVY_RODATA_END - IVY_RODATA_START,
77 MT_RO_DATA | MT_USER);
78 mmap_add_region(IVY_DATA_START,
79 IVY_DATA_START,
80 IVY_DATA_END - IVY_DATA_START,
81 MT_RW_DATA | MT_USER);
82 mmap_add_region(IVY_BSS_START,
83 IVY_BSS_START,
84 IVY_BSS_END - IVY_BSS_START,
85 MT_RW_DATA | MT_USER);
86
87 init_xlat_tables();
88}
89
90int shim_main(void)
91{
92 assert(IS_IN_EL1() != 0);
93
94 /* Initialise console */
Kathleen Capella3cb74252023-03-14 17:51:09 -040095 set_putc_impl(FFA_HVC_CALL_AS_STDOUT);
Ruari Phipps1925b2a2020-09-10 14:05:55 +010096
Ruari Phipps1925b2a2020-09-10 14:05:55 +010097 /* Configure and enable Stage-1 MMU, enable D-Cache */
98 shim_plat_configure_mmu();
99 enable_mmu_el1(0);
100
Varun Wadekar4bf62f02021-11-08 07:55:45 -0800101 INFO("Booting S-EL1 Shim\n");
102
Ruari Phipps1925b2a2020-09-10 14:05:55 +0100103 shim_print_memory_layout();
104
105 return 0;
106}