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