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