xref: /rk3399_ARM-atf/plat/renesas/rcar_gen4/include/rcar_private.h (revision 833e3c40943baf7322b3783c07d990b5b2d54a5a)
1*b45b5bacSMarek Vasut /*
2*b45b5bacSMarek Vasut  * Copyright (c) 2015-2025, Renesas Electronics Corporation. All rights reserved.
3*b45b5bacSMarek Vasut  *
4*b45b5bacSMarek Vasut  * SPDX-License-Identifier: BSD-3-Clause
5*b45b5bacSMarek Vasut  */
6*b45b5bacSMarek Vasut 
7*b45b5bacSMarek Vasut #ifndef RCAR_PRIVATE_H
8*b45b5bacSMarek Vasut #define RCAR_PRIVATE_H
9*b45b5bacSMarek Vasut 
10*b45b5bacSMarek Vasut #include <common/bl_common.h>
11*b45b5bacSMarek Vasut #include <lib/bakery_lock.h>
12*b45b5bacSMarek Vasut #include <lib/el3_runtime/cpu_data.h>
13*b45b5bacSMarek Vasut #include <lib/mmio.h>
14*b45b5bacSMarek Vasut 
15*b45b5bacSMarek Vasut #include <platform_def.h>
16*b45b5bacSMarek Vasut 
17*b45b5bacSMarek Vasut /*
18*b45b5bacSMarek Vasut  * This structure represents the superset of information that is passed to
19*b45b5bacSMarek Vasut  * BL31 e.g. while passing control to it from BL2 which is bl31_params
20*b45b5bacSMarek Vasut  * and bl31_plat_params and its elements
21*b45b5bacSMarek Vasut  */
22*b45b5bacSMarek Vasut typedef struct bl2_to_bl31_params_mem {
23*b45b5bacSMarek Vasut 	image_info_t bl32_image_info;
24*b45b5bacSMarek Vasut 	image_info_t bl33_image_info;
25*b45b5bacSMarek Vasut 	entry_point_info_t bl33_ep_info;
26*b45b5bacSMarek Vasut 	entry_point_info_t bl32_ep_info;
27*b45b5bacSMarek Vasut } bl2_to_bl31_params_mem_t;
28*b45b5bacSMarek Vasut 
29*b45b5bacSMarek Vasut #define RCAR_INSTANTIATE_LOCK	DEFINE_BAKERY_LOCK(rcar_lock)
30*b45b5bacSMarek Vasut /*
31*b45b5bacSMarek Vasut  * Constants to specify how many bakery locks this platform implements. These
32*b45b5bacSMarek Vasut  * are used if the platform chooses not to use coherent memory for bakery lock
33*b45b5bacSMarek Vasut  * data structures.
34*b45b5bacSMarek Vasut  */
35*b45b5bacSMarek Vasut #define RCAR_MAX_BAKERIES	2
36*b45b5bacSMarek Vasut 
37*b45b5bacSMarek Vasut /*
38*b45b5bacSMarek Vasut  * Definition of structure which holds platform specific per-cpu data. Currently
39*b45b5bacSMarek Vasut  * it holds only the bakery lock information for each cpu. Constants to
40*b45b5bacSMarek Vasut  * specify how many bakeries this platform implements and bakery ids are
41*b45b5bacSMarek Vasut  * specified in rcar_def.h
42*b45b5bacSMarek Vasut  */
43*b45b5bacSMarek Vasut typedef struct rcar_cpu_data {
44*b45b5bacSMarek Vasut 	bakery_info_t pcpu_bakery_info[RCAR_MAX_BAKERIES];
45*b45b5bacSMarek Vasut } rcar_cpu_data_t;
46*b45b5bacSMarek Vasut 
47*b45b5bacSMarek Vasut /*
48*b45b5bacSMarek Vasut  * Helper macros for bakery lock api when using the above rcar_cpu_data_t for
49*b45b5bacSMarek Vasut  * bakery lock data structures. It assumes that the bakery_info is at the
50*b45b5bacSMarek Vasut  * beginning of the platform specific per-cpu data.
51*b45b5bacSMarek Vasut  */
52*b45b5bacSMarek Vasut #define rcar_lock_init()	bakery_lock_init(&rcar_lock)
53*b45b5bacSMarek Vasut #define rcar_lock_get()		bakery_lock_get(&rcar_lock)
54*b45b5bacSMarek Vasut #define rcar_lock_release()	bakery_lock_release(&rcar_lock)
55*b45b5bacSMarek Vasut 
56*b45b5bacSMarek Vasut /*
57*b45b5bacSMarek Vasut  * Function and variable prototypes
58*b45b5bacSMarek Vasut  */
59*b45b5bacSMarek Vasut void rcar_configure_mmu_el3(uintptr_t total_base,
60*b45b5bacSMarek Vasut 			    size_t total_size,
61*b45b5bacSMarek Vasut 			    uintptr_t ro_start,
62*b45b5bacSMarek Vasut 			    uintptr_t ro_limit
63*b45b5bacSMarek Vasut 			    );
64*b45b5bacSMarek Vasut 
65*b45b5bacSMarek Vasut 
66*b45b5bacSMarek Vasut void plat_invalidate_icache(void);
67*b45b5bacSMarek Vasut 
68*b45b5bacSMarek Vasut void rcar_console_boot_init(void);
69*b45b5bacSMarek Vasut void rcar_console_runtime_init(void);
70*b45b5bacSMarek Vasut 
71*b45b5bacSMarek Vasut int32_t rcar_cluster_pos_by_mpidr(u_register_t mpidr);
72*b45b5bacSMarek Vasut 
73*b45b5bacSMarek Vasut #endif /* RCAR_PRIVATE_H */
74