aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'amdgpu/amdgpu_gpu_info.c')
-rw-r--r--amdgpu/amdgpu_gpu_info.c94
1 files changed, 55 insertions, 39 deletions
diff --git a/amdgpu/amdgpu_gpu_info.c b/amdgpu/amdgpu_gpu_info.c
index 66c7e0e1..b68e1c4f 100644
--- a/amdgpu/amdgpu_gpu_info.c
+++ b/amdgpu/amdgpu_gpu_info.c
@@ -22,10 +22,6 @@
22 * 22 *
23 */ 23 */
24 24
25#ifdef HAVE_CONFIG_H
26#include "config.h"
27#endif
28
29#include <errno.h> 25#include <errno.h>
30#include <string.h> 26#include <string.h>
31 27
@@ -169,53 +165,57 @@ drm_private int amdgpu_query_gpu_info_init(amdgpu_device_handle dev)
169 dev->info.vce_harvest_config = dev->dev_info.vce_harvest_config; 165 dev->info.vce_harvest_config = dev->dev_info.vce_harvest_config;
170 dev->info.pci_rev_id = dev->dev_info.pci_rev; 166 dev->info.pci_rev_id = dev->dev_info.pci_rev;
171 167
172 for (i = 0; i < (int)dev->info.num_shader_engines; i++) { 168 if (dev->info.family_id < AMDGPU_FAMILY_AI) {
173 unsigned instance = (i << AMDGPU_INFO_MMR_SE_INDEX_SHIFT) | 169 for (i = 0; i < (int)dev->info.num_shader_engines; i++) {
174 (AMDGPU_INFO_MMR_SH_INDEX_MASK << 170 unsigned instance = (i << AMDGPU_INFO_MMR_SE_INDEX_SHIFT) |
175 AMDGPU_INFO_MMR_SH_INDEX_SHIFT); 171 (AMDGPU_INFO_MMR_SH_INDEX_MASK <<
172 AMDGPU_INFO_MMR_SH_INDEX_SHIFT);
176 173
177 r = amdgpu_read_mm_registers(dev, 0x263d, 1, instance, 0, 174 r = amdgpu_read_mm_registers(dev, 0x263d, 1, instance, 0,
178 &dev->info.backend_disable[i]); 175 &dev->info.backend_disable[i]);
179 if (r) 176 if (r)
180 return r; 177 return r;
181 /* extract bitfield CC_RB_BACKEND_DISABLE.BACKEND_DISABLE */ 178 /* extract bitfield CC_RB_BACKEND_DISABLE.BACKEND_DISABLE */
182 dev->info.backend_disable[i] = 179 dev->info.backend_disable[i] =
183 (dev->info.backend_disable[i] >> 16) & 0xff; 180 (dev->info.backend_disable[i] >> 16) & 0xff;
184
185 r = amdgpu_read_mm_registers(dev, 0xa0d4, 1, instance, 0,
186 &dev->info.pa_sc_raster_cfg[i]);
187 if (r)
188 return r;
189 181
190 if (dev->info.family_id >= AMDGPU_FAMILY_CI) { 182 r = amdgpu_read_mm_registers(dev, 0xa0d4, 1, instance, 0,
191 r = amdgpu_read_mm_registers(dev, 0xa0d5, 1, instance, 0, 183 &dev->info.pa_sc_raster_cfg[i]);
192 &dev->info.pa_sc_raster_cfg1[i]);
193 if (r) 184 if (r)
194 return r; 185 return r;
186
187 if (dev->info.family_id >= AMDGPU_FAMILY_CI) {
188 r = amdgpu_read_mm_registers(dev, 0xa0d5, 1, instance, 0,
189 &dev->info.pa_sc_raster_cfg1[i]);
190 if (r)
191 return r;
192 }
195 } 193 }
196 } 194 }
197 195
198 r = amdgpu_read_mm_registers(dev, 0x2644, 32, 0xffffffff, 0, 196 r = amdgpu_read_mm_registers(dev, 0x263e, 1, 0xffffffff, 0,
199 dev->info.gb_tile_mode); 197 &dev->info.gb_addr_cfg);
200 if (r) 198 if (r)
201 return r; 199 return r;
202 200
203 if (dev->info.family_id >= AMDGPU_FAMILY_CI) { 201 if (dev->info.family_id < AMDGPU_FAMILY_AI) {
204 r = amdgpu_read_mm_registers(dev, 0x2664, 16, 0xffffffff, 0, 202 r = amdgpu_read_mm_registers(dev, 0x2644, 32, 0xffffffff, 0,
205 dev->info.gb_macro_tile_mode); 203 dev->info.gb_tile_mode);
206 if (r) 204 if (r)
207 return r; 205 return r;
208 }
209 206
210 r = amdgpu_read_mm_registers(dev, 0x263e, 1, 0xffffffff, 0, 207 if (dev->info.family_id >= AMDGPU_FAMILY_CI) {
211 &dev->info.gb_addr_cfg); 208 r = amdgpu_read_mm_registers(dev, 0x2664, 16, 0xffffffff, 0,
212 if (r) 209 dev->info.gb_macro_tile_mode);
213 return r; 210 if (r)
211 return r;
212 }
214 213
215 r = amdgpu_read_mm_registers(dev, 0x9d8, 1, 0xffffffff, 0, 214 r = amdgpu_read_mm_registers(dev, 0x9d8, 1, 0xffffffff, 0,
216 &dev->info.mc_arb_ramcfg); 215 &dev->info.mc_arb_ramcfg);
217 if (r) 216 if (r)
218 return r; 217 return r;
218 }
219 219
220 dev->info.cu_active_number = dev->dev_info.cu_active_number; 220 dev->info.cu_active_number = dev->dev_info.cu_active_number;
221 dev->info.cu_ao_mask = dev->dev_info.cu_ao_mask; 221 dev->info.cu_ao_mask = dev->dev_info.cu_ao_mask;
@@ -230,8 +230,9 @@ drm_private int amdgpu_query_gpu_info_init(amdgpu_device_handle dev)
230int amdgpu_query_gpu_info(amdgpu_device_handle dev, 230int amdgpu_query_gpu_info(amdgpu_device_handle dev,
231 struct amdgpu_gpu_info *info) 231 struct amdgpu_gpu_info *info)
232{ 232{
233 if ((dev == NULL) || (info == NULL)) 233 if (!dev || !info)
234 return -EINVAL; 234 return -EINVAL;
235
235 /* Get ASIC info*/ 236 /* Get ASIC info*/
236 *info = dev->info; 237 *info = dev->info;
237 238
@@ -296,7 +297,7 @@ int amdgpu_query_gds_info(amdgpu_device_handle dev,
296 struct drm_amdgpu_info_gds gds_config = {}; 297 struct drm_amdgpu_info_gds gds_config = {};
297 int r; 298 int r;
298 299
299 if (gds_info == NULL) 300 if (!gds_info)
300 return -EINVAL; 301 return -EINVAL;
301 302
302 r = amdgpu_query_info(dev, AMDGPU_INFO_GDS_CONFIG, 303 r = amdgpu_query_info(dev, AMDGPU_INFO_GDS_CONFIG,
@@ -314,3 +315,18 @@ int amdgpu_query_gds_info(amdgpu_device_handle dev,
314 315
315 return 0; 316 return 0;
316} 317}
318
319int amdgpu_query_sensor_info(amdgpu_device_handle dev, unsigned sensor_type,
320 unsigned size, void *value)
321{
322 struct drm_amdgpu_info request;
323
324 memset(&request, 0, sizeof(request));
325 request.return_pointer = (uintptr_t)value;
326 request.return_size = size;
327 request.query = AMDGPU_INFO_SENSOR;
328 request.sensor_info.type = sensor_type;
329
330 return drmCommandWrite(dev->fd, DRM_AMDGPU_INFO, &request,
331 sizeof(struct drm_amdgpu_info));
332}