xref: /optee_os/core/arch/arm/plat-rcar/main.c (revision 55ab8f06a831946a49717446cd2e4495a2b5d659)
11bb92983SJerome Forissier // SPDX-License-Identifier: BSD-2-Clause
2a4f26dfbSVolodymyr Babchuk /*
3a4f26dfbSVolodymyr Babchuk  * Copyright (c) 2016, GlobalLogic
4a4f26dfbSVolodymyr Babchuk  * All rights reserved.
5a4f26dfbSVolodymyr Babchuk  *
6a4f26dfbSVolodymyr Babchuk  * Redistribution and use in source and binary forms, with or without
7a4f26dfbSVolodymyr Babchuk  * modification, are permitted provided that the following conditions are met:
8a4f26dfbSVolodymyr Babchuk  *
9a4f26dfbSVolodymyr Babchuk  * 1. Redistributions of source code must retain the above copyright notice,
10a4f26dfbSVolodymyr Babchuk  * this list of conditions and the following disclaimer.
11a4f26dfbSVolodymyr Babchuk  *
12a4f26dfbSVolodymyr Babchuk  * 2. Redistributions in binary form must reproduce the above copyright notice,
13a4f26dfbSVolodymyr Babchuk  * this list of conditions and the following disclaimer in the documentation
14a4f26dfbSVolodymyr Babchuk  * and/or other materials provided with the distribution.
15a4f26dfbSVolodymyr Babchuk  *
16a4f26dfbSVolodymyr Babchuk  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17a4f26dfbSVolodymyr Babchuk  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18a4f26dfbSVolodymyr Babchuk  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19a4f26dfbSVolodymyr Babchuk  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20a4f26dfbSVolodymyr Babchuk  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21a4f26dfbSVolodymyr Babchuk  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22a4f26dfbSVolodymyr Babchuk  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23a4f26dfbSVolodymyr Babchuk  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24a4f26dfbSVolodymyr Babchuk  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25a4f26dfbSVolodymyr Babchuk  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26a4f26dfbSVolodymyr Babchuk  * POSSIBILITY OF SUCH DAMAGE.
27a4f26dfbSVolodymyr Babchuk  */
28a4f26dfbSVolodymyr Babchuk 
29a4f26dfbSVolodymyr Babchuk #include <console.h>
30e8a31001SAndrew Davis #include <crypto/crypto.h>
312e0f28d0SVolodymyr Babchuk #include <kernel/boot.h>
32a4f26dfbSVolodymyr Babchuk #include <kernel/panic.h>
33a4f26dfbSVolodymyr Babchuk #include <mm/core_memprot.h>
34a4f26dfbSVolodymyr Babchuk #include <platform_config.h>
35a4f26dfbSVolodymyr Babchuk #include <stdint.h>
36a4f26dfbSVolodymyr Babchuk #include <drivers/scif.h>
37a4f26dfbSVolodymyr Babchuk #include <drivers/gic.h>
38a4f26dfbSVolodymyr Babchuk 
39a5e82dc7SJerome Forissier register_phys_mem_pgdir(MEM_AREA_IO_SEC, CONSOLE_UART_BASE, SCIF_REG_SIZE);
40a5e82dc7SJerome Forissier register_phys_mem_pgdir(MEM_AREA_IO_SEC, GICD_BASE, GIC_DIST_REG_SIZE);
41ab875342SVolodymyr Babchuk register_phys_mem_pgdir(MEM_AREA_IO_SEC, GICC_BASE, GIC_CPU_REG_SIZE);
42ab875342SVolodymyr Babchuk #ifdef PRR_BASE
43ab875342SVolodymyr Babchuk register_phys_mem_pgdir(MEM_AREA_IO_SEC, PRR_BASE, SMALL_PAGE_SIZE);
44ab875342SVolodymyr Babchuk #endif
45a4f26dfbSVolodymyr Babchuk 
4622d7b316SMarek Vasut /* Legacy platforms */
4722d7b316SMarek Vasut #if defined(PLATFORM_FLAVOR_salvator_h3) || \
4822d7b316SMarek Vasut 	defined(PLATFORM_FLAVOR_salvator_h3_4x2g) || \
49ad11fdb3SVolodymyr Babchuk 	defined(PLATFORM_FLAVOR_salvator_m3) || \
50ab875342SVolodymyr Babchuk 	defined(PLATFORM_FLAVOR_salvator_m3_2x4g) || \
51ab875342SVolodymyr Babchuk 	defined(PLATFORM_FLAVOR_spider_s4)
52e687029dSVolodymyr Babchuk register_ddr(NSEC_DDR_0_BASE, NSEC_DDR_0_SIZE);
53e687029dSVolodymyr Babchuk register_ddr(NSEC_DDR_1_BASE, NSEC_DDR_1_SIZE);
54c5d84b72SVolodymyr Babchuk #ifdef NSEC_DDR_2_BASE
55e687029dSVolodymyr Babchuk register_ddr(NSEC_DDR_2_BASE, NSEC_DDR_2_SIZE);
56c5d84b72SVolodymyr Babchuk #endif
57c5d84b72SVolodymyr Babchuk #ifdef NSEC_DDR_3_BASE
58e687029dSVolodymyr Babchuk register_ddr(NSEC_DDR_3_BASE, NSEC_DDR_3_SIZE);
59c5d84b72SVolodymyr Babchuk #endif
6022d7b316SMarek Vasut #endif
61c5d84b72SVolodymyr Babchuk 
626a5de41dSVolodymyr Babchuk static struct scif_uart_data console_data __nex_bss;
63ab875342SVolodymyr Babchuk 
64ab875342SVolodymyr Babchuk #ifdef PRR_BASE
65102788ecSVolodymyr Babchuk uint32_t rcar_prr_value __nex_bss;
66ab875342SVolodymyr Babchuk #endif
670abbda6eSJerome Forissier 
plat_console_init(void)68*55ab8f06SAlvin Chang void plat_console_init(void)
69a4f26dfbSVolodymyr Babchuk {
700abbda6eSJerome Forissier 	scif_uart_init(&console_data, CONSOLE_UART_BASE);
71756aea59SJerome Forissier 	register_serial_console(&console_data.chip);
72a4f26dfbSVolodymyr Babchuk }
732e0f28d0SVolodymyr Babchuk 
74ab875342SVolodymyr Babchuk #ifdef CFG_RCAR_ROMAPI
75e8a31001SAndrew Davis /* Should only seed from a hardware random number generator */
76e8a31001SAndrew Davis static_assert(!IS_ENABLED(CFG_WITH_SOFTWARE_PRNG));
77e8a31001SAndrew Davis 
plat_get_aslr_seed(void)782e0f28d0SVolodymyr Babchuk unsigned long plat_get_aslr_seed(void)
792e0f28d0SVolodymyr Babchuk {
802e0f28d0SVolodymyr Babchuk 	unsigned long seed = 0;
812e0f28d0SVolodymyr Babchuk 
82e8a31001SAndrew Davis 	/* On RCAR we can get hw random bytes on early boot stages */
83e8a31001SAndrew Davis 	if (crypto_rng_read(&seed, sizeof(seed)))
84e8a31001SAndrew Davis 		panic();
852e0f28d0SVolodymyr Babchuk 
862e0f28d0SVolodymyr Babchuk 	return seed;
872e0f28d0SVolodymyr Babchuk }
88ab875342SVolodymyr Babchuk #endif
8968c56642SVolodymyr Babchuk 
boot_primary_init_intc(void)90df913c6dSAlvin Chang void boot_primary_init_intc(void)
9168c56642SVolodymyr Babchuk {
9267e55c51SEtienne Carriere 	gic_init(GICC_BASE, GICD_BASE);
9368c56642SVolodymyr Babchuk }
9468c56642SVolodymyr Babchuk 
boot_secondary_init_intc(void)958aae4669SAlvin Chang void boot_secondary_init_intc(void)
9668c56642SVolodymyr Babchuk {
97c152ba8bSJens Wiklander 	gic_init_per_cpu();
9868c56642SVolodymyr Babchuk }
99