blob: c528f0d02adf1003faf6d15ba63ef386e6d0a5a0 [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>
Soby Mathew9b2de242024-02-27 16:08:42 +00007#include <arm_dram.h>
AlexeiFedorov7c5001a2022-12-14 13:22:33 +00008#include <assert.h>
AlexeiFedorov7c5001a2022-12-14 13:22:33 +00009#include <rmm_el3_ifc.h>
10
Soby Mathew9b2de242024-02-27 16:08:42 +000011void arm_set_dram_layout(struct ns_dram_info *plat_dram)
AlexeiFedorov7c5001a2022-12-14 13:22:33 +000012{
AlexeiFedorov7c5001a2022-12-14 13:22:33 +000013 struct ns_dram_bank *bank_ptr;
Soby Mathew9b2de242024-02-27 16:08:42 +000014 struct arm_dram_layout *dram_ptr = arm_get_dram_layout();
Harry Moulton1c9c7b92024-03-07 16:33:59 +000015 uint64_t num_banks, num_granules;
AlexeiFedorov7c5001a2022-12-14 13:22:33 +000016
Soby Mathew4714e232023-10-04 07:03:08 +010017 assert(!is_mmu_enabled());
18
AlexeiFedorov7c5001a2022-12-14 13:22:33 +000019 /* Number of banks */
20 num_banks = plat_dram->num_banks;
Harry Moulton1c9c7b92024-03-07 16:33:59 +000021 assert(num_banks > 0UL);
22 assert(num_banks <= PLAT_ARM_MAX_DRAM_BANKS);
AlexeiFedorov7c5001a2022-12-14 13:22:33 +000023
24 /* Pointer to dram_bank[] array */
25 bank_ptr = plat_dram->banks;
26
Harry Moulton1c9c7b92024-03-07 16:33:59 +000027 num_granules = 0UL;
28
AlexeiFedorov7c5001a2022-12-14 13:22:33 +000029 for (unsigned long i = 0UL; i < num_banks; i++) {
Harry Moulton1c9c7b92024-03-07 16:33:59 +000030 uint64_t base = bank_ptr->base;
AlexeiFedorov7c5001a2022-12-14 13:22:33 +000031 uint64_t size = bank_ptr->size;
AlexeiFedorov7c5001a2022-12-14 13:22:33 +000032
Harry Moulton1c9c7b92024-03-07 16:33:59 +000033 dram_ptr->bank[i].base = base;
34 dram_ptr->bank[i].size = size;
35 dram_ptr->bank[i].start_gran_idx = num_granules;
AlexeiFedorov7c5001a2022-12-14 13:22:33 +000036
Harry Moulton1c9c7b92024-03-07 16:33:59 +000037 num_granules += (size >> GRANULE_SHIFT);
AlexeiFedorov7c5001a2022-12-14 13:22:33 +000038 bank_ptr++;
39 }
40
Harry Moulton1c9c7b92024-03-07 16:33:59 +000041 assert(num_granules <= RMM_MAX_GRANULES);
42
43 dram_ptr->num_banks = num_banks;
AlexeiFedorovee2fc822023-10-31 14:54:39 +000044 dram_ptr->num_granules = num_granules;
AlexeiFedorov7c5001a2022-12-14 13:22:33 +000045
Soby Mathew9b2de242024-02-27 16:08:42 +000046 inv_dcache_range((uintptr_t)dram_ptr, sizeof(struct arm_dram_layout));
AlexeiFedorov7c5001a2022-12-14 13:22:33 +000047}