xref: /aosp_15_r20/external/arm-trusted-firmware/plat/xilinx/versal/versal_ipi.c (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /*
2*54fd6939SJiyong Park  * Copyright (c) 2019, Xilinx, Inc. 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  * Versal IPI agent registers access management
9*54fd6939SJiyong Park  */
10*54fd6939SJiyong Park 
11*54fd6939SJiyong Park #include <errno.h>
12*54fd6939SJiyong Park #include <ipi.h>
13*54fd6939SJiyong Park #include <plat_ipi.h>
14*54fd6939SJiyong Park #include <plat_private.h>
15*54fd6939SJiyong Park #include <string.h>
16*54fd6939SJiyong Park #include <common/debug.h>
17*54fd6939SJiyong Park #include <common/runtime_svc.h>
18*54fd6939SJiyong Park #include <lib/bakery_lock.h>
19*54fd6939SJiyong Park #include <lib/mmio.h>
20*54fd6939SJiyong Park 
21*54fd6939SJiyong Park /* versal ipi configuration table */
22*54fd6939SJiyong Park const static struct ipi_config versal_ipi_table[] = {
23*54fd6939SJiyong Park 	/* A72 IPI */
24*54fd6939SJiyong Park 	[IPI_ID_APU] = {
25*54fd6939SJiyong Park 		.ipi_bit_mask = IPI0_TRIG_BIT,
26*54fd6939SJiyong Park 		.ipi_reg_base = IPI0_REG_BASE,
27*54fd6939SJiyong Park 		.secure_only = 0,
28*54fd6939SJiyong Park 	},
29*54fd6939SJiyong Park 
30*54fd6939SJiyong Park 	/* PMC IPI */
31*54fd6939SJiyong Park 	[IPI_ID_PMC] = {
32*54fd6939SJiyong Park 		.ipi_bit_mask = PMC_IPI_TRIG_BIT,
33*54fd6939SJiyong Park 		.ipi_reg_base = IPI0_REG_BASE,
34*54fd6939SJiyong Park 		.secure_only = 0,
35*54fd6939SJiyong Park 	},
36*54fd6939SJiyong Park 
37*54fd6939SJiyong Park 	/* RPU0 IPI */
38*54fd6939SJiyong Park 	[IPI_ID_RPU0] = {
39*54fd6939SJiyong Park 		.ipi_bit_mask = IPI1_TRIG_BIT,
40*54fd6939SJiyong Park 		.ipi_reg_base = IPI1_REG_BASE,
41*54fd6939SJiyong Park 		.secure_only = 0,
42*54fd6939SJiyong Park 	},
43*54fd6939SJiyong Park 
44*54fd6939SJiyong Park 	/* RPU1 IPI */
45*54fd6939SJiyong Park 	[IPI_ID_RPU1] = {
46*54fd6939SJiyong Park 		.ipi_bit_mask = IPI2_TRIG_BIT,
47*54fd6939SJiyong Park 		.ipi_reg_base = IPI2_REG_BASE,
48*54fd6939SJiyong Park 		.secure_only = 0,
49*54fd6939SJiyong Park 	},
50*54fd6939SJiyong Park 
51*54fd6939SJiyong Park 	/* IPI3 IPI */
52*54fd6939SJiyong Park 	[IPI_ID_3] = {
53*54fd6939SJiyong Park 		.ipi_bit_mask = IPI3_TRIG_BIT,
54*54fd6939SJiyong Park 		.ipi_reg_base = IPI3_REG_BASE,
55*54fd6939SJiyong Park 		.secure_only = 0,
56*54fd6939SJiyong Park 	},
57*54fd6939SJiyong Park 
58*54fd6939SJiyong Park 	/* IPI4 IPI */
59*54fd6939SJiyong Park 	[IPI_ID_4] = {
60*54fd6939SJiyong Park 		.ipi_bit_mask = IPI4_TRIG_BIT,
61*54fd6939SJiyong Park 		.ipi_reg_base = IPI4_REG_BASE,
62*54fd6939SJiyong Park 		.secure_only = 0,
63*54fd6939SJiyong Park 	},
64*54fd6939SJiyong Park 
65*54fd6939SJiyong Park 	/* IPI5 IPI */
66*54fd6939SJiyong Park 	[IPI_ID_5] = {
67*54fd6939SJiyong Park 		.ipi_bit_mask = IPI5_TRIG_BIT,
68*54fd6939SJiyong Park 		.ipi_reg_base = IPI5_REG_BASE,
69*54fd6939SJiyong Park 		.secure_only = 0,
70*54fd6939SJiyong Park 	},
71*54fd6939SJiyong Park };
72*54fd6939SJiyong Park 
73*54fd6939SJiyong Park /* versal_ipi_config_table_init() - Initialize versal IPI configuration data
74*54fd6939SJiyong Park  *
75*54fd6939SJiyong Park  * @ipi_config_table  - IPI configuration table
76*54fd6939SJiyong Park  * @ipi_total - Total number of IPI available
77*54fd6939SJiyong Park  *
78*54fd6939SJiyong Park  */
versal_ipi_config_table_init(void)79*54fd6939SJiyong Park void versal_ipi_config_table_init(void)
80*54fd6939SJiyong Park {
81*54fd6939SJiyong Park 	ipi_config_table_init(versal_ipi_table, ARRAY_SIZE(versal_ipi_table));
82*54fd6939SJiyong Park }
83