xref: /rk3399_ARM-atf/plat/renesas/rcar_gen4/aarch64/platform_common.c (revision a9e9e26cb654f2f5c3473770ae7390f2c4eacf73)
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