Added amdgpu-slice.patch and amdgpu-fallback.patch to fix APU identification

This commit is contained in:
Mika Penttilä 2025-10-22 08:52:04 +03:00
parent b224549118
commit 0164a6588e
3 changed files with 128 additions and 1 deletions

51
amdgpu-fallback.patch Normal file
View File

@ -0,0 +1,51 @@
From 871e326ac799ae28ee4d98da9025028050c085cd Mon Sep 17 00:00:00 2001
From: Mario Limonciello <mario.limonciello@amd.com>
Date: Thu, 16 Oct 2025 10:53:01 -0500
Subject: [PATCH] amdgpu: Only read /proc/cpuinfo as a fallback
Some older Vega APUs don't provide a very useful string. If we have
a string in amdgpu.ids use that, but fallback to /proc/cpuinfo.
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Mario Limonciello <mario.limonciello@amd.com>
---
amdgpu/amdgpu_asic_id.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/amdgpu/amdgpu_asic_id.c b/amdgpu/amdgpu_asic_id.c
index 2eeca0ec..2e52666c 100644
--- a/amdgpu/amdgpu_asic_id.c
+++ b/amdgpu/amdgpu_asic_id.c
@@ -169,17 +169,11 @@ void amdgpu_parse_asic_ids(struct amdgpu_device *dev)
int line_num = 1;
int r = 0;
- if (dev->info.ids_flags & AMDGPU_IDS_FLAGS_FUSION) {
- amdgpu_parse_proc_cpuinfo(dev);
- if (dev->marketing_name != NULL)
- return;
- }
-
fp = fopen(AMDGPU_ASIC_ID_TABLE, "r");
if (!fp) {
fprintf(stderr, "%s: %s\n", AMDGPU_ASIC_ID_TABLE,
strerror(errno));
- return;
+ goto get_cpu;
}
/* 1st valid line is file version */
@@ -220,4 +214,10 @@ void amdgpu_parse_asic_ids(struct amdgpu_device *dev)
free(line);
fclose(fp);
+
+get_cpu:
+ if (dev->info.ids_flags & AMDGPU_IDS_FLAGS_FUSION &&
+ dev->marketing_name == NULL) {
+ amdgpu_parse_proc_cpuinfo(dev);
+ }
}
--
2.50.0

71
amdgpu-slice.patch Normal file
View File

@ -0,0 +1,71 @@
From 90656fc8e4150fc175ddadb788912674b2c4a705 Mon Sep 17 00:00:00 2001
From: "Mario Limonciello (AMD)" <superm1@kernel.org>
Date: Thu, 16 Oct 2025 10:01:42 -0500
Subject: [PATCH] amdgpu: Slice and dice the string for APUs
The string will generally have a CPU and GPU component, so if both
are found split it up. Make sure that it starts with AMD to be
consistent.
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Mario Limonciello (AMD) <superm1@kernel.org>
---
amdgpu/amdgpu_asic_id.c | 29 +++++++++++++++++++++++------
1 file changed, 23 insertions(+), 6 deletions(-)
diff --git a/amdgpu/amdgpu_asic_id.c b/amdgpu/amdgpu_asic_id.c
index 7bdb2b67..2eeca0ec 100644
--- a/amdgpu/amdgpu_asic_id.c
+++ b/amdgpu/amdgpu_asic_id.c
@@ -107,6 +107,7 @@ out:
static void amdgpu_parse_proc_cpuinfo(struct amdgpu_device *dev)
{
const char *search_key = "model name";
+ const char *radeon_key = "Radeon";
char *line = NULL;
size_t len = 0;
FILE *fp;
@@ -124,18 +125,34 @@ static void amdgpu_parse_proc_cpuinfo(struct amdgpu_device *dev)
if (strncmp(line, search_key, strlen(search_key)))
continue;
- /* get content after colon and strip whitespace */
- value = strtok_r(line, ":", &saveptr);
- value = strtok_r(NULL, ":", &saveptr);
- if (value == NULL)
- continue;
+ /* check for parts that have both CPU and GPU information */
+ value = strstr(line, radeon_key);
+
+ /* get content after the first colon */
+ if (value == NULL) {
+ value = strstr(line, ":");
+ if (value == NULL)
+ continue;
+ value++;
+ }
+
+ /* strip whitespace */
while (*value == ' ' || *value == '\t')
value++;
saveptr = strchr(value, '\n');
if (saveptr)
*saveptr = '\0';
- dev->marketing_name = strdup(value);
+ /* Add AMD to the new string if it's missing from slicing/dicing */
+ if (strncmp(value, "AMD", 3) != 0) {
+ char *tmp = malloc(strlen(value) + 5);
+
+ if (!tmp)
+ break;
+ sprintf(tmp, "AMD %s", value);
+ dev->marketing_name = tmp;
+ } else
+ dev->marketing_name = strdup(value);
break;
}
--
2.50.0

View File

@ -53,7 +53,7 @@ end}
Name: libdrm
Summary: Direct Rendering Manager runtime library
Version: 2.4.%{lib_version}
Release: 1%{?dist}
Release: 2%{?dist}
License: MIT
URL: https://dri.freedesktop.org
@ -88,6 +88,8 @@ Patch1001: libdrm-make-dri-perms-okay.patch
Patch1002: libdrm-2.4.0-no-bc.patch
# use /proc/cpuinfo to identify AMD APU
Patch1003: amdgpu-apu.patch
Patch1004: amdgpu-slice.patch
Patch1005: amdgpu-fallback.patch
%description
Direct Rendering Manager runtime library
@ -285,6 +287,9 @@ cp %{SOURCE1} %{buildroot}%{_docdir}/libdrm
%endif
%changelog
* Wed Oct 22 2025 Mika Penttilä <mpenttil@redhat.com> - 2.4.127-2
- Added amdgpu-slice.patch and amdgpu-fallback.patch
* Mon Oct 20 2025 Mika Penttilä <mpenttil@redhat.com> - 2.4.127-1
- Update to 2.4.127
amdgpu-apu.patch: Read model name from /proc/cpuinfo for APUs