]>
git.ipfire.org Git - thirdparty/u-boot.git/blob - arch/arm/mach-renesas/memmap-gen3.c
1 // SPDX-License-Identifier: GPL-2.0+
3 * Renesas RCar Gen3 memory map tables
5 * Copyright (C) 2017 Marek Vasut <marek.vasut@gmail.com>
8 #include <asm/armv8/mmu.h>
9 #include <asm/global_data.h>
10 #include <asm/u-boot.h>
13 #define GEN3_NR_REGIONS 16
15 static struct mm_region gen3_mem_map
[GEN3_NR_REGIONS
] = {
20 .attrs
= PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE
) |
22 PTE_BLOCK_PXN
| PTE_BLOCK_UXN
27 .attrs
= PTE_BLOCK_MEMTYPE(MT_NORMAL
) |
33 .attrs
= PTE_BLOCK_MEMTYPE(MT_NORMAL
) |
39 .attrs
= PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE
) |
41 PTE_BLOCK_PXN
| PTE_BLOCK_UXN
43 .virt
= 0x100000000UL
,
44 .phys
= 0x100000000UL
,
45 .size
= 0xf00000000UL
,
46 .attrs
= PTE_BLOCK_MEMTYPE(MT_NORMAL
) |
54 struct mm_region
*mem_map
= gen3_mem_map
;
56 DECLARE_GLOBAL_DATA_PTR
;
58 void enable_caches(void)
63 /* Create map for RPC access */
64 gen3_mem_map
[i
].virt
= 0x0ULL
;
65 gen3_mem_map
[i
].phys
= 0x0ULL
;
66 gen3_mem_map
[i
].size
= 0x40000000ULL
;
67 gen3_mem_map
[i
].attrs
= PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE
) |
69 PTE_BLOCK_PXN
| PTE_BLOCK_UXN
;
72 /* Generate entires for DRAM in 32bit address space */
73 for (bank
= 0; bank
< CONFIG_NR_DRAM_BANKS
; bank
++) {
74 start
= gd
->bd
->bi_dram
[bank
].start
;
75 size
= gd
->bd
->bi_dram
[bank
].size
;
77 /* Skip empty DRAM banks */
81 /* Skip DRAM above 4 GiB */
85 /* Mark memory reserved by ATF as cacheable too. */
86 if (start
== 0x48000000) {
87 /* Unmark protection area (0x43F00000 to 0x47DFFFFF) */
88 gen3_mem_map
[i
].virt
= 0x40000000ULL
;
89 gen3_mem_map
[i
].phys
= 0x40000000ULL
;
90 gen3_mem_map
[i
].size
= 0x03F00000ULL
;
91 gen3_mem_map
[i
].attrs
= PTE_BLOCK_MEMTYPE(MT_NORMAL
) |
92 PTE_BLOCK_INNER_SHARE
;
95 start
= 0x47E00000ULL
;
96 size
+= 0x00200000ULL
;
99 gen3_mem_map
[i
].virt
= start
;
100 gen3_mem_map
[i
].phys
= start
;
101 gen3_mem_map
[i
].size
= size
;
102 gen3_mem_map
[i
].attrs
= PTE_BLOCK_MEMTYPE(MT_NORMAL
) |
103 PTE_BLOCK_INNER_SHARE
;
107 /* Create map for register access */
108 gen3_mem_map
[i
].virt
= 0xc0000000ULL
;
109 gen3_mem_map
[i
].phys
= 0xc0000000ULL
;
110 gen3_mem_map
[i
].size
= 0x40000000ULL
;
111 gen3_mem_map
[i
].attrs
= PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE
) |
112 PTE_BLOCK_NON_SHARE
|
113 PTE_BLOCK_PXN
| PTE_BLOCK_UXN
;
116 /* Generate entires for DRAM in 64bit address space */
117 for (bank
= 0; bank
< CONFIG_NR_DRAM_BANKS
; bank
++) {
118 start
= gd
->bd
->bi_dram
[bank
].start
;
119 size
= gd
->bd
->bi_dram
[bank
].size
;
121 /* Skip empty DRAM banks */
125 /* Skip DRAM below 4 GiB */
126 if (!(start
>> 32ULL))
129 gen3_mem_map
[i
].virt
= start
;
130 gen3_mem_map
[i
].phys
= start
;
131 gen3_mem_map
[i
].size
= size
;
132 gen3_mem_map
[i
].attrs
= PTE_BLOCK_MEMTYPE(MT_NORMAL
) |
133 PTE_BLOCK_INNER_SHARE
;
137 /* Zero out the remaining regions. */
138 for (; i
< GEN3_NR_REGIONS
; i
++) {
139 gen3_mem_map
[i
].virt
= 0;
140 gen3_mem_map
[i
].phys
= 0;
141 gen3_mem_map
[i
].size
= 0;
142 gen3_mem_map
[i
].attrs
= 0;
145 if (!icache_status())