xref: /rk3399_ARM-atf/plat/xilinx/versal_net/versal_net_ipi.c (revision 0654ab7f75449307c79789e12be7aab2338edcc3)
1*0654ab7fSJay Buddhabhatti /*
2*0654ab7fSJay Buddhabhatti  * Copyright (C) 2022, Xilinx, Inc. All rights reserved.
3*0654ab7fSJay Buddhabhatti  * Copyright (C) 2022, Advanced Micro Devices, Inc. All rights reserved.
4*0654ab7fSJay Buddhabhatti  *
5*0654ab7fSJay Buddhabhatti  * SPDX-License-Identifier: BSD-3-Clause
6*0654ab7fSJay Buddhabhatti  */
7*0654ab7fSJay Buddhabhatti 
8*0654ab7fSJay Buddhabhatti /*
9*0654ab7fSJay Buddhabhatti  * Versal NET IPI agent registers access management
10*0654ab7fSJay Buddhabhatti  */
11*0654ab7fSJay Buddhabhatti 
12*0654ab7fSJay Buddhabhatti #include <errno.h>
13*0654ab7fSJay Buddhabhatti #include <string.h>
14*0654ab7fSJay Buddhabhatti 
15*0654ab7fSJay Buddhabhatti #include <common/debug.h>
16*0654ab7fSJay Buddhabhatti #include <common/runtime_svc.h>
17*0654ab7fSJay Buddhabhatti #include <lib/bakery_lock.h>
18*0654ab7fSJay Buddhabhatti #include <lib/mmio.h>
19*0654ab7fSJay Buddhabhatti 
20*0654ab7fSJay Buddhabhatti #include <ipi.h>
21*0654ab7fSJay Buddhabhatti #include <plat_ipi.h>
22*0654ab7fSJay Buddhabhatti #include <plat_private.h>
23*0654ab7fSJay Buddhabhatti 
24*0654ab7fSJay Buddhabhatti /* versal_net ipi configuration table */
25*0654ab7fSJay Buddhabhatti static const struct ipi_config versal_net_ipi_table[IPI_ID_MAX] = {
26*0654ab7fSJay Buddhabhatti 	/* A72 IPI */
27*0654ab7fSJay Buddhabhatti 	[IPI_ID_APU] = {
28*0654ab7fSJay Buddhabhatti 		.ipi_bit_mask = IPI0_TRIG_BIT,
29*0654ab7fSJay Buddhabhatti 		.ipi_reg_base = IPI0_REG_BASE,
30*0654ab7fSJay Buddhabhatti 		.secure_only = 0,
31*0654ab7fSJay Buddhabhatti 	},
32*0654ab7fSJay Buddhabhatti 
33*0654ab7fSJay Buddhabhatti 	/* PMC IPI */
34*0654ab7fSJay Buddhabhatti 	[IPI_ID_PMC] = {
35*0654ab7fSJay Buddhabhatti 		.ipi_bit_mask = PMC_IPI_TRIG_BIT,
36*0654ab7fSJay Buddhabhatti 		.ipi_reg_base = IPI0_REG_BASE,
37*0654ab7fSJay Buddhabhatti 		.secure_only = 0,
38*0654ab7fSJay Buddhabhatti 	},
39*0654ab7fSJay Buddhabhatti 
40*0654ab7fSJay Buddhabhatti 	/* RPU0 IPI */
41*0654ab7fSJay Buddhabhatti 	[IPI_ID_RPU0] = {
42*0654ab7fSJay Buddhabhatti 		.ipi_bit_mask = IPI1_TRIG_BIT,
43*0654ab7fSJay Buddhabhatti 		.ipi_reg_base = IPI1_REG_BASE,
44*0654ab7fSJay Buddhabhatti 		.secure_only = 0,
45*0654ab7fSJay Buddhabhatti 	},
46*0654ab7fSJay Buddhabhatti 
47*0654ab7fSJay Buddhabhatti 	/* RPU1 IPI */
48*0654ab7fSJay Buddhabhatti 	[IPI_ID_RPU1] = {
49*0654ab7fSJay Buddhabhatti 		.ipi_bit_mask = IPI2_TRIG_BIT,
50*0654ab7fSJay Buddhabhatti 		.ipi_reg_base = IPI2_REG_BASE,
51*0654ab7fSJay Buddhabhatti 		.secure_only = 0,
52*0654ab7fSJay Buddhabhatti 	},
53*0654ab7fSJay Buddhabhatti 
54*0654ab7fSJay Buddhabhatti 	/* IPI3 IPI */
55*0654ab7fSJay Buddhabhatti 	[IPI_ID_3] = {
56*0654ab7fSJay Buddhabhatti 		.ipi_bit_mask = IPI3_TRIG_BIT,
57*0654ab7fSJay Buddhabhatti 		.ipi_reg_base = IPI3_REG_BASE,
58*0654ab7fSJay Buddhabhatti 		.secure_only = 0,
59*0654ab7fSJay Buddhabhatti 	},
60*0654ab7fSJay Buddhabhatti 
61*0654ab7fSJay Buddhabhatti 	/* IPI4 IPI */
62*0654ab7fSJay Buddhabhatti 	[IPI_ID_4] = {
63*0654ab7fSJay Buddhabhatti 		.ipi_bit_mask = IPI4_TRIG_BIT,
64*0654ab7fSJay Buddhabhatti 		.ipi_reg_base = IPI4_REG_BASE,
65*0654ab7fSJay Buddhabhatti 		.secure_only = 0,
66*0654ab7fSJay Buddhabhatti 	},
67*0654ab7fSJay Buddhabhatti 
68*0654ab7fSJay Buddhabhatti 	/* IPI5 IPI */
69*0654ab7fSJay Buddhabhatti 	[IPI_ID_5] = {
70*0654ab7fSJay Buddhabhatti 		.ipi_bit_mask = IPI5_TRIG_BIT,
71*0654ab7fSJay Buddhabhatti 		.ipi_reg_base = IPI5_REG_BASE,
72*0654ab7fSJay Buddhabhatti 		.secure_only = 0,
73*0654ab7fSJay Buddhabhatti 	},
74*0654ab7fSJay Buddhabhatti };
75*0654ab7fSJay Buddhabhatti 
76*0654ab7fSJay Buddhabhatti /* versal_net_ipi_config_table_init() - Initialize versal_net IPI configuration data
77*0654ab7fSJay Buddhabhatti  *
78*0654ab7fSJay Buddhabhatti  * @ipi_config_table  - IPI configuration table
79*0654ab7fSJay Buddhabhatti  * @ipi_total - Total number of IPI available
80*0654ab7fSJay Buddhabhatti  *
81*0654ab7fSJay Buddhabhatti  */
82*0654ab7fSJay Buddhabhatti void versal_net_ipi_config_table_init(void)
83*0654ab7fSJay Buddhabhatti {
84*0654ab7fSJay Buddhabhatti 	ipi_config_table_init(versal_net_ipi_table, ARRAY_SIZE(versal_net_ipi_table));
85*0654ab7fSJay Buddhabhatti }
86