Linux 6.9-rc6
[sfrench/cifs-2.6.git] / drivers / gpu / drm / amd / amdgpu / ta_xgmi_if.h
1 /*
2  * Copyright 2018-2022 Advanced Micro Devices, Inc.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice shall be included in
12  * all copies or substantial portions of the Software.
13  *
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20  * OTHER DEALINGS IN THE SOFTWARE.
21  *
22  */
23 #ifndef _TA_XGMI_IF_H
24 #define _TA_XGMI_IF_H
25
26 /* Responses have bit 31 set */
27 #define RSP_ID_MASK (1U << 31)
28 #define RSP_ID(cmdId) (((uint32_t)(cmdId)) | RSP_ID_MASK)
29
30 #define EXTEND_PEER_LINK_INFO_CMD_FLAG 1
31
32 enum ta_command_xgmi {
33         /* Initialize the Context and Session Topology */
34         TA_COMMAND_XGMI__INITIALIZE                     = 0x00,
35         /* Gets the current GPU's node ID */
36         TA_COMMAND_XGMI__GET_NODE_ID                    = 0x01,
37         /* Gets the current GPU's hive ID */
38         TA_COMMAND_XGMI__GET_HIVE_ID                    = 0x02,
39         /* Gets the Peer's topology Information */
40         TA_COMMAND_XGMI__GET_TOPOLOGY_INFO              = 0x03,
41         /* Sets the Peer's topology Information */
42         TA_COMMAND_XGMI__SET_TOPOLOGY_INFO              = 0x04,
43         /* Gets the total links between adjacent peer dies in hive */
44         TA_COMMAND_XGMI__GET_PEER_LINKS                 = 0x0B,
45         /* Gets the total links and connected port numbers between adjacent peer dies in hive */
46         TA_COMMAND_XGMI__GET_EXTEND_PEER_LINKS          = 0x0C
47 };
48
49 /* XGMI related enumerations */
50 /**********************************************************/;
51 enum { TA_XGMI__MAX_CONNECTED_NODES = 64 };
52 enum { TA_XGMI__MAX_INTERNAL_STATE = 32 };
53 enum { TA_XGMI__MAX_INTERNAL_STATE_BUFFER = 128 };
54 enum { TA_XGMI__MAX_PORT_NUM = 8 };
55
56 enum ta_xgmi_status {
57         TA_XGMI_STATUS__SUCCESS                         = 0x00,
58         TA_XGMI_STATUS__GENERIC_FAILURE                 = 0x01,
59         TA_XGMI_STATUS__NULL_POINTER                    = 0x02,
60         TA_XGMI_STATUS__INVALID_PARAMETER               = 0x03,
61         TA_XGMI_STATUS__NOT_INITIALIZED                 = 0x04,
62         TA_XGMI_STATUS__INVALID_NODE_NUM                = 0x05,
63         TA_XGMI_STATUS__INVALID_NODE_ID                 = 0x06,
64         TA_XGMI_STATUS__INVALID_TOPOLOGY                = 0x07,
65         TA_XGMI_STATUS__FAILED_ID_GEN                   = 0x08,
66         TA_XGMI_STATUS__FAILED_TOPOLOGY_INIT            = 0x09,
67         TA_XGMI_STATUS__SET_SHARING_ERROR               = 0x0A
68 };
69
70 enum ta_xgmi_assigned_sdma_engine {
71         TA_XGMI_ASSIGNED_SDMA_ENGINE__NOT_ASSIGNED      = -1,
72         TA_XGMI_ASSIGNED_SDMA_ENGINE__SDMA0             = 0,
73         TA_XGMI_ASSIGNED_SDMA_ENGINE__SDMA1             = 1,
74         TA_XGMI_ASSIGNED_SDMA_ENGINE__SDMA2             = 2,
75         TA_XGMI_ASSIGNED_SDMA_ENGINE__SDMA3             = 3,
76         TA_XGMI_ASSIGNED_SDMA_ENGINE__SDMA4             = 4,
77         TA_XGMI_ASSIGNED_SDMA_ENGINE__SDMA5             = 5
78 };
79
80 /* input/output structures for XGMI commands */
81 /**********************************************************/
82 struct ta_xgmi_node_info {
83         uint64_t                                node_id;
84         uint8_t                                 num_hops;
85         uint8_t                                 is_sharing_enabled;
86         enum ta_xgmi_assigned_sdma_engine       sdma_engine;
87 };
88
89 struct ta_xgmi_peer_link_info {
90         uint64_t                                node_id;
91         uint8_t                                 num_links;
92 };
93
94 struct xgmi_connected_port_num {
95         uint8_t         dst_xgmi_port_num;
96         uint8_t         src_xgmi_port_num;
97 };
98
99 /* support both the port num and num_links */
100 struct ta_xgmi_extend_peer_link_info {
101         uint64_t                                node_id;
102         uint8_t                                 num_links;
103         struct xgmi_connected_port_num          port_num[TA_XGMI__MAX_PORT_NUM];
104 };
105
106 struct ta_xgmi_cmd_initialize_output {
107         uint32_t        status;
108 };
109
110 struct ta_xgmi_cmd_get_node_id_output {
111         uint64_t        node_id;
112 };
113
114 struct ta_xgmi_cmd_get_hive_id_output {
115         uint64_t        hive_id;
116 };
117
118 struct ta_xgmi_cmd_get_topology_info_input {
119         uint32_t                        num_nodes;
120         struct ta_xgmi_node_info        nodes[TA_XGMI__MAX_CONNECTED_NODES];
121 };
122
123 struct ta_xgmi_cmd_get_topology_info_output {
124         uint32_t                        num_nodes;
125         struct ta_xgmi_node_info        nodes[TA_XGMI__MAX_CONNECTED_NODES];
126 };
127
128 struct ta_xgmi_cmd_set_topology_info_input {
129         uint32_t                        num_nodes;
130         struct ta_xgmi_node_info        nodes[TA_XGMI__MAX_CONNECTED_NODES];
131 };
132
133 /* support XGMI TA w/ and w/o port_num both so two similar structs defined */
134 struct ta_xgmi_cmd_get_peer_link_info {
135         uint32_t                        num_nodes;
136         struct ta_xgmi_peer_link_info   nodes[TA_XGMI__MAX_CONNECTED_NODES];
137 };
138
139 struct ta_xgmi_cmd_get_extend_peer_link_info {
140         uint32_t                                num_nodes;
141         struct ta_xgmi_extend_peer_link_info nodes[TA_XGMI__MAX_CONNECTED_NODES];
142 };
143 /**********************************************************/
144 /* Common input structure for XGMI callbacks */
145 union ta_xgmi_cmd_input {
146         struct ta_xgmi_cmd_get_topology_info_input      get_topology_info;
147         struct ta_xgmi_cmd_set_topology_info_input      set_topology_info;
148 };
149
150 /* Common output structure for XGMI callbacks */
151 union ta_xgmi_cmd_output {
152         struct ta_xgmi_cmd_initialize_output            initialize;
153         struct ta_xgmi_cmd_get_node_id_output           get_node_id;
154         struct ta_xgmi_cmd_get_hive_id_output           get_hive_id;
155         struct ta_xgmi_cmd_get_topology_info_output     get_topology_info;
156         struct ta_xgmi_cmd_get_peer_link_info           get_link_info;
157         struct ta_xgmi_cmd_get_extend_peer_link_info    get_extend_link_info;
158 };
159
160 struct ta_xgmi_shared_memory {
161         uint32_t                        cmd_id;
162         uint32_t                        resp_id;
163         enum ta_xgmi_status             xgmi_status;
164
165         /* if the number of xgmi link record is more than 128, driver will set the
166          * flag 0 to get the first 128 of the link records and will set to 1, to get
167          * the second set
168          */
169         uint8_t                         flag_extend_link_record;
170         /* bit0: port_num info support flag for GET_EXTEND_PEER_LINKS commmand */
171         uint8_t                         caps_flag;
172         uint8_t                         reserved[2];
173         union ta_xgmi_cmd_input         xgmi_in_message;
174         union ta_xgmi_cmd_output        xgmi_out_message;
175 };
176
177 #endif   //_TA_XGMI_IF_H