blob: 983b6ee14abf5cdb69e5bade7e7972c628ce572c [file] [log] [blame]
/*
* SPDX-License-Identifier: BSD-3-Clause
* SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
*/
#include <arm_dram.h>
#include <assert.h>
#include <platform_api.h>
#include <utils_def.h>
static struct arm_dram_layout arm_dram;
struct arm_dram_layout *arm_get_dram_layout(void)
{
return &arm_dram;
}
unsigned long plat_granule_addr_to_idx(unsigned long addr)
{
if (!GRANULE_ALIGNED(addr)) {
return UINT64_MAX;
}
if ((addr >= arm_dram.arm_bank[0].start_addr) &&
(addr <= arm_dram.arm_bank[0].end_addr)) {
return (addr - arm_dram.arm_bank[0].start_addr) / GRANULE_SIZE;
}
if ((arm_dram.arm_bank[1].start_addr != 0UL) &&
(addr >= arm_dram.arm_bank[1].start_addr) &&
(addr <= arm_dram.arm_bank[1].end_addr)) {
return ((addr - arm_dram.arm_bank[1].start_addr) /
GRANULE_SIZE) + arm_dram.idx_bank_1;
}
return UINT64_MAX;
}
unsigned long plat_granule_idx_to_addr(unsigned long idx)
{
assert(idx < arm_dram.num_granules);
if (idx < arm_dram.idx_bank_1) {
return arm_dram.arm_bank[0].start_addr + (idx * GRANULE_SIZE);
}
return arm_dram.arm_bank[1].start_addr +
((idx - arm_dram.idx_bank_1) * GRANULE_SIZE);
}