blob: 10057f6890b7b68f62a037b819877b59eed6d6f9 [file] [log] [blame]
AlexeiFedorov7c5001a2022-12-14 13:22:33 +00001/*
2 * SPDX-License-Identifier: BSD-3-Clause
3 * SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
4 */
5
6#include <arch_helpers.h>
7#include <assert.h>
8#include <debug.h>
9#include <fvp_dram.h>
10#include <rmm_el3_ifc.h>
11
12COMPILER_ASSERT(MAX_DRAM_NUM_BANKS == 2UL);
13
14void fvp_set_dram_layout(struct ns_dram_info *plat_dram)
15{
16 uint64_t num_banks, num_granules = 0UL;
17 struct ns_dram_bank *bank_ptr;
18 struct fvp_dram_layout *fvp_dram = fvp_get_dram_layout();
19
20 /* Number of banks */
21 num_banks = plat_dram->num_banks;
22
23 /* Pointer to dram_bank[] array */
24 bank_ptr = plat_dram->banks;
25
26 for (unsigned long i = 0UL; i < num_banks; i++) {
27 uintptr_t start = bank_ptr->base;
28 uint64_t size = bank_ptr->size;
29 uintptr_t end = start + size - 1UL;
30
31 if (i == 1UL) {
32 /* Start granule index in bank 1 */
33 fvp_dram->idx_bank_1 = num_granules;
34 }
35
36 /* Total number of granules */
37 num_granules += (size / GRANULE_SIZE);
38
39 fvp_dram->fvp_bank[i].start_addr = start;
40 fvp_dram->fvp_bank[i].end_addr = end;
41
42 bank_ptr++;
43 }
44
45 fvp_dram->num_granules = num_granules;
46
47 flush_dcache_range((uintptr_t)fvp_dram, sizeof(fvp_dram));
48}