1b45b5bacSMarek Vasut /*
2b45b5bacSMarek Vasut * Copyright (c) 2013-2025, ARM Limited and Contributors. All rights reserved.
3b45b5bacSMarek Vasut * Copyright (c) 2015-2025, Renesas Electronics Corporation. All rights reserved.
4b45b5bacSMarek Vasut *
5b45b5bacSMarek Vasut * SPDX-License-Identifier: BSD-3-Clause
6b45b5bacSMarek Vasut */
7b45b5bacSMarek Vasut
8b45b5bacSMarek Vasut #include <stddef.h>
9b45b5bacSMarek Vasut
10b45b5bacSMarek Vasut #include <arch.h>
11b45b5bacSMarek Vasut #include <arch_helpers.h>
12b45b5bacSMarek Vasut #include <bl31/bl31.h>
13b45b5bacSMarek Vasut #include <common/bl_common.h>
14b45b5bacSMarek Vasut #include <common/debug.h>
15b45b5bacSMarek Vasut #include <drivers/arm/cci.h>
16b45b5bacSMarek Vasut #include <drivers/console.h>
17b45b5bacSMarek Vasut #include <lib/mmio.h>
18b45b5bacSMarek Vasut #include "mssr.h"
19b45b5bacSMarek Vasut #include <plat/arm/common/plat_arm.h>
20b45b5bacSMarek Vasut #include <plat/common/platform.h>
21b45b5bacSMarek Vasut #include "ptp.h"
22b45b5bacSMarek Vasut #include "pwrc.h"
23*92196d4fSMarek Vasut #include "timer.h"
24b45b5bacSMarek Vasut
25b45b5bacSMarek Vasut #include "rcar_def.h"
26b45b5bacSMarek Vasut #include "rcar_private.h"
27b45b5bacSMarek Vasut #include "rcar_version.h"
28b45b5bacSMarek Vasut
bl31_plat_get_next_image_ep_info(uint32_t type)29b45b5bacSMarek Vasut struct entry_point_info *bl31_plat_get_next_image_ep_info(uint32_t type)
30b45b5bacSMarek Vasut {
31b45b5bacSMarek Vasut bl2_to_bl31_params_mem_t *from_bl2 =
32b45b5bacSMarek Vasut (bl2_to_bl31_params_mem_t *)PARAMS_BASE;
33b45b5bacSMarek Vasut entry_point_info_t *next_image_info = (type == NON_SECURE) ?
34b45b5bacSMarek Vasut &from_bl2->bl33_ep_info :
35b45b5bacSMarek Vasut &from_bl2->bl32_ep_info;
36b45b5bacSMarek Vasut
37b45b5bacSMarek Vasut return next_image_info->pc ? next_image_info : NULL;
38b45b5bacSMarek Vasut }
39b45b5bacSMarek Vasut
bl31_early_platform_setup2(u_register_t arg0,u_register_t arg1,u_register_t arg2,u_register_t arg3)40b45b5bacSMarek Vasut void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1,
41b45b5bacSMarek Vasut u_register_t arg2, u_register_t arg3)
42b45b5bacSMarek Vasut {
43b45b5bacSMarek Vasut rcar_console_boot_init();
44b45b5bacSMarek Vasut
45b45b5bacSMarek Vasut NOTICE("BL3-1 : Rev.%s\n", version_of_renesas);
46b45b5bacSMarek Vasut }
47b45b5bacSMarek Vasut
bl31_plat_arch_setup(void)48b45b5bacSMarek Vasut void bl31_plat_arch_setup(void)
49b45b5bacSMarek Vasut {
50b45b5bacSMarek Vasut static const uintptr_t BL31_RO_BASE = BL_CODE_BASE;
51b45b5bacSMarek Vasut static const uintptr_t BL31_RO_LIMIT = BL_CODE_END;
52b45b5bacSMarek Vasut
53b45b5bacSMarek Vasut rcar_configure_mmu_el3(BL31_BASE,
54b45b5bacSMarek Vasut BL31_LIMIT - BL31_BASE,
55b45b5bacSMarek Vasut BL31_RO_BASE, BL31_RO_LIMIT);
56b45b5bacSMarek Vasut
57b45b5bacSMarek Vasut rcar_pwrc_code_copy_to_system_ram();
58b45b5bacSMarek Vasut }
59b45b5bacSMarek Vasut
60b45b5bacSMarek Vasut static const uintptr_t gicr_base_addrs[2] = {
61b45b5bacSMarek Vasut PLAT_ARM_GICR_BASE, /* GICR Base address of the primary CPU */
62b45b5bacSMarek Vasut 0U /* Zero Termination */
63b45b5bacSMarek Vasut };
64b45b5bacSMarek Vasut
bl31_platform_setup(void)65b45b5bacSMarek Vasut void bl31_platform_setup(void)
66b45b5bacSMarek Vasut {
67b45b5bacSMarek Vasut /* Initialize generic timer */
68b45b5bacSMarek Vasut u_register_t reg_cntfid = RCAR_CNTC_EXTAL;
69b45b5bacSMarek Vasut
70b45b5bacSMarek Vasut rcar_mssr_setup();
71b45b5bacSMarek Vasut
72b45b5bacSMarek Vasut /* Update memory mapped and register based frequency */
73b45b5bacSMarek Vasut write_cntfrq_el0(reg_cntfid);
74b45b5bacSMarek Vasut mmio_write_32(ARM_SYS_CNTCTL_BASE + CNTFID_OFF, reg_cntfid);
75b45b5bacSMarek Vasut
76b45b5bacSMarek Vasut /* Enable the system level generic timer */
77b45b5bacSMarek Vasut mmio_write_32(RCAR_CNTC_BASE + CNTCR_OFF, CNTCR_FCREQ(0) | CNTCR_EN);
78b45b5bacSMarek Vasut
79b45b5bacSMarek Vasut gic_set_gicr_frames(gicr_base_addrs);
80b45b5bacSMarek Vasut
81b45b5bacSMarek Vasut rcar_pwrc_setup();
82b45b5bacSMarek Vasut rcar_ptp_setup();
83b45b5bacSMarek Vasut }
84b45b5bacSMarek Vasut
85b45b5bacSMarek Vasut const spd_pm_ops_t rcar_pm = {
86b45b5bacSMarek Vasut .svc_migrate_info = rcar_pwrc_cpu_migrate_info,
87b45b5bacSMarek Vasut };
88b45b5bacSMarek Vasut
bl31_plat_runtime_setup(void)89b45b5bacSMarek Vasut void bl31_plat_runtime_setup(void)
90b45b5bacSMarek Vasut {
91b45b5bacSMarek Vasut psci_register_spd_pm_hook(&rcar_pm);
92b45b5bacSMarek Vasut
93b45b5bacSMarek Vasut rcar_console_runtime_init();
94b45b5bacSMarek Vasut console_switch_state(CONSOLE_FLAG_RUNTIME);
95b45b5bacSMarek Vasut }
96