blob: 983b6ee14abf5cdb69e5bade7e7972c628ce572c [file] [log] [blame]
Soby Mathew9b2de242024-02-27 16:08:42 +00001/*
2 * SPDX-License-Identifier: BSD-3-Clause
3 * SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
4 */
5
6#include <arm_dram.h>
7#include <assert.h>
8#include <platform_api.h>
9#include <utils_def.h>
10
11static struct arm_dram_layout arm_dram;
12
13struct arm_dram_layout *arm_get_dram_layout(void)
14{
15 return &arm_dram;
16}
17
18unsigned long plat_granule_addr_to_idx(unsigned long addr)
19{
20 if (!GRANULE_ALIGNED(addr)) {
21 return UINT64_MAX;
22 }
23
24 if ((addr >= arm_dram.arm_bank[0].start_addr) &&
25 (addr <= arm_dram.arm_bank[0].end_addr)) {
26 return (addr - arm_dram.arm_bank[0].start_addr) / GRANULE_SIZE;
27 }
28
29 if ((arm_dram.arm_bank[1].start_addr != 0UL) &&
30 (addr >= arm_dram.arm_bank[1].start_addr) &&
31 (addr <= arm_dram.arm_bank[1].end_addr)) {
32 return ((addr - arm_dram.arm_bank[1].start_addr) /
33 GRANULE_SIZE) + arm_dram.idx_bank_1;
34 }
35
36 return UINT64_MAX;
37}
38
39unsigned long plat_granule_idx_to_addr(unsigned long idx)
40{
41 assert(idx < arm_dram.num_granules);
42
43 if (idx < arm_dram.idx_bank_1) {
44 return arm_dram.arm_bank[0].start_addr + (idx * GRANULE_SIZE);
45 }
46
47 return arm_dram.arm_bank[1].start_addr +
48 ((idx - arm_dram.idx_bank_1) * GRANULE_SIZE);
49}