Skip to content

Commit 38f07ad

Browse files
committed
GPU (Linux): fix building with old kernel headers
1 parent 7ae7ff8 commit 38f07ad

File tree

3 files changed

+128
-1387
lines changed

3 files changed

+128
-1387
lines changed

src/detection/gpu/gpu_linux.c

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@
1717
#endif
1818

1919
#ifdef FF_HAVE_DRM
20-
#include <i915_drm.h>
21-
#include "xe_drm.h"
20+
#include "intel_drm.h"
2221
#include <fcntl.h>
2322
#include <sys/ioctl.h>
2423
#endif
@@ -241,15 +240,9 @@ static void pciDetectIntelSpecific(FFGPUResult* gpu, FFstrbuf* pciDir, FFstrbuf*
241240
if (!drmKey) return;
242241

243242
if (ffStrbufEqualS(&gpu->driver, "xe"))
244-
{
245243
ffStrbufAppendS(pciDir, "/tile0/gt0/freq0/max_freq");
246-
}
247244
else
248-
{
249-
ffStrbufAppendC(pciDir, '/');
250-
ffStrbufAppendS(pciDir, drmKey);
251-
ffStrbufAppendS(pciDir, "/gt_max_freq_mhz");
252-
}
245+
ffStrbufAppendF(pciDir, "/drm/%s/gt_max_freq_mhz", drmKey);
253246
if (ffReadFileBuffer(pciDir->chars, buffer))
254247
gpu->frequency = (uint32_t) ffStrbufToUInt(buffer, 0);
255248
}
@@ -455,7 +448,7 @@ static const char* detectPci(const FFGPUOptions* options, FFlist* gpus, FFstrbuf
455448
gpu->frequency = FF_GPU_FREQUENCY_UNSET;
456449

457450
char drmKeyBuffer[8];
458-
if (options->driverSpecific && !drmKey)
451+
if (!drmKey)
459452
{
460453
ffStrbufAppendS(deviceDir, "/drm");
461454
FF_AUTO_CLOSE_DIR DIR* dirp = opendir(deviceDir->chars);

src/detection/gpu/intel_drm.h

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
#pragma once
2+
3+
/* SPDX-License-Identifier: MIT */
4+
#include <drm.h>
5+
6+
// xe_drm.h
7+
8+
/*
9+
* Copyright © 2023 Intel Corporation
10+
*/
11+
12+
#define DRM_XE_DEVICE_QUERY 0x00
13+
14+
#define DRM_IOCTL_XE_DEVICE_QUERY DRM_IOWR(DRM_COMMAND_BASE + DRM_XE_DEVICE_QUERY, struct drm_xe_device_query)
15+
16+
enum drm_xe_memory_class {
17+
DRM_XE_MEM_REGION_CLASS_SYSMEM = 0,
18+
DRM_XE_MEM_REGION_CLASS_VRAM
19+
};
20+
21+
struct drm_xe_mem_region {
22+
__u16 mem_class;
23+
__u16 instance;
24+
__u32 min_page_size;
25+
__u64 total_size;
26+
__u64 used;
27+
__u64 cpu_visible_size;
28+
__u64 cpu_visible_used;
29+
__u64 reserved[6];
30+
};
31+
32+
struct drm_xe_query_mem_regions {
33+
__u32 num_mem_regions;
34+
__u32 pad;
35+
struct drm_xe_mem_region mem_regions[];
36+
};
37+
38+
struct drm_xe_query_topology_mask {
39+
__u16 gt_id;
40+
41+
#define DRM_XE_TOPO_DSS_GEOMETRY 1
42+
#define DRM_XE_TOPO_DSS_COMPUTE 2
43+
#define DRM_XE_TOPO_EU_PER_DSS 4
44+
__u16 type;
45+
__u32 num_bytes;
46+
__u8 mask[];
47+
};
48+
49+
struct drm_xe_device_query {
50+
__u64 extensions;
51+
52+
#define DRM_XE_DEVICE_QUERY_MEM_REGIONS 1
53+
#define DRM_XE_DEVICE_QUERY_GT_TOPOLOGY 5
54+
__u32 query;
55+
__u32 size;
56+
__u64 data;
57+
__u64 reserved[2];
58+
};
59+
60+
// i915_drm.h
61+
62+
/*
63+
* Copyright 2003 Tungsten Graphics, Inc., Cedar Park, Texas.
64+
* All Rights Reserved.
65+
*/
66+
67+
#define DRM_IOCTL_I915_GETPARAM DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_GETPARAM, drm_i915_getparam_t)
68+
69+
struct drm_i915_getparam {
70+
__s32 param;
71+
int *value;
72+
};
73+
typedef struct drm_i915_getparam drm_i915_getparam_t;
74+
75+
#define DRM_I915_GETPARAM 0x06
76+
#define DRM_I915_QUERY 0x39
77+
#define DRM_I915_QUERY_MEMORY_REGIONS 4
78+
#define DRM_IOCTL_I915_QUERY DRM_IOWR(DRM_COMMAND_BASE + DRM_I915_QUERY, struct drm_i915_query)
79+
#define I915_PARAM_EU_TOTAL 34
80+
81+
struct drm_i915_query_item {
82+
__u64 query_id;
83+
#define DRM_I915_QUERY_MEMORY_REGIONS 4
84+
85+
__s32 length;
86+
__u32 flags;
87+
__u64 data_ptr;
88+
};
89+
90+
struct drm_i915_query {
91+
__u32 num_items;
92+
__u32 flags;
93+
__u64 items_ptr;
94+
};
95+
96+
enum drm_i915_gem_memory_class {
97+
I915_MEMORY_CLASS_SYSTEM = 0,
98+
I915_MEMORY_CLASS_DEVICE,
99+
};
100+
101+
struct drm_i915_gem_memory_class_instance {
102+
__u16 memory_class;
103+
__u16 memory_instance;
104+
};
105+
106+
struct drm_i915_memory_region_info {
107+
struct drm_i915_gem_memory_class_instance region;
108+
__u32 rsvd0;
109+
__u64 probed_size;
110+
__u64 unallocated_size;
111+
112+
union {
113+
__u64 rsvd1[8];
114+
struct {
115+
__u64 probed_cpu_visible_size;
116+
__u64 unallocated_cpu_visible_size;
117+
};
118+
};
119+
};
120+
121+
struct drm_i915_query_memory_regions {
122+
__u32 num_regions;
123+
__u32 rsvd[3];
124+
struct drm_i915_memory_region_info regions[];
125+
};

0 commit comments

Comments
 (0)