diff --git a/amdgpu-fallback.patch b/amdgpu-fallback.patch new file mode 100644 index 0000000..ea779a4 --- /dev/null +++ b/amdgpu-fallback.patch @@ -0,0 +1,51 @@ +From 871e326ac799ae28ee4d98da9025028050c085cd Mon Sep 17 00:00:00 2001 +From: Mario Limonciello +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 +Signed-off-by: Mario Limonciello +--- + 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 + diff --git a/amdgpu-slice.patch b/amdgpu-slice.patch new file mode 100644 index 0000000..9864ef6 --- /dev/null +++ b/amdgpu-slice.patch @@ -0,0 +1,71 @@ +From 90656fc8e4150fc175ddadb788912674b2c4a705 Mon Sep 17 00:00:00 2001 +From: "Mario Limonciello (AMD)" +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 +Signed-off-by: Mario Limonciello (AMD) +--- + 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 + diff --git a/libdrm.spec b/libdrm.spec index 9734ab8..49e9039 100644 --- a/libdrm.spec +++ b/libdrm.spec @@ -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ä - 2.4.127-2 +- Added amdgpu-slice.patch and amdgpu-fallback.patch + * Mon Oct 20 2025 Mika Penttilä - 2.4.127-1 - Update to 2.4.127 amdgpu-apu.patch: Read model name from /proc/cpuinfo for APUs