xref: /rk3399_ARM-atf/plat/xilinx/zynqmp/zynqmp_ipi.c (revision 5bcbd2de127292f3ad076217e08468388c6844b0)
1dc1dfe83SWendy Liang /*
231c3842eSJolly Shah  * Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved.
3dc1dfe83SWendy Liang  *
4dc1dfe83SWendy Liang  * SPDX-License-Identifier: BSD-3-Clause
5dc1dfe83SWendy Liang  */
6dc1dfe83SWendy Liang 
7dc1dfe83SWendy Liang /*
8dc1dfe83SWendy Liang  * Zynq UltraScale+ MPSoC IPI agent registers access management
9dc1dfe83SWendy Liang  */
10dc1dfe83SWendy Liang 
11dc1dfe83SWendy Liang #include <errno.h>
12dc1dfe83SWendy Liang #include <string.h>
1309d40e0eSAntonio Nino Diaz 
1409d40e0eSAntonio Nino Diaz #include <common/debug.h>
1509d40e0eSAntonio Nino Diaz #include <common/runtime_svc.h>
1609d40e0eSAntonio Nino Diaz #include <lib/bakery_lock.h>
1709d40e0eSAntonio Nino Diaz #include <lib/mmio.h>
18703a5aacSJolly Shah 
19703a5aacSJolly Shah #include <ipi.h>
201611ef2bSJolly Shah #include <plat_ipi.h>
2131c3842eSJolly Shah #include <plat_private.h>
2209d40e0eSAntonio Nino Diaz 
23dc1dfe83SWendy Liang /* Zynqmp ipi configuration table */
24703a5aacSJolly Shah const static struct ipi_config zynqmp_ipi_table[] = {
25dc1dfe83SWendy Liang 	/* APU IPI */
26dc1dfe83SWendy Liang 	{
27dc1dfe83SWendy Liang 		.ipi_bit_mask = 0x1,
28*5bcbd2deSVenkatesh Yadav Abbarapu 		.ipi_reg_base = 0xFF300000U,
29dc1dfe83SWendy Liang 		.secure_only = 0,
30dc1dfe83SWendy Liang 	},
31dc1dfe83SWendy Liang 	/* RPU0 IPI */
32dc1dfe83SWendy Liang 	{
33dc1dfe83SWendy Liang 		.ipi_bit_mask = 0x100,
34*5bcbd2deSVenkatesh Yadav Abbarapu 		.ipi_reg_base = 0xFF310000U,
35dc1dfe83SWendy Liang 		.secure_only = 0,
36dc1dfe83SWendy Liang 	},
37dc1dfe83SWendy Liang 	/* RPU1 IPI */
38dc1dfe83SWendy Liang 	{
39dc1dfe83SWendy Liang 		.ipi_bit_mask = 0x200,
40*5bcbd2deSVenkatesh Yadav Abbarapu 		.ipi_reg_base = 0xFF320000U,
41dc1dfe83SWendy Liang 		.secure_only = 0,
42dc1dfe83SWendy Liang 	},
43dc1dfe83SWendy Liang 	/* PMU0 IPI */
44dc1dfe83SWendy Liang 	{
45dc1dfe83SWendy Liang 		.ipi_bit_mask = 0x10000,
46*5bcbd2deSVenkatesh Yadav Abbarapu 		.ipi_reg_base = 0xFF330000U,
47dc1dfe83SWendy Liang 		.secure_only = IPI_SECURE_MASK,
48dc1dfe83SWendy Liang 	},
49dc1dfe83SWendy Liang 	/* PMU1 IPI */
50dc1dfe83SWendy Liang 	{
51dc1dfe83SWendy Liang 		.ipi_bit_mask = 0x20000,
52*5bcbd2deSVenkatesh Yadav Abbarapu 		.ipi_reg_base = 0xFF331000U,
5385dc2d4dSRajan Vaja 		.secure_only = 0,
54dc1dfe83SWendy Liang 	},
55dc1dfe83SWendy Liang 	/* PMU2 IPI */
56dc1dfe83SWendy Liang 	{
57dc1dfe83SWendy Liang 		.ipi_bit_mask = 0x40000,
58*5bcbd2deSVenkatesh Yadav Abbarapu 		.ipi_reg_base = 0xFF332000U,
59dc1dfe83SWendy Liang 		.secure_only = IPI_SECURE_MASK,
60dc1dfe83SWendy Liang 	},
61dc1dfe83SWendy Liang 	/* PMU3 IPI */
62dc1dfe83SWendy Liang 	{
63dc1dfe83SWendy Liang 		.ipi_bit_mask = 0x80000,
64*5bcbd2deSVenkatesh Yadav Abbarapu 		.ipi_reg_base = 0xFF333000U,
65dc1dfe83SWendy Liang 		.secure_only = IPI_SECURE_MASK,
66dc1dfe83SWendy Liang 	},
67dc1dfe83SWendy Liang 	/* PL0 IPI */
68dc1dfe83SWendy Liang 	{
69dc1dfe83SWendy Liang 		.ipi_bit_mask = 0x1000000,
70*5bcbd2deSVenkatesh Yadav Abbarapu 		.ipi_reg_base = 0xFF340000U,
71dc1dfe83SWendy Liang 		.secure_only = 0,
72dc1dfe83SWendy Liang 	},
73dc1dfe83SWendy Liang 	/* PL1 IPI */
74dc1dfe83SWendy Liang 	{
75dc1dfe83SWendy Liang 		.ipi_bit_mask = 0x2000000,
76*5bcbd2deSVenkatesh Yadav Abbarapu 		.ipi_reg_base = 0xFF350000U,
77dc1dfe83SWendy Liang 		.secure_only = 0,
78dc1dfe83SWendy Liang 	},
79dc1dfe83SWendy Liang 	/* PL2 IPI */
80dc1dfe83SWendy Liang 	{
81dc1dfe83SWendy Liang 		.ipi_bit_mask = 0x4000000,
82*5bcbd2deSVenkatesh Yadav Abbarapu 		.ipi_reg_base = 0xFF360000U,
83dc1dfe83SWendy Liang 		.secure_only = 0,
84dc1dfe83SWendy Liang 	},
85dc1dfe83SWendy Liang 	/* PL3 IPI */
86dc1dfe83SWendy Liang 	{
87dc1dfe83SWendy Liang 		.ipi_bit_mask = 0x8000000,
88*5bcbd2deSVenkatesh Yadav Abbarapu 		.ipi_reg_base = 0xFF370000U,
89dc1dfe83SWendy Liang 		.secure_only = 0,
90dc1dfe83SWendy Liang 	},
91dc1dfe83SWendy Liang };
92dc1dfe83SWendy Liang 
93b8e39f49SJolly Shah /**
94b8e39f49SJolly Shah  * zynqmp_ipi_config_table_init() - Initialize ZynqMP IPI configuration data
95b8e39f49SJolly Shah  *
96b8e39f49SJolly Shah  */
97b8e39f49SJolly Shah void zynqmp_ipi_config_table_init(void)
98b8e39f49SJolly Shah {
99b8e39f49SJolly Shah 	ipi_config_table_init(zynqmp_ipi_table, ARRAY_SIZE(zynqmp_ipi_table));
100b8e39f49SJolly Shah }
101