1d8e919c7SMasahiro Yamada /*
2c64873abSMasahiro Yamada * Copyright (c) 2017-2020, ARM Limited and Contributors. All rights reserved.
3d8e919c7SMasahiro Yamada *
4d8e919c7SMasahiro Yamada * SPDX-License-Identifier: BSD-3-Clause
5d8e919c7SMasahiro Yamada */
6d8e919c7SMasahiro Yamada
7eba319beSMasahiro Yamada #include <assert.h>
8eba319beSMasahiro Yamada
9d8e919c7SMasahiro Yamada #include <platform_def.h>
1009d40e0eSAntonio Nino Diaz
1109d40e0eSAntonio Nino Diaz #include <common/debug.h>
1209d40e0eSAntonio Nino Diaz #include <lib/xlat_tables/xlat_tables_v2.h>
13*664e15c2SMasahiro Yamada #include <plat/common/platform.h>
14d8e919c7SMasahiro Yamada
15eba319beSMasahiro Yamada #include "uniphier.h"
16d8e919c7SMasahiro Yamada
17eba319beSMasahiro Yamada struct uniphier_reg_region {
18eba319beSMasahiro Yamada uintptr_t base;
19eba319beSMasahiro Yamada size_t size;
20eba319beSMasahiro Yamada };
21eba319beSMasahiro Yamada
22eba319beSMasahiro Yamada static const struct uniphier_reg_region uniphier_reg_region[] = {
23eba319beSMasahiro Yamada [UNIPHIER_SOC_LD11] = {
24eba319beSMasahiro Yamada .base = 0x50000000UL,
25eba319beSMasahiro Yamada .size = 0x20000000UL,
26eba319beSMasahiro Yamada },
27eba319beSMasahiro Yamada [UNIPHIER_SOC_LD20] = {
28eba319beSMasahiro Yamada .base = 0x50000000UL,
29eba319beSMasahiro Yamada .size = 0x20000000UL,
30eba319beSMasahiro Yamada },
31eba319beSMasahiro Yamada [UNIPHIER_SOC_PXS3] = {
32eba319beSMasahiro Yamada .base = 0x50000000UL,
33eba319beSMasahiro Yamada .size = 0x20000000UL,
34eba319beSMasahiro Yamada },
35eba319beSMasahiro Yamada };
36eba319beSMasahiro Yamada
uniphier_mmap_setup(unsigned int soc)37eba319beSMasahiro Yamada void uniphier_mmap_setup(unsigned int soc)
38d8e919c7SMasahiro Yamada {
39d8e919c7SMasahiro Yamada VERBOSE("Trusted RAM seen by this BL image: %p - %p\n",
40c64873abSMasahiro Yamada (void *)BL_CODE_BASE, (void *)BL_END);
41c64873abSMasahiro Yamada mmap_add_region(BL_CODE_BASE, BL_CODE_BASE,
42c64873abSMasahiro Yamada round_up(BL_END, PAGE_SIZE) - BL_CODE_BASE,
43d8e919c7SMasahiro Yamada MT_MEMORY | MT_RW | MT_SECURE);
44d8e919c7SMasahiro Yamada
45d8e919c7SMasahiro Yamada /* remap the code section */
46d8e919c7SMasahiro Yamada VERBOSE("Code region: %p - %p\n",
47d8e919c7SMasahiro Yamada (void *)BL_CODE_BASE, (void *)BL_CODE_END);
48d8e919c7SMasahiro Yamada mmap_add_region(BL_CODE_BASE, BL_CODE_BASE,
49d8e919c7SMasahiro Yamada round_up(BL_CODE_END, PAGE_SIZE) - BL_CODE_BASE,
50d8e919c7SMasahiro Yamada MT_CODE | MT_SECURE);
51d8e919c7SMasahiro Yamada
52d8e919c7SMasahiro Yamada /* remap the coherent memory region */
53d8e919c7SMasahiro Yamada VERBOSE("Coherent region: %p - %p\n",
54d8e919c7SMasahiro Yamada (void *)BL_COHERENT_RAM_BASE, (void *)BL_COHERENT_RAM_END);
55d8e919c7SMasahiro Yamada mmap_add_region(BL_COHERENT_RAM_BASE, BL_COHERENT_RAM_BASE,
56d8e919c7SMasahiro Yamada BL_COHERENT_RAM_END - BL_COHERENT_RAM_BASE,
57d8e919c7SMasahiro Yamada MT_DEVICE | MT_RW | MT_SECURE);
58d8e919c7SMasahiro Yamada
59d8e919c7SMasahiro Yamada /* register region */
60eba319beSMasahiro Yamada assert(soc < ARRAY_SIZE(uniphier_reg_region));
61eba319beSMasahiro Yamada mmap_add_region(uniphier_reg_region[soc].base,
62eba319beSMasahiro Yamada uniphier_reg_region[soc].base,
63eba319beSMasahiro Yamada uniphier_reg_region[soc].size,
64d8e919c7SMasahiro Yamada MT_DEVICE | MT_RW | MT_SECURE);
65d8e919c7SMasahiro Yamada
66d8e919c7SMasahiro Yamada init_xlat_tables();
672765ffdcSMasahiro Yamada
682765ffdcSMasahiro Yamada enable_mmu(0);
69*664e15c2SMasahiro Yamada
70*664e15c2SMasahiro Yamada #if PLAT_RO_XLAT_TABLES
71*664e15c2SMasahiro Yamada {
72*664e15c2SMasahiro Yamada int ret;
73*664e15c2SMasahiro Yamada
74*664e15c2SMasahiro Yamada ret = xlat_make_tables_readonly();
75*664e15c2SMasahiro Yamada if (ret) {
76*664e15c2SMasahiro Yamada ERROR("Failed to make translation tables read-only.");
77*664e15c2SMasahiro Yamada plat_error_handler(ret);
78*664e15c2SMasahiro Yamada }
79*664e15c2SMasahiro Yamada }
80*664e15c2SMasahiro Yamada #endif
81d8e919c7SMasahiro Yamada }
82