6b65fcf37ec9ff8c3cffaf8017aa1c37df4a5c9c
[platform/kernel/u-boot.git] / include / configs / vexpress_aemv8.h
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Configuration for Versatile Express. Parts were derived from other ARM
4  *   configurations.
5  */
6
7 #ifndef __VEXPRESS_AEMV8_H
8 #define __VEXPRESS_AEMV8_H
9
10 #include <linux/stringify.h>
11
12 /* Link Definitions */
13 #ifdef CONFIG_TARGET_VEXPRESS64_JUNO
14 #else
15 /* ATF loads u-boot here for BASE_FVP model */
16 #endif
17
18 /* CS register bases for the original memory map. */
19 #ifdef CONFIG_TARGET_VEXPRESS64_BASER_FVP
20 #define V2M_DRAM_BASE                   0x00000000
21 #define V2M_PA_BASE                     0x80000000
22 #else
23 #define V2M_DRAM_BASE                   0x80000000
24 #define V2M_PA_BASE                     0x00000000
25 #endif
26
27 #define V2M_PA_CS0                      (V2M_PA_BASE + 0x00000000)
28 #define V2M_PA_CS1                      (V2M_PA_BASE + 0x14000000)
29 #define V2M_PA_CS2                      (V2M_PA_BASE + 0x18000000)
30 #define V2M_PA_CS3                      (V2M_PA_BASE + 0x1c000000)
31 #define V2M_PA_CS4                      (V2M_PA_BASE + 0x0c000000)
32 #define V2M_PA_CS5                      (V2M_PA_BASE + 0x10000000)
33
34 #define V2M_PERIPH_OFFSET(x)            (x << 16)
35 #define V2M_SYSREGS                     (V2M_PA_CS3 + V2M_PERIPH_OFFSET(1))
36 #define V2M_SYSCTL                      (V2M_PA_CS3 + V2M_PERIPH_OFFSET(2))
37 #define V2M_SERIAL_BUS_PCI              (V2M_PA_CS3 + V2M_PERIPH_OFFSET(3))
38
39 /* Common peripherals relative to CS7. */
40 #define V2M_AACI                        (V2M_PA_CS3 + V2M_PERIPH_OFFSET(4))
41 #define V2M_MMCI                        (V2M_PA_CS3 + V2M_PERIPH_OFFSET(5))
42 #define V2M_KMI0                        (V2M_PA_CS3 + V2M_PERIPH_OFFSET(6))
43 #define V2M_KMI1                        (V2M_PA_CS3 + V2M_PERIPH_OFFSET(7))
44
45 #ifdef CONFIG_TARGET_VEXPRESS64_JUNO
46 #define V2M_UART0                       0x7ff80000
47 #define V2M_UART1                       0x7ff70000
48 #else /* Not Juno */
49 #define V2M_UART0                       (V2M_PA_CS3 + V2M_PERIPH_OFFSET(9))
50 #define V2M_UART1                       (V2M_PA_CS3 + V2M_PERIPH_OFFSET(10))
51 #define V2M_UART2                       (V2M_PA_CS3 + V2M_PERIPH_OFFSET(11))
52 #define V2M_UART3                       (V2M_PA_CS3 + V2M_PERIPH_OFFSET(12))
53 #endif
54
55 #define V2M_WDT                         (V2M_PA_CS3 + V2M_PERIPH_OFFSET(15))
56
57 #define V2M_TIMER01                     (V2M_PA_CS3 + V2M_PERIPH_OFFSET(17))
58 #define V2M_TIMER23                     (V2M_PA_CS3 + V2M_PERIPH_OFFSET(18))
59
60 #define V2M_SERIAL_BUS_DVI              (V2M_PA_CS3 + V2M_PERIPH_OFFSET(22))
61 #define V2M_RTC                         (V2M_PA_CS3 + V2M_PERIPH_OFFSET(23))
62
63 #define V2M_CF                          (V2M_PA_CS3 + V2M_PERIPH_OFFSET(26))
64
65 #define V2M_CLCD                        (V2M_PA_CS3 + V2M_PERIPH_OFFSET(31))
66
67 /* System register offsets. */
68 #define V2M_SYS_CFGDATA                 (V2M_SYSREGS + 0x0a0)
69 #define V2M_SYS_CFGCTRL                 (V2M_SYSREGS + 0x0a4)
70 #define V2M_SYS_CFGSTAT                 (V2M_SYSREGS + 0x0a8)
71
72 /* Generic Interrupt Controller Definitions */
73 #ifdef CONFIG_GICV3
74 #define GICD_BASE                       (V2M_PA_BASE + 0x2f000000)
75 #define GICR_BASE                       (V2M_PA_BASE + 0x2f100000)
76 #else
77
78 #ifdef CONFIG_TARGET_VEXPRESS64_JUNO
79 #define GICD_BASE                       (0x2C010000)
80 #define GICC_BASE                       (0x2C02f000)
81 #else
82 #define GICD_BASE                       (V2M_PA_BASE + 0x2f000000)
83 #define GICC_BASE                       (V2M_PA_BASE + 0x2c000000)
84 #endif
85 #endif /* !CONFIG_GICV3 */
86
87 #if defined(CONFIG_TARGET_VEXPRESS64_BASE_FVP) && !defined(CONFIG_DM_ETH)
88 /* The Vexpress64 BASE_FVP simulator uses SMSC91C111 */
89 #define CONFIG_SMC91111                 1
90 #define CONFIG_SMC91111_BASE            (V2M_PA_BASE + 0x01A000000)
91 #endif
92
93 /* PL011 Serial Configuration */
94 #ifdef CONFIG_TARGET_VEXPRESS64_JUNO
95 #define CONFIG_PL011_CLOCK              7372800
96 #else
97 #define CONFIG_PL011_CLOCK              24000000
98 #endif
99
100 /* Physical Memory Map */
101 #define PHYS_SDRAM_1                    (V2M_DRAM_BASE) /* SDRAM Bank #1 */
102 /* Top 16MB reserved for secure world use */
103 #define DRAM_SEC_SIZE           0x01000000
104 #define PHYS_SDRAM_1_SIZE       0x80000000 - DRAM_SEC_SIZE
105 #define CONFIG_SYS_SDRAM_BASE   PHYS_SDRAM_1
106
107 #ifdef CONFIG_TARGET_VEXPRESS64_JUNO
108 #define PHYS_SDRAM_2                    (0x880000000)
109 #define PHYS_SDRAM_2_SIZE               0x180000000
110 #elif CONFIG_NR_DRAM_BANKS == 2
111 #define PHYS_SDRAM_2                    (0x880000000)
112 #define PHYS_SDRAM_2_SIZE               0x80000000
113 #endif
114
115 /* Copy the kernel, initrd and FDT from NOR flash to DRAM memory and boot. */
116 #define BOOTENV_DEV_AFS(devtypeu, devtypel, instance) \
117         "bootcmd_afs="                                                  \
118                 "afs load ${kernel_name} ${kernel_addr_r} ;"\
119                 "if test $? -eq 1; then "\
120                 "  echo Loading ${kernel_alt_name} instead of ${kernel_name}; "\
121                 "  afs load ${kernel_alt_name} ${kernel_addr_r};"\
122                 "fi ; "\
123                 "afs load ${fdtfile} ${fdt_addr_r} ;"\
124                 "if test $? -eq 1; then "\
125                 "  echo Loading ${fdt_alt_name} instead of ${fdtfile}; "\
126                 "  afs load ${fdt_alt_name} ${fdt_addr_r}; "\
127                 "fi ; "\
128                 "fdt addr ${fdt_addr_r}; fdt resize; " \
129                 "if afs load  ${ramdisk_name} ${ramdisk_addr_r} ; "\
130                 "then "\
131                 "  setenv ramdisk_param ${ramdisk_addr_r}; "\
132                 "else "\
133                 "  setenv ramdisk_param -; "\
134                 "fi ; " \
135                 "booti ${kernel_addr_r} ${ramdisk_param} ${fdt_addr_r}\0"
136 #define BOOTENV_DEV_NAME_AFS(devtypeu, devtypel, instance) "afs "
137
138 /* Boot by executing a U-Boot script pre-loaded into DRAM. */
139 #define BOOTENV_DEV_MEM(devtypeu, devtypel, instance) \
140         "bootcmd_mem= " \
141                 "source ${scriptaddr}; " \
142                 "if test $? -eq 1; then " \
143                 "  env import -t ${scriptaddr}; " \
144                 "  if test -n $uenvcmd; then " \
145                 "    echo Running uenvcmd ...; " \
146                 "    run uenvcmd; " \
147                 "  fi; " \
148                 "fi\0"
149 #define BOOTENV_DEV_NAME_MEM(devtypeu, devtypel, instance) "mem "
150
151 #ifdef CONFIG_CMD_VIRTIO
152 #define FUNC_VIRTIO(func)       func(VIRTIO, virtio, 0)
153 #else
154 #define FUNC_VIRTIO(func)
155 #endif
156
157 /*
158  * Boot by loading an Android image, or kernel, initrd and FDT through
159  * semihosting into DRAM.
160  */
161 #define BOOTENV_DEV_SMH(devtypeu, devtypel, instance) \
162         "bootcmd_smh= "                                                 \
163                 "if load hostfs - ${boot_addr_r} ${boot_name}; then"            \
164                 "  setenv bootargs;"                                    \
165                 "  abootimg addr ${boot_addr_r};"                       \
166                 "  abootimg get dtb --index=0 fdt_addr_r;"              \
167                 "  bootm ${boot_addr_r} ${boot_addr_r} ${fdt_addr_r};"  \
168                 "else"                                                  \
169                 "  if load hostfs - ${kernel_addr_r} ${kernel_name}; then"      \
170                 "    setenv fdt_high 0xffffffffffffffff;"               \
171                 "    setenv initrd_high 0xffffffffffffffff;"            \
172                 "    load hostfs - ${fdt_addr_r} ${fdtfile};"                   \
173                 "    load hostfs - ${ramdisk_addr_r} ${ramdisk_name};" \
174                 "    fdt addr ${fdt_addr_r};"                           \
175                 "    fdt resize;"                                       \
176                 "    fdt chosen ${ramdisk_addr_r} ${filesize};" \
177                 "    booti $kernel_addr_r - $fdt_addr_r;"               \
178                 "  fi;"                                                 \
179                 "fi\0"
180 #define BOOTENV_DEV_NAME_SMH(devtypeu, devtypel, instance) "smh "
181
182 /* Boot sources for distro boot and load addresses, per board */
183
184 #ifdef CONFIG_TARGET_VEXPRESS64_JUNO                    /* Arm Juno board */
185
186 #define BOOT_TARGET_DEVICES(func)       \
187         func(USB, usb, 0)               \
188         func(SATA, sata, 0)             \
189         func(SATA, sata, 1)             \
190         func(PXE, pxe, na)              \
191         func(DHCP, dhcp, na)            \
192         func(AFS, afs, na)
193
194 #define VEXPRESS_KERNEL_ADDR            0x80080000
195 #define VEXPRESS_PXEFILE_ADDR           0x8fb00000
196 #define VEXPRESS_FDT_ADDR               0x8fc00000
197 #define VEXPRESS_SCRIPT_ADDR            0x8fd00000
198 #define VEXPRESS_RAMDISK_ADDR           0x8fe00000
199
200 #define EXTRA_ENV_NAMES                                                 \
201                 "kernel_name=norkern\0"                                 \
202                 "kernel_alt_name=Image\0"                               \
203                 "ramdisk_name=ramdisk.img\0"                            \
204                 "fdtfile=board.dtb\0"                                   \
205                 "fdt_alt_name=juno\0"
206
207 #elif CONFIG_TARGET_VEXPRESS64_BASE_FVP                 /* ARMv8-A base model */
208
209 #define BOOT_TARGET_DEVICES(func)       \
210         func(SMH, smh, na)              \
211         func(MEM, mem, na)              \
212         FUNC_VIRTIO(func)               \
213         func(PXE, pxe, na)              \
214         func(DHCP, dhcp, na)
215
216 #define VEXPRESS_KERNEL_ADDR            0x80080000
217 #define VEXPRESS_PXEFILE_ADDR           0x8fa00000
218 #define VEXPRESS_SCRIPT_ADDR            0x8fb00000
219 #define VEXPRESS_FDT_ADDR               0x8fc00000
220 #define VEXPRESS_BOOT_ADDR              0x8fd00000
221 #define VEXPRESS_RAMDISK_ADDR           0x8fe00000
222
223 #define EXTRA_ENV_NAMES                                                 \
224                 "kernel_name=Image\0"                                   \
225                 "ramdisk_name=ramdisk.img\0"                            \
226                 "fdtfile=devtree.dtb\0"                                 \
227                 "boot_name=boot.img\0"                                  \
228                 "boot_addr_r=" __stringify(VEXPRESS_BOOT_ADDR) "\0"
229
230 #elif CONFIG_TARGET_VEXPRESS64_BASER_FVP                /* ARMv8-R base model */
231
232 #define BOOT_TARGET_DEVICES(func)       \
233         func(MEM, mem, na)              \
234         FUNC_VIRTIO(func)               \
235         func(PXE, pxe, na)              \
236         func(DHCP, dhcp, na)
237
238 #define VEXPRESS_KERNEL_ADDR            0x00200000
239 #define VEXPRESS_PXEFILE_ADDR           0x0fb00000
240 #define VEXPRESS_FDT_ADDR               0x0fc00000
241 #define VEXPRESS_SCRIPT_ADDR            0x0fd00000
242 #define VEXPRESS_RAMDISK_ADDR           0x0fe00000
243
244 #define EXTRA_ENV_NAMES                                                 \
245                                         "kernel_name=Image\0"           \
246                                         "ramdisk_name=ramdisk.img\0"    \
247                                         "fdtfile=board.dtb\0"
248 #endif
249
250 #include <config_distro_bootcmd.h>
251
252 /* Default load addresses and names for the different payloads. */
253 #define CONFIG_EXTRA_ENV_SETTINGS       \
254                 "kernel_addr_r=" __stringify(VEXPRESS_KERNEL_ADDR) "\0"        \
255                 "ramdisk_addr_r=" __stringify(VEXPRESS_RAMDISK_ADDR) "\0"      \
256                 "pxefile_addr_r=" __stringify(VEXPRESS_PXEFILE_ADDR) "\0"      \
257                 "fdt_addr_r=" __stringify(VEXPRESS_FDT_ADDR) "\0"              \
258                 "scriptaddr=" __stringify(VEXPRESS_SCRIPT_ADDR) "\0"           \
259                 EXTRA_ENV_NAMES                                                \
260                 BOOTENV
261
262 #ifdef CONFIG_TARGET_VEXPRESS64_JUNO
263 #define CONFIG_SYS_FLASH_BASE           0x08000000
264 /* 255 x 256KiB sectors + 4 x 64KiB sectors at the end = 259 */
265 #define CONFIG_SYS_MAX_FLASH_SECT       259
266 /* Store environment at top of flash in the same location as blank.img */
267 /* in the Juno firmware. */
268 #else
269 #define CONFIG_SYS_FLASH_BASE           (V2M_PA_BASE + 0x0C000000)
270 /* 256 x 256KiB sectors */
271 #define CONFIG_SYS_MAX_FLASH_SECT       256
272 /* Store environment at top of flash */
273 #endif
274
275 #define FLASH_MAX_SECTOR_SIZE           0x00040000
276
277 #endif /* __VEXPRESS_AEMV8_H */