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