eeeb270568e3e96ee6a78a1c36e322487ec02a8d
[oweals/u-boot.git] / arch / arm / mach-rmobile / memmap-gen3.c
1 /*
2  * Renesas RCar Gen3 memory map tables
3  *
4  * Copyright (C) 2017 Marek Vasut <marek.vasut@gmail.com>
5  *
6  * SPDX-License-Identifier: GPL-2.0+
7  */
8
9 #include <common.h>
10 #include <asm/armv8/mmu.h>
11
12 static struct mm_region r8a7795_mem_map[] = {
13         {
14                 .virt = 0x0UL,
15                 .phys = 0x0UL,
16                 .size = 0x80000000UL,
17                 .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
18                          PTE_BLOCK_INNER_SHARE
19         }, {
20                 .virt = 0x80000000UL,
21                 .phys = 0x80000000UL,
22                 .size = 0x80000000UL,
23                 .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
24                          PTE_BLOCK_NON_SHARE |
25                          PTE_BLOCK_PXN | PTE_BLOCK_UXN
26         }, {
27                 /* List terminator */
28                 0,
29         }
30 };
31
32 static struct mm_region r8a7796_mem_map[] = {
33         {
34                 .virt = 0x0UL,
35                 .phys = 0x0UL,
36                 .size = 0xe0000000UL,
37                 .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
38                          PTE_BLOCK_INNER_SHARE
39         }, {
40                 .virt = 0xe0000000UL,
41                 .phys = 0xe0000000UL,
42                 .size = 0xe0000000UL,
43                 .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
44                          PTE_BLOCK_NON_SHARE |
45                          PTE_BLOCK_PXN | PTE_BLOCK_UXN
46         }, {
47                 /* List terminator */
48                 0,
49         }
50 };
51
52 static struct mm_region r8a77970_mem_map[] = {
53         {
54                 .virt = 0x0UL,
55                 .phys = 0x0UL,
56                 .size = 0xe0000000UL,
57                 .attrs = PTE_BLOCK_MEMTYPE(MT_NORMAL) |
58                          PTE_BLOCK_INNER_SHARE
59         }, {
60                 .virt = 0xe0000000UL,
61                 .phys = 0xe0000000UL,
62                 .size = 0xe0000000UL,
63                 .attrs = PTE_BLOCK_MEMTYPE(MT_DEVICE_NGNRNE) |
64                          PTE_BLOCK_NON_SHARE |
65                          PTE_BLOCK_PXN | PTE_BLOCK_UXN
66         }, {
67                 /* List terminator */
68                 0,
69         }
70 };
71
72 struct mm_region *mem_map = r8a7795_mem_map;
73
74 void rcar_gen3_memmap_fixup(void)
75 {
76         u32 cpu_type = rmobile_get_cpu_type();
77
78         switch (cpu_type) {
79         case RMOBILE_CPU_TYPE_R8A7795:
80                 mem_map = r8a7795_mem_map;
81                 break;
82         case RMOBILE_CPU_TYPE_R8A7796:
83                 mem_map = r8a7796_mem_map;
84                 break;
85         case RMOBILE_CPU_TYPE_R8A77970:
86                 mem_map = r8a77970_mem_map;
87                 break;
88         }
89 }