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 <arch.h>
9*b45b5bacSMarek Vasut #include <arch_helpers.h>
10*b45b5bacSMarek Vasut #include <bl31/interrupt_mgmt.h>
11*b45b5bacSMarek Vasut #include <common/bl_common.h>
12*b45b5bacSMarek Vasut #include <common/debug.h>
13*b45b5bacSMarek Vasut #include <common/interrupt_props.h>
14*b45b5bacSMarek Vasut #include <drivers/arm/gicv3.h>
15*b45b5bacSMarek Vasut #include <lib/mmio.h>
16*b45b5bacSMarek Vasut #include <lib/xlat_tables/xlat_tables_v2.h>
17*b45b5bacSMarek Vasut #include <plat/common/platform.h>
18*b45b5bacSMarek Vasut #include <plat_helpers.h>
19*b45b5bacSMarek Vasut #include <platform_def.h>
20*b45b5bacSMarek Vasut
21*b45b5bacSMarek Vasut #include "rcar_def.h"
22*b45b5bacSMarek Vasut #include "rcar_private.h"
23*b45b5bacSMarek Vasut #include "rcar_version.h"
24*b45b5bacSMarek Vasut
25*b45b5bacSMarek Vasut const uint8_t version_of_renesas[VERSION_OF_RENESAS_MAXLEN]
26*b45b5bacSMarek Vasut __section("ro") = VERSION_OF_RENESAS;
27*b45b5bacSMarek Vasut
28*b45b5bacSMarek Vasut #define RCAR_DCACHE MT_MEMORY
29*b45b5bacSMarek Vasut
30*b45b5bacSMarek Vasut #define MAP_SHARED_RAM MAP_REGION_FLAT(RCAR_SHARED_MEM_BASE, \
31*b45b5bacSMarek Vasut RCAR_SHARED_MEM_SIZE, \
32*b45b5bacSMarek Vasut MT_MEMORY | MT_RW | MT_SECURE)
33*b45b5bacSMarek Vasut
34*b45b5bacSMarek Vasut #define MAP_DEVICE_RCAR MAP_REGION_FLAT(DEVICE_RCAR_BASE, \
35*b45b5bacSMarek Vasut DEVICE_RCAR_SIZE, \
36*b45b5bacSMarek Vasut MT_DEVICE | MT_RW | MT_SECURE)
37*b45b5bacSMarek Vasut
38*b45b5bacSMarek Vasut #define MAP_DEVICE_RCAR2 MAP_REGION_FLAT(DEVICE_RCAR_BASE2, \
39*b45b5bacSMarek Vasut DEVICE_RCAR_SIZE2, \
40*b45b5bacSMarek Vasut MT_DEVICE | MT_RW | MT_SECURE)
41*b45b5bacSMarek Vasut
42*b45b5bacSMarek Vasut #define MAP_ATFW_CRASH MAP_REGION_FLAT(RCAR_BL31_CRASH_BASE, \
43*b45b5bacSMarek Vasut RCAR_BL31_CRASH_SIZE, \
44*b45b5bacSMarek Vasut MT_MEMORY | MT_RW | MT_SECURE)
45*b45b5bacSMarek Vasut
46*b45b5bacSMarek Vasut #define MAP_SRAM MAP_REGION_FLAT(DEVICE_SRAM_BASE, \
47*b45b5bacSMarek Vasut DEVICE_SRAM_SIZE, \
48*b45b5bacSMarek Vasut MT_MEMORY | MT_RO | MT_SECURE)
49*b45b5bacSMarek Vasut
50*b45b5bacSMarek Vasut #define MAP_SRAM_DATA_STACK MAP_REGION_FLAT(DEVICE_SRAM_DATA_BASE, \
51*b45b5bacSMarek Vasut (DEVICE_SRAM_DATA_SIZE + \
52*b45b5bacSMarek Vasut DEVICE_SRAM_STACK_SIZE), \
53*b45b5bacSMarek Vasut MT_MEMORY | MT_RW | MT_SECURE)
54*b45b5bacSMarek Vasut
55*b45b5bacSMarek Vasut static const mmap_region_t rcar_mmap[] = {
56*b45b5bacSMarek Vasut MAP_SHARED_RAM, /* 0x46422000 - 0x46422FFF Shared ram area */
57*b45b5bacSMarek Vasut MAP_ATFW_CRASH, /* 0x4643F000 - 0x4643FFFF Stack for Crash Log */
58*b45b5bacSMarek Vasut MAP_DEVICE_RCAR, /* 0xE6000000 - 0xE62FFFFF SoC registers area */
59*b45b5bacSMarek Vasut MAP_SRAM, /* 0xE6342000 - 0xE6343FFF System RAM code area */
60*b45b5bacSMarek Vasut MAP_SRAM_DATA_STACK, /* 0xE6344000 - 0xE6344FFF System RAM data & stack area */
61*b45b5bacSMarek Vasut MAP_DEVICE_RCAR2, /* 0xE6370000 - 0xFFFFFFFF SoC registers area 2 */
62*b45b5bacSMarek Vasut { 0 }
63*b45b5bacSMarek Vasut };
64*b45b5bacSMarek Vasut
65*b45b5bacSMarek Vasut CASSERT((ARRAY_SIZE(rcar_mmap) + RCAR_BL_REGIONS) <= MAX_MMAP_REGIONS,
66*b45b5bacSMarek Vasut assert_max_mmap_regions);
67*b45b5bacSMarek Vasut
68*b45b5bacSMarek Vasut /*
69*b45b5bacSMarek Vasut * Macro generating the code for the function setting up the pagetables as per
70*b45b5bacSMarek Vasut * the platform memory map & initialize the mmu, for the given exception level
71*b45b5bacSMarek Vasut */
rcar_configure_mmu_el3(uintptr_t total_base,size_t total_size,uintptr_t ro_start,uintptr_t ro_limit)72*b45b5bacSMarek Vasut void rcar_configure_mmu_el3(uintptr_t total_base,
73*b45b5bacSMarek Vasut size_t total_size,
74*b45b5bacSMarek Vasut uintptr_t ro_start,
75*b45b5bacSMarek Vasut uintptr_t ro_limit)
76*b45b5bacSMarek Vasut {
77*b45b5bacSMarek Vasut mmap_add_region(total_base, total_base, total_size,
78*b45b5bacSMarek Vasut RCAR_DCACHE | MT_RW | MT_SECURE);
79*b45b5bacSMarek Vasut mmap_add_region(ro_start, ro_start, ro_limit - ro_start,
80*b45b5bacSMarek Vasut RCAR_DCACHE | MT_RO | MT_SECURE);
81*b45b5bacSMarek Vasut mmap_add(rcar_mmap);
82*b45b5bacSMarek Vasut
83*b45b5bacSMarek Vasut init_xlat_tables();
84*b45b5bacSMarek Vasut enable_mmu_el3(0);
85*b45b5bacSMarek Vasut }
86*b45b5bacSMarek Vasut
plat_get_syscnt_freq2(void)87*b45b5bacSMarek Vasut unsigned int plat_get_syscnt_freq2(void)
88*b45b5bacSMarek Vasut {
89*b45b5bacSMarek Vasut unsigned int freq;
90*b45b5bacSMarek Vasut
91*b45b5bacSMarek Vasut freq = mmio_read_32(ARM_SYS_CNTCTL_BASE + CNTFID_OFF);
92*b45b5bacSMarek Vasut if (freq == 0)
93*b45b5bacSMarek Vasut panic();
94*b45b5bacSMarek Vasut
95*b45b5bacSMarek Vasut return freq;
96*b45b5bacSMarek Vasut }
97*b45b5bacSMarek Vasut
plat_arm_calc_core_pos(u_register_t mpidr)98*b45b5bacSMarek Vasut unsigned int plat_arm_calc_core_pos(u_register_t mpidr)
99*b45b5bacSMarek Vasut {
100*b45b5bacSMarek Vasut return plat_renesas_calc_core_pos(mpidr);
101*b45b5bacSMarek Vasut }
102