xref: /rk3399_ARM-atf/plat/imx/imx8ulp/include/scmi_sensor.h (revision 1c408d3c40abbe48064c1e2ef5224c1d6edca3cd)
1*fcd41e86SJacky Bai /*
2*fcd41e86SJacky Bai  * Copyright (c) 2015-2024, Arm Limited and Contributors. All rights reserved.
3*fcd41e86SJacky Bai  *
4*fcd41e86SJacky Bai  * SPDX-License-Identifier: BSD-3-Clause
5*fcd41e86SJacky Bai  *
6*fcd41e86SJacky Bai  * Description:
7*fcd41e86SJacky Bai  *      System Control and Management Interface (SCMI) support.
8*fcd41e86SJacky Bai  */
9*fcd41e86SJacky Bai 
10*fcd41e86SJacky Bai #ifndef INTERNAL_SCMI_SENSOR_H
11*fcd41e86SJacky Bai #define INTERNAL_SCMI_SENSOR_H
12*fcd41e86SJacky Bai 
13*fcd41e86SJacky Bai #include <stdint.h>
14*fcd41e86SJacky Bai 
15*fcd41e86SJacky Bai #define SCMI_PROTOCOL_VERSION_SENSOR UINT32_C(0x10000)
16*fcd41e86SJacky Bai 
17*fcd41e86SJacky Bai /*
18*fcd41e86SJacky Bai  * PROTOCOL_ATTRIBUTES
19*fcd41e86SJacky Bai  */
20*fcd41e86SJacky Bai struct scmi_sensor_protocol_attributes_p2a {
21*fcd41e86SJacky Bai 	int32_t status;
22*fcd41e86SJacky Bai 	uint32_t attributes;
23*fcd41e86SJacky Bai 	uint32_t sensor_reg_address_low;
24*fcd41e86SJacky Bai 	uint32_t sensor_reg_address_high;
25*fcd41e86SJacky Bai 	uint32_t sensor_reg_len;
26*fcd41e86SJacky Bai };
27*fcd41e86SJacky Bai 
28*fcd41e86SJacky Bai /*
29*fcd41e86SJacky Bai  * SENSOR_READING_GET
30*fcd41e86SJacky Bai  */
31*fcd41e86SJacky Bai #define SCMI_SENSOR_PROTOCOL_READING_GET_ASYNC_FLAG_MASK    (1 << 0)
32*fcd41e86SJacky Bai 
33*fcd41e86SJacky Bai struct scmi_sensor_protocol_reading_get_a2p {
34*fcd41e86SJacky Bai 	uint32_t sensor_id;
35*fcd41e86SJacky Bai 	uint32_t flags;
36*fcd41e86SJacky Bai };
37*fcd41e86SJacky Bai 
38*fcd41e86SJacky Bai struct scmi_sensor_protocol_reading_get_p2a {
39*fcd41e86SJacky Bai 	int32_t status;
40*fcd41e86SJacky Bai 	uint32_t sensor_value_low;
41*fcd41e86SJacky Bai 	uint32_t sensor_value_high;
42*fcd41e86SJacky Bai };
43*fcd41e86SJacky Bai 
44*fcd41e86SJacky Bai /*
45*fcd41e86SJacky Bai  * SENSOR_DESCRIPTION_GET
46*fcd41e86SJacky Bai  */
47*fcd41e86SJacky Bai  #define SCMI_SENSOR_DESCS_MAX(MAILBOX_SIZE) \
48*fcd41e86SJacky Bai 	((sizeof(struct scmi_sensor_protocol_description_get_p2a) < MAILBOX_SIZE) \
49*fcd41e86SJacky Bai 	? ((MAILBOX_SIZE - \
50*fcd41e86SJacky Bai 	   sizeof(struct scmi_sensor_protocol_description_get_p2a)) \
51*fcd41e86SJacky Bai 	   / sizeof(struct scmi_sensor_desc)) \
52*fcd41e86SJacky Bai 	: 0)
53*fcd41e86SJacky Bai 
54*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_TYPE_POS              0
55*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_POS   11
56*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_POS 22
57*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_POS   27
58*fcd41e86SJacky Bai 
59*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_TYPE_MASK \
60*fcd41e86SJacky Bai 	(UINT32_C(0xFF) << SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_TYPE_POS)
61*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MASK \
62*fcd41e86SJacky Bai 	(UINT32_C(0x1F) << SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_POS)
63*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_MASK \
64*fcd41e86SJacky Bai 	(UINT32_C(0x1F) << \
65*fcd41e86SJacky Bai 	SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_POS)
66*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_MASK \
67*fcd41e86SJacky Bai 	(UINT32_C(0x1F) << SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_POS)
68*fcd41e86SJacky Bai 
69*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MAX \
70*fcd41e86SJacky Bai 	(int32_t)(SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MASK >> 1)
71*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MIN \
72*fcd41e86SJacky Bai 	(-(SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MAX + 1))
73*fcd41e86SJacky Bai 
74*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_MAX \
75*fcd41e86SJacky Bai 	(int32_t)(SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_MASK >> 1)
76*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_MIN \
77*fcd41e86SJacky Bai 	(-(SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_MAX + 1))
78*fcd41e86SJacky Bai 
79*fcd41e86SJacky Bai #define SCMI_SENSOR_DESC_ATTRIBUTES_HIGH(SENSOR_TYPE, UNIT_MULTIPLIER, \
80*fcd41e86SJacky Bai 					 UPDATE_MULTIPLIER, UPDATE_INTERVAL) \
81*fcd41e86SJacky Bai 	( \
82*fcd41e86SJacky Bai 	(((SENSOR_TYPE) << \
83*fcd41e86SJacky Bai 	   SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_TYPE_POS) & \
84*fcd41e86SJacky Bai 	   SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_TYPE_MASK) | \
85*fcd41e86SJacky Bai 	   (((UNIT_MULTIPLIER) << \
86*fcd41e86SJacky Bai 	   SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_POS) & \
87*fcd41e86SJacky Bai 	   SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UNIT_MULTIPLIER_MASK) | \
88*fcd41e86SJacky Bai 	   (((UPDATE_MULTIPLIER) << \
89*fcd41e86SJacky Bai 	   SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_POS) & \
90*fcd41e86SJacky Bai 	   SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_MULTIPLIER_MASK) | \
91*fcd41e86SJacky Bai 	   (((UPDATE_INTERVAL) << \
92*fcd41e86SJacky Bai 	   SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_POS) & \
93*fcd41e86SJacky Bai 	   SCMI_SENSOR_DESC_ATTRS_HIGH_SENSOR_UPDATE_INTERVAL_MASK) \
94*fcd41e86SJacky Bai 	)
95*fcd41e86SJacky Bai 
96*fcd41e86SJacky Bai #define SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_DESCS_POS              0
97*fcd41e86SJacky Bai #define SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_REMAINING_DESCS_POS   16
98*fcd41e86SJacky Bai 
99*fcd41e86SJacky Bai #define SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_DESCS_MASK \
100*fcd41e86SJacky Bai 	(UINT32_C(0xFFF) << SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_DESCS_POS)
101*fcd41e86SJacky Bai #define SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_REMAINING_DESCS_MASK \
102*fcd41e86SJacky Bai 	(UINT32_C(0xFFFF) << SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_REMAINING_DESCS_POS)
103*fcd41e86SJacky Bai 
104*fcd41e86SJacky Bai #define SCMI_SENSOR_NUM_SENSOR_FLAGS(NUM_DESCS, NUM_REMAINING_DESCS) \
105*fcd41e86SJacky Bai 	( \
106*fcd41e86SJacky Bai 	(((NUM_DESCS) << \
107*fcd41e86SJacky Bai 	  SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_DESCS_POS) & \
108*fcd41e86SJacky Bai 	  SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_DESCS_MASK) | \
109*fcd41e86SJacky Bai 	  (((NUM_REMAINING_DESCS) << \
110*fcd41e86SJacky Bai 	    SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_REMAINING_DESCS_POS) & \
111*fcd41e86SJacky Bai 	    SCMI_SENSOR_NUM_SENSOR_FLAGS_NUM_REMAINING_DESCS_MASK) \
112*fcd41e86SJacky Bai 	)
113*fcd41e86SJacky Bai 
114*fcd41e86SJacky Bai #define SCMI_SENSOR_NAME_LEN    16
115*fcd41e86SJacky Bai 
116*fcd41e86SJacky Bai struct scmi_sensor_desc {
117*fcd41e86SJacky Bai 	uint32_t sensor_id;
118*fcd41e86SJacky Bai 	uint32_t sensor_attributes_low;
119*fcd41e86SJacky Bai 	uint32_t sensor_attributes_high;
120*fcd41e86SJacky Bai 	char sensor_name[SCMI_SENSOR_NAME_LEN];
121*fcd41e86SJacky Bai };
122*fcd41e86SJacky Bai 
123*fcd41e86SJacky Bai struct scmi_sensor_protocol_description_get_a2p {
124*fcd41e86SJacky Bai 	uint32_t desc_index;
125*fcd41e86SJacky Bai };
126*fcd41e86SJacky Bai 
127*fcd41e86SJacky Bai struct scmi_sensor_protocol_description_get_p2a {
128*fcd41e86SJacky Bai 	int32_t status;
129*fcd41e86SJacky Bai 	uint32_t num_sensor_flags;
130*fcd41e86SJacky Bai 	struct scmi_sensor_desc sensor_desc[];
131*fcd41e86SJacky Bai };
132*fcd41e86SJacky Bai 
133*fcd41e86SJacky Bai /* Event indices */
134*fcd41e86SJacky Bai enum scmi_sensor_api_idx {
135*fcd41e86SJacky Bai 	SCMI_SENSOR_EVENT_IDX_REQUEST,
136*fcd41e86SJacky Bai 	SCMI_SENSOR_EVENT_IDX_COUNT,
137*fcd41e86SJacky Bai };
138*fcd41e86SJacky Bai 
139*fcd41e86SJacky Bai #endif /* INTERNAL_SCMI_SENSOR_H */
140