xref: /aosp_15_r20/external/arm-trusted-firmware/plat/xilinx/zynqmp/zynqmp_ipi.c (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /*
2*54fd6939SJiyong Park  * Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved.
3*54fd6939SJiyong Park  *
4*54fd6939SJiyong Park  * SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park  */
6*54fd6939SJiyong Park 
7*54fd6939SJiyong Park /*
8*54fd6939SJiyong Park  * Zynq UltraScale+ MPSoC IPI agent registers access management
9*54fd6939SJiyong Park  */
10*54fd6939SJiyong Park 
11*54fd6939SJiyong Park #include <errno.h>
12*54fd6939SJiyong Park #include <string.h>
13*54fd6939SJiyong Park 
14*54fd6939SJiyong Park #include <common/debug.h>
15*54fd6939SJiyong Park #include <common/runtime_svc.h>
16*54fd6939SJiyong Park #include <lib/bakery_lock.h>
17*54fd6939SJiyong Park #include <lib/mmio.h>
18*54fd6939SJiyong Park 
19*54fd6939SJiyong Park #include <ipi.h>
20*54fd6939SJiyong Park #include <plat_ipi.h>
21*54fd6939SJiyong Park #include <plat_private.h>
22*54fd6939SJiyong Park 
23*54fd6939SJiyong Park /* Zynqmp ipi configuration table */
24*54fd6939SJiyong Park const static struct ipi_config zynqmp_ipi_table[] = {
25*54fd6939SJiyong Park 	/* APU IPI */
26*54fd6939SJiyong Park 	{
27*54fd6939SJiyong Park 		.ipi_bit_mask = 0x1,
28*54fd6939SJiyong Park 		.ipi_reg_base = 0xFF300000,
29*54fd6939SJiyong Park 		.secure_only = 0,
30*54fd6939SJiyong Park 	},
31*54fd6939SJiyong Park 	/* RPU0 IPI */
32*54fd6939SJiyong Park 	{
33*54fd6939SJiyong Park 		.ipi_bit_mask = 0x100,
34*54fd6939SJiyong Park 		.ipi_reg_base = 0xFF310000,
35*54fd6939SJiyong Park 		.secure_only = 0,
36*54fd6939SJiyong Park 	},
37*54fd6939SJiyong Park 	/* RPU1 IPI */
38*54fd6939SJiyong Park 	{
39*54fd6939SJiyong Park 		.ipi_bit_mask = 0x200,
40*54fd6939SJiyong Park 		.ipi_reg_base = 0xFF320000,
41*54fd6939SJiyong Park 		.secure_only = 0,
42*54fd6939SJiyong Park 	},
43*54fd6939SJiyong Park 	/* PMU0 IPI */
44*54fd6939SJiyong Park 	{
45*54fd6939SJiyong Park 		.ipi_bit_mask = 0x10000,
46*54fd6939SJiyong Park 		.ipi_reg_base = 0xFF330000,
47*54fd6939SJiyong Park 		.secure_only = IPI_SECURE_MASK,
48*54fd6939SJiyong Park 	},
49*54fd6939SJiyong Park 	/* PMU1 IPI */
50*54fd6939SJiyong Park 	{
51*54fd6939SJiyong Park 		.ipi_bit_mask = 0x20000,
52*54fd6939SJiyong Park 		.ipi_reg_base = 0xFF331000,
53*54fd6939SJiyong Park 		.secure_only = 0,
54*54fd6939SJiyong Park 	},
55*54fd6939SJiyong Park 	/* PMU2 IPI */
56*54fd6939SJiyong Park 	{
57*54fd6939SJiyong Park 		.ipi_bit_mask = 0x40000,
58*54fd6939SJiyong Park 		.ipi_reg_base = 0xFF332000,
59*54fd6939SJiyong Park 		.secure_only = IPI_SECURE_MASK,
60*54fd6939SJiyong Park 	},
61*54fd6939SJiyong Park 	/* PMU3 IPI */
62*54fd6939SJiyong Park 	{
63*54fd6939SJiyong Park 		.ipi_bit_mask = 0x80000,
64*54fd6939SJiyong Park 		.ipi_reg_base = 0xFF333000,
65*54fd6939SJiyong Park 		.secure_only = IPI_SECURE_MASK,
66*54fd6939SJiyong Park 	},
67*54fd6939SJiyong Park 	/* PL0 IPI */
68*54fd6939SJiyong Park 	{
69*54fd6939SJiyong Park 		.ipi_bit_mask = 0x1000000,
70*54fd6939SJiyong Park 		.ipi_reg_base = 0xFF340000,
71*54fd6939SJiyong Park 		.secure_only = 0,
72*54fd6939SJiyong Park 	},
73*54fd6939SJiyong Park 	/* PL1 IPI */
74*54fd6939SJiyong Park 	{
75*54fd6939SJiyong Park 		.ipi_bit_mask = 0x2000000,
76*54fd6939SJiyong Park 		.ipi_reg_base = 0xFF350000,
77*54fd6939SJiyong Park 		.secure_only = 0,
78*54fd6939SJiyong Park 	},
79*54fd6939SJiyong Park 	/* PL2 IPI */
80*54fd6939SJiyong Park 	{
81*54fd6939SJiyong Park 		.ipi_bit_mask = 0x4000000,
82*54fd6939SJiyong Park 		.ipi_reg_base = 0xFF360000,
83*54fd6939SJiyong Park 		.secure_only = 0,
84*54fd6939SJiyong Park 	},
85*54fd6939SJiyong Park 	/* PL3 IPI */
86*54fd6939SJiyong Park 	{
87*54fd6939SJiyong Park 		.ipi_bit_mask = 0x8000000,
88*54fd6939SJiyong Park 		.ipi_reg_base = 0xFF370000,
89*54fd6939SJiyong Park 		.secure_only = 0,
90*54fd6939SJiyong Park 	},
91*54fd6939SJiyong Park };
92*54fd6939SJiyong Park 
93*54fd6939SJiyong Park /**
94*54fd6939SJiyong Park  * zynqmp_ipi_config_table_init() - Initialize ZynqMP IPI configuration data
95*54fd6939SJiyong Park  *
96*54fd6939SJiyong Park  */
zynqmp_ipi_config_table_init(void)97*54fd6939SJiyong Park void zynqmp_ipi_config_table_init(void)
98*54fd6939SJiyong Park {
99*54fd6939SJiyong Park 	ipi_config_table_init(zynqmp_ipi_table, ARRAY_SIZE(zynqmp_ipi_table));
100*54fd6939SJiyong Park }
101