1 /*
2  * Copyright (c) 2013-2018, Arm Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 /*
8  * Contains definitions of commonly used macros and data types needed
9  * for PU Power Management. This file should be common for all PU's.
10  */
11 
12 #ifndef PM_COMMON_H
13 #define PM_COMMON_H
14 
15 #include <stdint.h>
16 #include <plat_pm_common.h>
17 
18 #if IPI_CRC_CHECK
19 #define PAYLOAD_ARG_CNT         8U
20 #define IPI_W0_TO_W6_SIZE       28U
21 #define PAYLOAD_CRC_POS         7U
22 #define CRC_INIT_VALUE          0x4F4EU
23 #define CRC_ORDER               16U
24 #define CRC_POLYNOM             0x8005U
25 #else
26 #define PAYLOAD_ARG_CNT         6U
27 #endif
28 #define PAYLOAD_ARG_SIZE	4U	/* size in bytes */
29 
30 #define TZ_VERSION_MAJOR	1
31 #define TZ_VERSION_MINOR	0
32 #define TZ_VERSION		((TZ_VERSION_MAJOR << 16) | \
33 				 TZ_VERSION_MINOR)
34 
35 /**
36  * pm_ipi - struct for capturing IPI-channel specific info
37  * @local_ipi_id	Local IPI agent ID
38  * @remote_ipi_id	Remote IPI Agent ID
39  * @buffer_base	base address for payload buffer
40  */
41 struct pm_ipi {
42 	const uint32_t local_ipi_id;
43 	const uint32_t remote_ipi_id;
44 	const uintptr_t buffer_base;
45 };
46 
47 /**
48  * pm_proc - struct for capturing processor related info
49  * @node_id	node-ID of the processor
50  * @pwrdn_mask	cpu-specific mask to be used for power control register
51  * @ipi		pointer to IPI channel structure
52  *		(in APU all processors share one IPI channel)
53  */
54 struct pm_proc {
55 	const uint32_t node_id;
56 	const uint32_t pwrdn_mask;
57 	const struct pm_ipi *ipi;
58 };
59 
60 const struct pm_proc *pm_get_proc(uint32_t cpuid);
61 
62 #endif /* PM_COMMON_H */
63