xref: /rk3399_ARM-atf/plat/xilinx/versal/pm_service/pm_client.c (revision c73a90e571e763e3afc1d9cbef09e7d134b25af8)
1*c73a90e5STejas Patel /*
2*c73a90e5STejas Patel  * Copyright (c) 2019, Xilinx, Inc. All rights reserved.
3*c73a90e5STejas Patel  *
4*c73a90e5STejas Patel  * SPDX-License-Identifier: BSD-3-Clause
5*c73a90e5STejas Patel  */
6*c73a90e5STejas Patel 
7*c73a90e5STejas Patel /*
8*c73a90e5STejas Patel  * APU specific definition of processors in the subsystem as well as functions
9*c73a90e5STejas Patel  * for getting information about and changing state of the APU.
10*c73a90e5STejas Patel  */
11*c73a90e5STejas Patel 
12*c73a90e5STejas Patel #include <plat_ipi.h>
13*c73a90e5STejas Patel #include <platform_def.h>
14*c73a90e5STejas Patel #include <versal_def.h>
15*c73a90e5STejas Patel #include <lib/bakery_lock.h>
16*c73a90e5STejas Patel #include "pm_client.h"
17*c73a90e5STejas Patel 
18*c73a90e5STejas Patel DEFINE_BAKERY_LOCK(pm_client_secure_lock);
19*c73a90e5STejas Patel 
20*c73a90e5STejas Patel static const struct pm_ipi apu_ipi = {
21*c73a90e5STejas Patel 	.local_ipi_id = IPI_ID_APU,
22*c73a90e5STejas Patel 	.remote_ipi_id = IPI_ID_PMC,
23*c73a90e5STejas Patel 	.buffer_base = IPI_BUFFER_APU_BASE,
24*c73a90e5STejas Patel };
25*c73a90e5STejas Patel 
26*c73a90e5STejas Patel /* Order in pm_procs_all array must match cpu ids */
27*c73a90e5STejas Patel static const struct pm_proc pm_procs_all[] = {
28*c73a90e5STejas Patel 	{
29*c73a90e5STejas Patel 		.node_id = XPM_DEVID_ACPU_0,
30*c73a90e5STejas Patel 		.ipi = &apu_ipi,
31*c73a90e5STejas Patel 	},
32*c73a90e5STejas Patel 	{
33*c73a90e5STejas Patel 		.node_id = XPM_DEVID_ACPU_1,
34*c73a90e5STejas Patel 		.ipi = &apu_ipi,
35*c73a90e5STejas Patel 	}
36*c73a90e5STejas Patel };
37*c73a90e5STejas Patel 
38*c73a90e5STejas Patel const struct pm_proc *primary_proc = &pm_procs_all[0];
39