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>
This commit is contained in:
Mario Limonciello (AMD) 2025-10-16 10:01:42 -05:00 committed by Marek Olšák
parent 7518cc4fdd
commit 90656fc8e4

View file

@ -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,17 +125,33 @@ 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);
/* 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';
/* 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;
}