1d722e3fbSopenharmony_ci/*
2d722e3fbSopenharmony_ci * Copyright © 2014 Advanced Micro Devices, Inc.
3d722e3fbSopenharmony_ci * All Rights Reserved.
4d722e3fbSopenharmony_ci *
5d722e3fbSopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a
6d722e3fbSopenharmony_ci * copy of this software and associated documentation files (the "Software"),
7d722e3fbSopenharmony_ci * to deal in the Software without restriction, including without limitation
8d722e3fbSopenharmony_ci * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9d722e3fbSopenharmony_ci * and/or sell copies of the Software, and to permit persons to whom the
10d722e3fbSopenharmony_ci * Software is furnished to do so, subject to the following conditions:
11d722e3fbSopenharmony_ci *
12d722e3fbSopenharmony_ci * The above copyright notice and this permission notice shall be included in
13d722e3fbSopenharmony_ci * all copies or substantial portions of the Software.
14d722e3fbSopenharmony_ci *
15d722e3fbSopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16d722e3fbSopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17d722e3fbSopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18d722e3fbSopenharmony_ci * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
19d722e3fbSopenharmony_ci * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20d722e3fbSopenharmony_ci * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21d722e3fbSopenharmony_ci * OTHER DEALINGS IN THE SOFTWARE.
22d722e3fbSopenharmony_ci *
23d722e3fbSopenharmony_ci */
24d722e3fbSopenharmony_ci
25d722e3fbSopenharmony_ci#include <errno.h>
26d722e3fbSopenharmony_ci#include <string.h>
27d722e3fbSopenharmony_ci
28d722e3fbSopenharmony_ci#include "amdgpu.h"
29d722e3fbSopenharmony_ci#include "amdgpu_drm.h"
30d722e3fbSopenharmony_ci#include "amdgpu_internal.h"
31d722e3fbSopenharmony_ci#include "xf86drm.h"
32d722e3fbSopenharmony_ci
33d722e3fbSopenharmony_cidrm_public int amdgpu_query_info(amdgpu_device_handle dev, unsigned info_id,
34d722e3fbSopenharmony_ci				 unsigned size, void *value)
35d722e3fbSopenharmony_ci{
36d722e3fbSopenharmony_ci	struct drm_amdgpu_info request;
37d722e3fbSopenharmony_ci
38d722e3fbSopenharmony_ci	memset(&request, 0, sizeof(request));
39d722e3fbSopenharmony_ci	request.return_pointer = (uintptr_t)value;
40d722e3fbSopenharmony_ci	request.return_size = size;
41d722e3fbSopenharmony_ci	request.query = info_id;
42d722e3fbSopenharmony_ci
43d722e3fbSopenharmony_ci	return drmCommandWrite(dev->fd, DRM_AMDGPU_INFO, &request,
44d722e3fbSopenharmony_ci			       sizeof(struct drm_amdgpu_info));
45d722e3fbSopenharmony_ci}
46d722e3fbSopenharmony_ci
47d722e3fbSopenharmony_cidrm_public int amdgpu_query_crtc_from_id(amdgpu_device_handle dev, unsigned id,
48d722e3fbSopenharmony_ci					 int32_t *result)
49d722e3fbSopenharmony_ci{
50d722e3fbSopenharmony_ci	struct drm_amdgpu_info request;
51d722e3fbSopenharmony_ci
52d722e3fbSopenharmony_ci	memset(&request, 0, sizeof(request));
53d722e3fbSopenharmony_ci	request.return_pointer = (uintptr_t)result;
54d722e3fbSopenharmony_ci	request.return_size = sizeof(*result);
55d722e3fbSopenharmony_ci	request.query = AMDGPU_INFO_CRTC_FROM_ID;
56d722e3fbSopenharmony_ci	request.mode_crtc.id = id;
57d722e3fbSopenharmony_ci
58d722e3fbSopenharmony_ci	return drmCommandWrite(dev->fd, DRM_AMDGPU_INFO, &request,
59d722e3fbSopenharmony_ci			       sizeof(struct drm_amdgpu_info));
60d722e3fbSopenharmony_ci}
61d722e3fbSopenharmony_ci
62d722e3fbSopenharmony_cidrm_public int amdgpu_read_mm_registers(amdgpu_device_handle dev,
63d722e3fbSopenharmony_ci		unsigned dword_offset, unsigned count, uint32_t instance,
64d722e3fbSopenharmony_ci		uint32_t flags, uint32_t *values)
65d722e3fbSopenharmony_ci{
66d722e3fbSopenharmony_ci	struct drm_amdgpu_info request;
67d722e3fbSopenharmony_ci
68d722e3fbSopenharmony_ci	memset(&request, 0, sizeof(request));
69d722e3fbSopenharmony_ci	request.return_pointer = (uintptr_t)values;
70d722e3fbSopenharmony_ci	request.return_size = count * sizeof(uint32_t);
71d722e3fbSopenharmony_ci	request.query = AMDGPU_INFO_READ_MMR_REG;
72d722e3fbSopenharmony_ci	request.read_mmr_reg.dword_offset = dword_offset;
73d722e3fbSopenharmony_ci	request.read_mmr_reg.count = count;
74d722e3fbSopenharmony_ci	request.read_mmr_reg.instance = instance;
75d722e3fbSopenharmony_ci	request.read_mmr_reg.flags = flags;
76d722e3fbSopenharmony_ci
77d722e3fbSopenharmony_ci	return drmCommandWrite(dev->fd, DRM_AMDGPU_INFO, &request,
78d722e3fbSopenharmony_ci			       sizeof(struct drm_amdgpu_info));
79d722e3fbSopenharmony_ci}
80d722e3fbSopenharmony_ci
81d722e3fbSopenharmony_cidrm_public int amdgpu_query_hw_ip_count(amdgpu_device_handle dev,
82d722e3fbSopenharmony_ci					unsigned type,
83d722e3fbSopenharmony_ci					uint32_t *count)
84d722e3fbSopenharmony_ci{
85d722e3fbSopenharmony_ci	struct drm_amdgpu_info request;
86d722e3fbSopenharmony_ci
87d722e3fbSopenharmony_ci	memset(&request, 0, sizeof(request));
88d722e3fbSopenharmony_ci	request.return_pointer = (uintptr_t)count;
89d722e3fbSopenharmony_ci	request.return_size = sizeof(*count);
90d722e3fbSopenharmony_ci	request.query = AMDGPU_INFO_HW_IP_COUNT;
91d722e3fbSopenharmony_ci	request.query_hw_ip.type = type;
92d722e3fbSopenharmony_ci
93d722e3fbSopenharmony_ci	return drmCommandWrite(dev->fd, DRM_AMDGPU_INFO, &request,
94d722e3fbSopenharmony_ci			       sizeof(struct drm_amdgpu_info));
95d722e3fbSopenharmony_ci}
96d722e3fbSopenharmony_ci
97d722e3fbSopenharmony_cidrm_public int amdgpu_query_hw_ip_info(amdgpu_device_handle dev, unsigned type,
98d722e3fbSopenharmony_ci				       unsigned ip_instance,
99d722e3fbSopenharmony_ci				       struct drm_amdgpu_info_hw_ip *info)
100d722e3fbSopenharmony_ci{
101d722e3fbSopenharmony_ci	struct drm_amdgpu_info request;
102d722e3fbSopenharmony_ci
103d722e3fbSopenharmony_ci	memset(&request, 0, sizeof(request));
104d722e3fbSopenharmony_ci	request.return_pointer = (uintptr_t)info;
105d722e3fbSopenharmony_ci	request.return_size = sizeof(*info);
106d722e3fbSopenharmony_ci	request.query = AMDGPU_INFO_HW_IP_INFO;
107d722e3fbSopenharmony_ci	request.query_hw_ip.type = type;
108d722e3fbSopenharmony_ci	request.query_hw_ip.ip_instance = ip_instance;
109d722e3fbSopenharmony_ci
110d722e3fbSopenharmony_ci	return drmCommandWrite(dev->fd, DRM_AMDGPU_INFO, &request,
111d722e3fbSopenharmony_ci			       sizeof(struct drm_amdgpu_info));
112d722e3fbSopenharmony_ci}
113d722e3fbSopenharmony_ci
114d722e3fbSopenharmony_cidrm_public int amdgpu_query_firmware_version(amdgpu_device_handle dev,
115d722e3fbSopenharmony_ci		unsigned fw_type, unsigned ip_instance, unsigned index,
116d722e3fbSopenharmony_ci		uint32_t *version, uint32_t *feature)
117d722e3fbSopenharmony_ci{
118d722e3fbSopenharmony_ci	struct drm_amdgpu_info request;
119d722e3fbSopenharmony_ci	struct drm_amdgpu_info_firmware firmware = {};
120d722e3fbSopenharmony_ci	int r;
121d722e3fbSopenharmony_ci
122d722e3fbSopenharmony_ci	memset(&request, 0, sizeof(request));
123d722e3fbSopenharmony_ci	request.return_pointer = (uintptr_t)&firmware;
124d722e3fbSopenharmony_ci	request.return_size = sizeof(firmware);
125d722e3fbSopenharmony_ci	request.query = AMDGPU_INFO_FW_VERSION;
126d722e3fbSopenharmony_ci	request.query_fw.fw_type = fw_type;
127d722e3fbSopenharmony_ci	request.query_fw.ip_instance = ip_instance;
128d722e3fbSopenharmony_ci	request.query_fw.index = index;
129d722e3fbSopenharmony_ci
130d722e3fbSopenharmony_ci	r = drmCommandWrite(dev->fd, DRM_AMDGPU_INFO, &request,
131d722e3fbSopenharmony_ci			    sizeof(struct drm_amdgpu_info));
132d722e3fbSopenharmony_ci	if (r)
133d722e3fbSopenharmony_ci		return r;
134d722e3fbSopenharmony_ci
135d722e3fbSopenharmony_ci	*version = firmware.ver;
136d722e3fbSopenharmony_ci	*feature = firmware.feature;
137d722e3fbSopenharmony_ci	return 0;
138d722e3fbSopenharmony_ci}
139d722e3fbSopenharmony_ci
140d722e3fbSopenharmony_cidrm_private int amdgpu_query_gpu_info_init(amdgpu_device_handle dev)
141d722e3fbSopenharmony_ci{
142d722e3fbSopenharmony_ci	int r, i;
143d722e3fbSopenharmony_ci
144d722e3fbSopenharmony_ci	r = amdgpu_query_info(dev, AMDGPU_INFO_DEV_INFO, sizeof(dev->dev_info),
145d722e3fbSopenharmony_ci			      &dev->dev_info);
146d722e3fbSopenharmony_ci	if (r)
147d722e3fbSopenharmony_ci		return r;
148d722e3fbSopenharmony_ci
149d722e3fbSopenharmony_ci	dev->info.asic_id = dev->dev_info.device_id;
150d722e3fbSopenharmony_ci	dev->info.chip_rev = dev->dev_info.chip_rev;
151d722e3fbSopenharmony_ci	dev->info.chip_external_rev = dev->dev_info.external_rev;
152d722e3fbSopenharmony_ci	dev->info.family_id = dev->dev_info.family;
153d722e3fbSopenharmony_ci	dev->info.max_engine_clk = dev->dev_info.max_engine_clock;
154d722e3fbSopenharmony_ci	dev->info.max_memory_clk = dev->dev_info.max_memory_clock;
155d722e3fbSopenharmony_ci	dev->info.gpu_counter_freq = dev->dev_info.gpu_counter_freq;
156d722e3fbSopenharmony_ci	dev->info.enabled_rb_pipes_mask = dev->dev_info.enabled_rb_pipes_mask;
157d722e3fbSopenharmony_ci	dev->info.rb_pipes = dev->dev_info.num_rb_pipes;
158d722e3fbSopenharmony_ci	dev->info.ids_flags = dev->dev_info.ids_flags;
159d722e3fbSopenharmony_ci	dev->info.num_hw_gfx_contexts = dev->dev_info.num_hw_gfx_contexts;
160d722e3fbSopenharmony_ci	dev->info.num_shader_engines = dev->dev_info.num_shader_engines;
161d722e3fbSopenharmony_ci	dev->info.num_shader_arrays_per_engine =
162d722e3fbSopenharmony_ci		dev->dev_info.num_shader_arrays_per_engine;
163d722e3fbSopenharmony_ci	dev->info.vram_type = dev->dev_info.vram_type;
164d722e3fbSopenharmony_ci	dev->info.vram_bit_width = dev->dev_info.vram_bit_width;
165d722e3fbSopenharmony_ci	dev->info.ce_ram_size = dev->dev_info.ce_ram_size;
166d722e3fbSopenharmony_ci	dev->info.vce_harvest_config = dev->dev_info.vce_harvest_config;
167d722e3fbSopenharmony_ci	dev->info.pci_rev_id = dev->dev_info.pci_rev;
168d722e3fbSopenharmony_ci
169d722e3fbSopenharmony_ci	if (dev->info.family_id < AMDGPU_FAMILY_AI) {
170d722e3fbSopenharmony_ci		for (i = 0; i < (int)dev->info.num_shader_engines; i++) {
171d722e3fbSopenharmony_ci			unsigned instance = (i << AMDGPU_INFO_MMR_SE_INDEX_SHIFT) |
172d722e3fbSopenharmony_ci					    (AMDGPU_INFO_MMR_SH_INDEX_MASK <<
173d722e3fbSopenharmony_ci					     AMDGPU_INFO_MMR_SH_INDEX_SHIFT);
174d722e3fbSopenharmony_ci
175d722e3fbSopenharmony_ci			r = amdgpu_read_mm_registers(dev, 0x263d, 1, instance, 0,
176d722e3fbSopenharmony_ci						     &dev->info.backend_disable[i]);
177d722e3fbSopenharmony_ci			if (r)
178d722e3fbSopenharmony_ci				return r;
179d722e3fbSopenharmony_ci			/* extract bitfield CC_RB_BACKEND_DISABLE.BACKEND_DISABLE */
180d722e3fbSopenharmony_ci			dev->info.backend_disable[i] =
181d722e3fbSopenharmony_ci				(dev->info.backend_disable[i] >> 16) & 0xff;
182d722e3fbSopenharmony_ci
183d722e3fbSopenharmony_ci			r = amdgpu_read_mm_registers(dev, 0xa0d4, 1, instance, 0,
184d722e3fbSopenharmony_ci						     &dev->info.pa_sc_raster_cfg[i]);
185d722e3fbSopenharmony_ci			if (r)
186d722e3fbSopenharmony_ci				return r;
187d722e3fbSopenharmony_ci
188d722e3fbSopenharmony_ci			if (dev->info.family_id >= AMDGPU_FAMILY_CI) {
189d722e3fbSopenharmony_ci				r = amdgpu_read_mm_registers(dev, 0xa0d5, 1, instance, 0,
190d722e3fbSopenharmony_ci						     &dev->info.pa_sc_raster_cfg1[i]);
191d722e3fbSopenharmony_ci				if (r)
192d722e3fbSopenharmony_ci					return r;
193d722e3fbSopenharmony_ci			}
194d722e3fbSopenharmony_ci		}
195d722e3fbSopenharmony_ci	}
196d722e3fbSopenharmony_ci
197d722e3fbSopenharmony_ci	r = amdgpu_read_mm_registers(dev, 0x263e, 1, 0xffffffff, 0,
198d722e3fbSopenharmony_ci					     &dev->info.gb_addr_cfg);
199d722e3fbSopenharmony_ci	if (r)
200d722e3fbSopenharmony_ci		return r;
201d722e3fbSopenharmony_ci
202d722e3fbSopenharmony_ci	if (dev->info.family_id < AMDGPU_FAMILY_AI) {
203d722e3fbSopenharmony_ci		r = amdgpu_read_mm_registers(dev, 0x2644, 32, 0xffffffff, 0,
204d722e3fbSopenharmony_ci					     dev->info.gb_tile_mode);
205d722e3fbSopenharmony_ci		if (r)
206d722e3fbSopenharmony_ci			return r;
207d722e3fbSopenharmony_ci
208d722e3fbSopenharmony_ci		if (dev->info.family_id >= AMDGPU_FAMILY_CI) {
209d722e3fbSopenharmony_ci			r = amdgpu_read_mm_registers(dev, 0x2664, 16, 0xffffffff, 0,
210d722e3fbSopenharmony_ci						     dev->info.gb_macro_tile_mode);
211d722e3fbSopenharmony_ci			if (r)
212d722e3fbSopenharmony_ci				return r;
213d722e3fbSopenharmony_ci		}
214d722e3fbSopenharmony_ci
215d722e3fbSopenharmony_ci		r = amdgpu_read_mm_registers(dev, 0x9d8, 1, 0xffffffff, 0,
216d722e3fbSopenharmony_ci					     &dev->info.mc_arb_ramcfg);
217d722e3fbSopenharmony_ci		if (r)
218d722e3fbSopenharmony_ci			return r;
219d722e3fbSopenharmony_ci	}
220d722e3fbSopenharmony_ci
221d722e3fbSopenharmony_ci	dev->info.cu_active_number = dev->dev_info.cu_active_number;
222d722e3fbSopenharmony_ci	dev->info.cu_ao_mask = dev->dev_info.cu_ao_mask;
223d722e3fbSopenharmony_ci	memcpy(&dev->info.cu_bitmap[0][0], &dev->dev_info.cu_bitmap[0][0], sizeof(dev->info.cu_bitmap));
224d722e3fbSopenharmony_ci
225d722e3fbSopenharmony_ci	/* TODO: info->max_quad_shader_pipes is not set */
226d722e3fbSopenharmony_ci	/* TODO: info->avail_quad_shader_pipes is not set */
227d722e3fbSopenharmony_ci	/* TODO: info->cache_entries_per_quad_pipe is not set */
228d722e3fbSopenharmony_ci	return 0;
229d722e3fbSopenharmony_ci}
230d722e3fbSopenharmony_ci
231d722e3fbSopenharmony_cidrm_public int amdgpu_query_gpu_info(amdgpu_device_handle dev,
232d722e3fbSopenharmony_ci				     struct amdgpu_gpu_info *info)
233d722e3fbSopenharmony_ci{
234d722e3fbSopenharmony_ci	if (!dev || !info)
235d722e3fbSopenharmony_ci		return -EINVAL;
236d722e3fbSopenharmony_ci
237d722e3fbSopenharmony_ci	/* Get ASIC info*/
238d722e3fbSopenharmony_ci	*info = dev->info;
239d722e3fbSopenharmony_ci
240d722e3fbSopenharmony_ci	return 0;
241d722e3fbSopenharmony_ci}
242d722e3fbSopenharmony_ci
243d722e3fbSopenharmony_cidrm_public int amdgpu_query_heap_info(amdgpu_device_handle dev,
244d722e3fbSopenharmony_ci				      uint32_t heap,
245d722e3fbSopenharmony_ci				      uint32_t flags,
246d722e3fbSopenharmony_ci				      struct amdgpu_heap_info *info)
247d722e3fbSopenharmony_ci{
248d722e3fbSopenharmony_ci	struct drm_amdgpu_info_vram_gtt vram_gtt_info = {};
249d722e3fbSopenharmony_ci	int r;
250d722e3fbSopenharmony_ci
251d722e3fbSopenharmony_ci	r = amdgpu_query_info(dev, AMDGPU_INFO_VRAM_GTT,
252d722e3fbSopenharmony_ci			      sizeof(vram_gtt_info), &vram_gtt_info);
253d722e3fbSopenharmony_ci	if (r)
254d722e3fbSopenharmony_ci		return r;
255d722e3fbSopenharmony_ci
256d722e3fbSopenharmony_ci	/* Get heap information */
257d722e3fbSopenharmony_ci	switch (heap) {
258d722e3fbSopenharmony_ci	case AMDGPU_GEM_DOMAIN_VRAM:
259d722e3fbSopenharmony_ci		/* query visible only vram heap */
260d722e3fbSopenharmony_ci		if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED)
261d722e3fbSopenharmony_ci			info->heap_size = vram_gtt_info.vram_cpu_accessible_size;
262d722e3fbSopenharmony_ci		else /* query total vram heap */
263d722e3fbSopenharmony_ci			info->heap_size = vram_gtt_info.vram_size;
264d722e3fbSopenharmony_ci
265d722e3fbSopenharmony_ci		info->max_allocation = vram_gtt_info.vram_cpu_accessible_size;
266d722e3fbSopenharmony_ci
267d722e3fbSopenharmony_ci		if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED)
268d722e3fbSopenharmony_ci			r = amdgpu_query_info(dev, AMDGPU_INFO_VIS_VRAM_USAGE,
269d722e3fbSopenharmony_ci					      sizeof(info->heap_usage),
270d722e3fbSopenharmony_ci					      &info->heap_usage);
271d722e3fbSopenharmony_ci		else
272d722e3fbSopenharmony_ci			r = amdgpu_query_info(dev, AMDGPU_INFO_VRAM_USAGE,
273d722e3fbSopenharmony_ci					      sizeof(info->heap_usage),
274d722e3fbSopenharmony_ci					      &info->heap_usage);
275d722e3fbSopenharmony_ci		if (r)
276d722e3fbSopenharmony_ci			return r;
277d722e3fbSopenharmony_ci		break;
278d722e3fbSopenharmony_ci	case AMDGPU_GEM_DOMAIN_GTT:
279d722e3fbSopenharmony_ci		info->heap_size = vram_gtt_info.gtt_size;
280d722e3fbSopenharmony_ci		info->max_allocation = vram_gtt_info.vram_cpu_accessible_size;
281d722e3fbSopenharmony_ci
282d722e3fbSopenharmony_ci		r = amdgpu_query_info(dev, AMDGPU_INFO_GTT_USAGE,
283d722e3fbSopenharmony_ci				      sizeof(info->heap_usage),
284d722e3fbSopenharmony_ci				      &info->heap_usage);
285d722e3fbSopenharmony_ci		if (r)
286d722e3fbSopenharmony_ci			return r;
287d722e3fbSopenharmony_ci		break;
288d722e3fbSopenharmony_ci	default:
289d722e3fbSopenharmony_ci		return -EINVAL;
290d722e3fbSopenharmony_ci	}
291d722e3fbSopenharmony_ci
292d722e3fbSopenharmony_ci	return 0;
293d722e3fbSopenharmony_ci}
294d722e3fbSopenharmony_ci
295d722e3fbSopenharmony_cidrm_public int amdgpu_query_gds_info(amdgpu_device_handle dev,
296d722e3fbSopenharmony_ci				     struct amdgpu_gds_resource_info *gds_info)
297d722e3fbSopenharmony_ci{
298d722e3fbSopenharmony_ci	struct drm_amdgpu_info_gds gds_config = {};
299d722e3fbSopenharmony_ci        int r;
300d722e3fbSopenharmony_ci
301d722e3fbSopenharmony_ci	if (!gds_info)
302d722e3fbSopenharmony_ci		return -EINVAL;
303d722e3fbSopenharmony_ci
304d722e3fbSopenharmony_ci        r = amdgpu_query_info(dev, AMDGPU_INFO_GDS_CONFIG,
305d722e3fbSopenharmony_ci                              sizeof(gds_config), &gds_config);
306d722e3fbSopenharmony_ci        if (r)
307d722e3fbSopenharmony_ci                return r;
308d722e3fbSopenharmony_ci
309d722e3fbSopenharmony_ci	gds_info->gds_gfx_partition_size = gds_config.gds_gfx_partition_size;
310d722e3fbSopenharmony_ci	gds_info->compute_partition_size = gds_config.compute_partition_size;
311d722e3fbSopenharmony_ci	gds_info->gds_total_size = gds_config.gds_total_size;
312d722e3fbSopenharmony_ci	gds_info->gws_per_gfx_partition = gds_config.gws_per_gfx_partition;
313d722e3fbSopenharmony_ci	gds_info->gws_per_compute_partition = gds_config.gws_per_compute_partition;
314d722e3fbSopenharmony_ci	gds_info->oa_per_gfx_partition = gds_config.oa_per_gfx_partition;
315d722e3fbSopenharmony_ci	gds_info->oa_per_compute_partition = gds_config.oa_per_compute_partition;
316d722e3fbSopenharmony_ci
317d722e3fbSopenharmony_ci	return 0;
318d722e3fbSopenharmony_ci}
319d722e3fbSopenharmony_ci
320d722e3fbSopenharmony_cidrm_public int amdgpu_query_sensor_info(amdgpu_device_handle dev, unsigned sensor_type,
321d722e3fbSopenharmony_ci					unsigned size, void *value)
322d722e3fbSopenharmony_ci{
323d722e3fbSopenharmony_ci	struct drm_amdgpu_info request;
324d722e3fbSopenharmony_ci
325d722e3fbSopenharmony_ci	memset(&request, 0, sizeof(request));
326d722e3fbSopenharmony_ci	request.return_pointer = (uintptr_t)value;
327d722e3fbSopenharmony_ci	request.return_size = size;
328d722e3fbSopenharmony_ci	request.query = AMDGPU_INFO_SENSOR;
329d722e3fbSopenharmony_ci	request.sensor_info.type = sensor_type;
330d722e3fbSopenharmony_ci
331d722e3fbSopenharmony_ci	return drmCommandWrite(dev->fd, DRM_AMDGPU_INFO, &request,
332d722e3fbSopenharmony_ci			       sizeof(struct drm_amdgpu_info));
333d722e3fbSopenharmony_ci}
334d722e3fbSopenharmony_ci
335d722e3fbSopenharmony_cidrm_public int amdgpu_query_video_caps_info(amdgpu_device_handle dev, unsigned cap_type,
336d722e3fbSopenharmony_ci                                            unsigned size, void *value)
337d722e3fbSopenharmony_ci{
338d722e3fbSopenharmony_ci	struct drm_amdgpu_info request;
339d722e3fbSopenharmony_ci
340d722e3fbSopenharmony_ci	memset(&request, 0, sizeof(request));
341d722e3fbSopenharmony_ci	request.return_pointer = (uintptr_t)value;
342d722e3fbSopenharmony_ci	request.return_size = size;
343d722e3fbSopenharmony_ci	request.query = AMDGPU_INFO_VIDEO_CAPS;
344d722e3fbSopenharmony_ci	request.sensor_info.type = cap_type;
345d722e3fbSopenharmony_ci
346d722e3fbSopenharmony_ci	return drmCommandWrite(dev->fd, DRM_AMDGPU_INFO, &request,
347d722e3fbSopenharmony_ci			       sizeof(struct drm_amdgpu_info));
348d722e3fbSopenharmony_ci}
349