[PATCH libdrm v8] amdgpu: move asic id table to a separate file
Alex Deucher
alexdeucher at gmail.com
Tue Jun 13 14:31:32 UTC 2017
On Tue, Jun 13, 2017 at 5:45 AM, Michel Dänzer <michel at daenzer.net> wrote:
> From: Xiaojie Yuan <Xiaojie.Yuan at amd.com>
>
> v2: fix an off by one error and leading white spaces
> v3: use thread safe strtok_r(); initialize len before calling getline();
> change printf() to drmMsg(); add initial amdgpu.ids
> v4: integrate some recent internal changes, including format changes
> v5: fix line number for empty/commented lines; realloc to save memory;
> indentation changes
> v6: remove a line error
> v7: [Michel Dänzer]
> * Move amdgpu.ids to new data directory
> * Remove placeholder entries from amdgpu.ids
> * Set libdrmdatadir variable in configure.ac instead of Makefile.am
> [Emil Velikov]
> * Use isblank() instead of open-coding it [Emil Velikov]
> * Don't leak asic_id_table memory if realloc fails [Emil Velikov]
> * Check and bump table_max_size at the beginning of the while loop [Emil
> Velikov]
> * Initialize table_max_size to the number of entries in data/amdgpu.ids
> v8: [Michel Dänzer]
> * Make sure amdgpu_asic_id.c gets rebuilt when amdgpu.ids changes
>
> Reviewed-by: Alex Deucher <alexander.deucher at amd.com> # v7
Reviewed-by: Alex Deucher <alexander.deucher at amd.com>
Alex
> Signed-off-by: Samuel Li <Samuel.Li at amd.com>
> Signed-off-by: Michel Dänzer <michel.daenzer at amd.com>
> ---
> Makefile.am | 1 +
> amdgpu/Makefile.am | 7 ++
> amdgpu/Makefile.sources | 2 +-
> amdgpu/amdgpu_asic_id.c | 219 +++++++++++++++++++++++++++++++++++++++++++++++
> amdgpu/amdgpu_asic_id.h | 165 -----------------------------------
> amdgpu/amdgpu_device.c | 28 ++++--
> amdgpu/amdgpu_internal.h | 10 +++
> configure.ac | 4 +
> data/Makefile.am | 23 +++++
> data/amdgpu.ids | 159 ++++++++++++++++++++++++++++++++++
> 10 files changed, 445 insertions(+), 173 deletions(-)
> create mode 100644 amdgpu/amdgpu_asic_id.c
> delete mode 100644 amdgpu/amdgpu_asic_id.h
> create mode 100644 data/Makefile.am
> create mode 100644 data/amdgpu.ids
>
> diff --git a/Makefile.am b/Makefile.am
> index dfb8fcdb..7b86214e 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -109,6 +109,7 @@ SUBDIRS = \
> $(TEGRA_SUBDIR) \
> $(VC4_SUBDIR) \
> $(ETNAVIV_SUBDIR) \
> + data \
> tests \
> $(MAN_SUBDIR)
>
> diff --git a/amdgpu/Makefile.am b/amdgpu/Makefile.am
> index cf7bc1ba..66f6f676 100644
> --- a/amdgpu/Makefile.am
> +++ b/amdgpu/Makefile.am
> @@ -30,12 +30,19 @@ AM_CFLAGS = \
> $(PTHREADSTUBS_CFLAGS) \
> -I$(top_srcdir)/include/drm
>
> +libdrmdatadir = @libdrmdatadir@
> +ASIC_ID_TABLE_NUM_ENTRIES := $(shell egrep -ci '^[0-9a-f]{4},.*[0-9a-f]+,' \
> + $(top_srcdir)/data/amdgpu.ids)
> +AM_CPPFLAGS = -DAMDGPU_ASIC_ID_TABLE=\"${libdrmdatadir}/amdgpu.ids\" \
> + -DAMDGPU_ASIC_ID_TABLE_NUM_ENTRIES=$(ASIC_ID_TABLE_NUM_ENTRIES)
> +
> libdrm_amdgpu_la_LTLIBRARIES = libdrm_amdgpu.la
> libdrm_amdgpu_ladir = $(libdir)
> libdrm_amdgpu_la_LDFLAGS = -version-number 1:0:0 -no-undefined
> libdrm_amdgpu_la_LIBADD = ../libdrm.la @PTHREADSTUBS_LIBS@
>
> libdrm_amdgpu_la_SOURCES = $(LIBDRM_AMDGPU_FILES)
> +amdgpu_asic_id.lo: $(top_srcdir)/data/amdgpu.ids
>
> libdrm_amdgpuincludedir = ${includedir}/libdrm
> libdrm_amdgpuinclude_HEADERS = $(LIBDRM_AMDGPU_H_FILES)
> diff --git a/amdgpu/Makefile.sources b/amdgpu/Makefile.sources
> index 487b9e0a..bc3abaa6 100644
> --- a/amdgpu/Makefile.sources
> +++ b/amdgpu/Makefile.sources
> @@ -1,5 +1,5 @@
> LIBDRM_AMDGPU_FILES := \
> - amdgpu_asic_id.h \
> + amdgpu_asic_id.c \
> amdgpu_bo.c \
> amdgpu_cs.c \
> amdgpu_device.c \
> diff --git a/amdgpu/amdgpu_asic_id.c b/amdgpu/amdgpu_asic_id.c
> new file mode 100644
> index 00000000..3a88896b
> --- /dev/null
> +++ b/amdgpu/amdgpu_asic_id.c
> @@ -0,0 +1,219 @@
> +/*
> + * Copyright © 2017 Advanced Micro Devices, Inc.
> + * All Rights Reserved.
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice shall be included in
> + * all copies or substantial portions of the Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
> + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> + * OTHER DEALINGS IN THE SOFTWARE.
> + *
> + */
> +
> +#ifdef HAVE_CONFIG_H
> +#include "config.h"
> +#endif
> +
> +#include <ctype.h>
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <stdint.h>
> +#include <string.h>
> +#include <unistd.h>
> +#include <errno.h>
> +
> +#include "xf86drm.h"
> +#include "amdgpu_drm.h"
> +#include "amdgpu_internal.h"
> +
> +static int parse_one_line(const char *line, struct amdgpu_asic_id *id)
> +{
> + char *buf, *saveptr;
> + char *s_did;
> + char *s_rid;
> + char *s_name;
> + char *endptr;
> + int r = 0;
> +
> + buf = strdup(line);
> + if (!buf)
> + return -ENOMEM;
> +
> + /* ignore empty line and commented line */
> + if (strlen(line) == 0 || line[0] == '#') {
> + r = -EAGAIN;
> + goto out;
> + }
> +
> + /* device id */
> + s_did = strtok_r(buf, ",", &saveptr);
> + if (!s_did) {
> + r = -EINVAL;
> + goto out;
> + }
> +
> + id->did = strtol(s_did, &endptr, 16);
> + if (*endptr) {
> + r = -EINVAL;
> + goto out;
> + }
> +
> + /* revision id */
> + s_rid = strtok_r(NULL, ",", &saveptr);
> + if (!s_rid) {
> + r = -EINVAL;
> + goto out;
> + }
> +
> + id->rid = strtol(s_rid, &endptr, 16);
> + if (*endptr) {
> + r = -EINVAL;
> + goto out;
> + }
> +
> + /* marketing name */
> + s_name = strtok_r(NULL, ",", &saveptr);
> + if (!s_name) {
> + r = -EINVAL;
> + goto out;
> + }
> + /* trim leading whitespaces or tabs */
> + while (isblank(*s_name))
> + s_name++;
> + if (strlen(s_name) == 0) {
> + r = -EINVAL;
> + goto out;
> + }
> +
> + id->marketing_name = strdup(s_name);
> + if (id->marketing_name == NULL) {
> + r = -EINVAL;
> + goto out;
> + }
> +
> +out:
> + free(buf);
> +
> + return r;
> +}
> +
> +int amdgpu_parse_asic_ids(struct amdgpu_asic_id **p_asic_id_table)
> +{
> + struct amdgpu_asic_id *asic_id_table;
> + struct amdgpu_asic_id *id;
> + FILE *fp;
> + char *line = NULL;
> + size_t len = 0;
> + ssize_t n;
> + int line_num = 1;
> + size_t table_size = 0;
> + size_t table_max_size = AMDGPU_ASIC_ID_TABLE_NUM_ENTRIES;
> + int r = 0;
> +
> + fp = fopen(AMDGPU_ASIC_ID_TABLE, "r");
> + if (!fp) {
> + fprintf(stderr, "%s: %s\n", AMDGPU_ASIC_ID_TABLE,
> + strerror(errno));
> + return -EINVAL;
> + }
> +
> + asic_id_table = calloc(table_max_size + 1,
> + sizeof(struct amdgpu_asic_id));
> + if (!asic_id_table) {
> + r = -ENOMEM;
> + goto close;
> + }
> +
> + /* 1st valid line is file version */
> + while ((n = getline(&line, &len, fp)) != -1) {
> + /* trim trailing newline */
> + if (line[n - 1] == '\n')
> + line[n - 1] = '\0';
> +
> + /* ignore empty line and commented line */
> + if (strlen(line) == 0 || line[0] == '#') {
> + line_num++;
> + continue;
> + }
> +
> + drmMsg("%s version: %s\n", AMDGPU_ASIC_ID_TABLE, line);
> + break;
> + }
> +
> + while ((n = getline(&line, &len, fp)) != -1) {
> + if (table_size > table_max_size) {
> + /* double table size */
> + table_max_size *= 2;
> + id = realloc(asic_id_table, (table_max_size + 1) *
> + sizeof(struct amdgpu_asic_id));
> + if (!id) {
> + r = -ENOMEM;
> + goto free;
> + }
> + asic_id_table = id;
> + }
> +
> + id = asic_id_table + table_size;
> +
> + /* trim trailing newline */
> + if (line[n - 1] == '\n')
> + line[n - 1] = '\0';
> +
> + r = parse_one_line(line, id);
> + if (r) {
> + if (r == -EAGAIN) {
> + line_num++;
> + continue;
> + }
> + fprintf(stderr, "Invalid format: %s: line %d: %s\n",
> + AMDGPU_ASIC_ID_TABLE, line_num, line);
> + goto free;
> + }
> +
> + line_num++;
> + table_size++;
> + }
> +
> + /* end of table */
> + id = asic_id_table + table_size;
> + memset(id, 0, sizeof(struct amdgpu_asic_id));
> +
> + if (table_size != table_max_size) {
> + id = realloc(asic_id_table, (table_size + 1) *
> + sizeof(struct amdgpu_asic_id));
> + if (!id)
> + r = -ENOMEM;
> + else
> + asic_id_table = id;
> + }
> +
> +free:
> + free(line);
> +
> + if (r && asic_id_table) {
> + while (table_size--) {
> + id = asic_id_table + table_size;
> + free(id->marketing_name);
> + }
> + free(asic_id_table);
> + asic_id_table = NULL;
> + }
> +close:
> + fclose(fp);
> +
> + *p_asic_id_table = asic_id_table;
> +
> + return r;
> +}
> diff --git a/amdgpu/amdgpu_asic_id.h b/amdgpu/amdgpu_asic_id.h
> deleted file mode 100644
> index 3e7d736b..00000000
> --- a/amdgpu/amdgpu_asic_id.h
> +++ /dev/null
> @@ -1,165 +0,0 @@
> -/*
> - * Copyright © 2016 Advanced Micro Devices, Inc.
> - * All Rights Reserved.
> - *
> - * Permission is hereby granted, free of charge, to any person obtaining a
> - * copy of this software and associated documentation files (the "Software"),
> - * to deal in the Software without restriction, including without limitation
> - * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> - * and/or sell copies of the Software, and to permit persons to whom the
> - * Software is furnished to do so, subject to the following conditions:
> - *
> - * The above copyright notice and this permission notice shall be included in
> - * all copies or substantial portions of the Software.
> - *
> - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> - * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
> - * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> - * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
> - * OTHER DEALINGS IN THE SOFTWARE.
> - *
> - */
> -
> -#ifndef __AMDGPU_ASIC_ID_H__
> -#define __AMDGPU_ASIC_ID_H__
> -
> -static struct amdgpu_asic_id_table_t {
> - uint32_t did;
> - uint32_t rid;
> - const char *marketing_name;
> -} const amdgpu_asic_id_table [] = {
> - {0x6600, 0x0, "AMD Radeon HD 8600/8700M"},
> - {0x6600, 0x81, "AMD Radeon R7 M370"},
> - {0x6601, 0x0, "AMD Radeon HD 8500M/8700M"},
> - {0x6604, 0x0, "AMD Radeon R7 M265 Series"},
> - {0x6604, 0x81, "AMD Radeon R7 M350"},
> - {0x6605, 0x0, "AMD Radeon R7 M260 Series"},
> - {0x6605, 0x81, "AMD Radeon R7 M340"},
> - {0x6606, 0x0, "AMD Radeon HD 8790M"},
> - {0x6607, 0x0, "AMD Radeon HD8530M"},
> - {0x6608, 0x0, "AMD FirePro W2100"},
> - {0x6610, 0x0, "AMD Radeon HD 8600 Series"},
> - {0x6610, 0x81, "AMD Radeon R7 350"},
> - {0x6610, 0x83, "AMD Radeon R5 340"},
> - {0x6611, 0x0, "AMD Radeon HD 8500 Series"},
> - {0x6613, 0x0, "AMD Radeon HD 8500 series"},
> - {0x6617, 0xC7, "AMD Radeon R7 240 Series"},
> - {0x6640, 0x0, "AMD Radeon HD 8950"},
> - {0x6640, 0x80, "AMD Radeon R9 M380"},
> - {0x6646, 0x0, "AMD Radeon R9 M280X"},
> - {0x6646, 0x80, "AMD Radeon R9 M470X"},
> - {0x6647, 0x0, "AMD Radeon R9 M270X"},
> - {0x6647, 0x80, "AMD Radeon R9 M380"},
> - {0x6649, 0x0, "AMD FirePro W5100"},
> - {0x6658, 0x0, "AMD Radeon R7 200 Series"},
> - {0x665C, 0x0, "AMD Radeon HD 7700 Series"},
> - {0x665D, 0x0, "AMD Radeon R7 200 Series"},
> - {0x665F, 0x81, "AMD Radeon R7 300 Series"},
> - {0x6660, 0x0, "AMD Radeon HD 8600M Series"},
> - {0x6660, 0x81, "AMD Radeon R5 M335"},
> - {0x6660, 0x83, "AMD Radeon R5 M330"},
> - {0x6663, 0x0, "AMD Radeon HD 8500M Series"},
> - {0x6663, 0x83, "AMD Radeon R5 M320"},
> - {0x6664, 0x0, "AMD Radeon R5 M200 Series"},
> - {0x6665, 0x0, "AMD Radeon R5 M200 Series"},
> - {0x6665, 0x83, "AMD Radeon R5 M320"},
> - {0x6667, 0x0, "AMD Radeon R5 M200 Series"},
> - {0x666F, 0x0, "AMD Radeon HD 8500M"},
> - {0x6780, 0x0, "ATI FirePro V (FireGL V) Graphics Adapter"},
> - {0x678A, 0x0, "ATI FirePro V (FireGL V) Graphics Adapter"},
> - {0x6798, 0x0, "AMD Radeon HD 7900 Series"},
> - {0x679A, 0x0, "AMD Radeon HD 7900 Series"},
> - {0x679B, 0x0, "AMD Radeon HD 7900 Series"},
> - {0x679E, 0x0, "AMD Radeon HD 7800 Series"},
> - {0x67A0, 0x0, "HAWAII XTGL (67A0)"},
> - {0x67A1, 0x0, "HAWAII GL40 (67A1)"},
> - {0x67B0, 0x0, "AMD Radeon R9 200 Series"},
> - {0x67B0, 0x80, "AMD Radeon R9 390 Series"},
> - {0x67B1, 0x0, "AMD Radeon R9 200 Series"},
> - {0x67B1, 0x80, "AMD Radeon R9 390 Series"},
> - {0x67B9, 0x0, "AMD Radeon R9 200 Series"},
> - {0x67DF, 0xC4, "AMD Radeon RX 480 Graphics"},
> - {0x67DF, 0xC5, "AMD Radeon RX 470 Graphics"},
> - {0x67DF, 0xC7, "AMD Radeon RX 480 Graphics"},
> - {0x67DF, 0xCF, "AMD Radeon RX 470 Graphics"},
> - {0x67C4, 0x00, "AMD Radeon Pro WX 7100 Graphics"},
> - {0x67C7, 0x00, "AMD Radeon Pro WX 5100 Graphics"},
> - {0x67C0, 0x00, "AMD Radeon Pro WX 7100 Graphics"},
> - {0x67E0, 0x00, "AMD Radeon Pro WX Series Graphics"},
> - {0x67E3, 0x00, "AMD Radeon Pro WX 4100 Graphics"},
> - {0x67E8, 0x00, "AMD Radeon Pro WX Series Graphics"},
> - {0x67E8, 0x01, "AMD Radeon Pro WX Series Graphics"},
> - {0x67E8, 0x80, "AMD Radeon E9260 Graphics"},
> - {0x67EB, 0x00, "AMD Radeon Pro WX Series Graphics"},
> - {0x67EF, 0xC0, "AMD Radeon RX Graphics"},
> - {0x67EF, 0xC1, "AMD Radeon RX 460 Graphics"},
> - {0x67EF, 0xC5, "AMD Radeon RX 460 Graphics"},
> - {0x67EF, 0xC7, "AMD Radeon RX Graphics"},
> - {0x67EF, 0xCF, "AMD Radeon RX 460 Graphics"},
> - {0x67EF, 0xEF, "AMD Radeon RX Graphics"},
> - {0x67FF, 0xC0, "AMD Radeon RX Graphics"},
> - {0x67FF, 0xC1, "AMD Radeon RX Graphics"},
> - {0x6800, 0x0, "AMD Radeon HD 7970M"},
> - {0x6801, 0x0, "AMD Radeon(TM) HD8970M"},
> - {0x6808, 0x0, "ATI FirePro V(FireGL V) Graphics Adapter"},
> - {0x6809, 0x0, "ATI FirePro V(FireGL V) Graphics Adapter"},
> - {0x6810, 0x0, "AMD Radeon(TM) HD 8800 Series"},
> - {0x6810, 0x81, "AMD Radeon R7 370 Series"},
> - {0x6811, 0x0, "AMD Radeon(TM) HD8800 Series"},
> - {0x6811, 0x81, "AMD Radeon R7 300 Series"},
> - {0x6818, 0x0, "AMD Radeon HD 7800 Series"},
> - {0x6819, 0x0, "AMD Radeon HD 7800 Series"},
> - {0x6820, 0x0, "AMD Radeon HD 8800M Series"},
> - {0x6820, 0x81, "AMD Radeon R9 M375"},
> - {0x6820, 0x83, "AMD Radeon R9 M375X"},
> - {0x6821, 0x0, "AMD Radeon HD 8800M Series"},
> - {0x6821, 0x87, "AMD Radeon R7 M380"},
> - {0x6821, 0x83, "AMD Radeon R9 M370X"},
> - {0x6822, 0x0, "AMD Radeon E8860"},
> - {0x6823, 0x0, "AMD Radeon HD 8800M Series"},
> - {0x6825, 0x0, "AMD Radeon HD 7800M Series"},
> - {0x6827, 0x0, "AMD Radeon HD 7800M Series"},
> - {0x6828, 0x0, "ATI FirePro V(FireGL V) Graphics Adapter"},
> - {0x682B, 0x0, "AMD Radeon HD 8800M Series"},
> - {0x682B, 0x87, "AMD Radeon R9 M360"},
> - {0x682C, 0x0, "AMD FirePro W4100"},
> - {0x682D, 0x0, "AMD Radeon HD 7700M Series"},
> - {0x682F, 0x0, "AMD Radeon HD 7700M Series"},
> - {0x6835, 0x0, "AMD Radeon R7 Series / HD 9000 Series"},
> - {0x6837, 0x0, "AMD Radeon HD7700 Series"},
> - {0x683D, 0x0, "AMD Radeon HD 7700 Series"},
> - {0x683F, 0x0, "AMD Radeon HD 7700 Series"},
> - {0x6900, 0x0, "AMD Radeon R7 M260"},
> - {0x6900, 0x81, "AMD Radeon R7 M360"},
> - {0x6900, 0x83, "AMD Radeon R7 M340"},
> - {0x6901, 0x0, "AMD Radeon R5 M255"},
> - {0x6907, 0x0, "AMD Radeon R5 M255"},
> - {0x6907, 0x87, "AMD Radeon R5 M315"},
> - {0x6920, 0x0, "AMD Radeon R9 M395X"},
> - {0x6920, 0x1, "AMD Radeon R9 M390X"},
> - {0x6921, 0x0, "AMD Radeon R9 M295X"},
> - {0x6929, 0x0, "AMD FirePro S7150"},
> - {0x692B, 0x0, "AMD FirePro W7100"},
> - {0x6938, 0x0, "AMD Radeon R9 200 Series"},
> - {0x6938, 0xF0, "AMD Radeon R9 200 Series"},
> - {0x6938, 0xF1, "AMD Radeon R9 380 Series"},
> - {0x6939, 0xF0, "AMD Radeon R9 200 Series"},
> - {0x6939, 0x0, "AMD Radeon R9 200 Series"},
> - {0x6939, 0xF1, "AMD Radeon R9 380 Series"},
> - {0x7300, 0xC8, "AMD Radeon R9 Fury Series"},
> - {0x7300, 0xCB, "AMD Radeon R9 Fury Series"},
> - {0x7300, 0xCA, "AMD Radeon R9 Fury Series"},
> - {0x9874, 0xC4, "AMD Radeon R7 Graphics"},
> - {0x9874, 0xC5, "AMD Radeon R6 Graphics"},
> - {0x9874, 0xC6, "AMD Radeon R6 Graphics"},
> - {0x9874, 0xC7, "AMD Radeon R5 Graphics"},
> - {0x9874, 0x81, "AMD Radeon R6 Graphics"},
> - {0x9874, 0x87, "AMD Radeon R5 Graphics"},
> - {0x9874, 0x85, "AMD Radeon R6 Graphics"},
> - {0x9874, 0x84, "AMD Radeon R7 Graphics"},
> -
> - {0x0000, 0x0, "\0"},
> -};
> -#endif
> diff --git a/amdgpu/amdgpu_device.c b/amdgpu/amdgpu_device.c
> index f473d2da..9a238d97 100644
> --- a/amdgpu/amdgpu_device.c
> +++ b/amdgpu/amdgpu_device.c
> @@ -44,7 +44,6 @@
> #include "amdgpu_internal.h"
> #include "util_hash_table.h"
> #include "util_math.h"
> -#include "amdgpu_asic_id.h"
>
> #define PTR_TO_UINT(x) ((unsigned)((intptr_t)(x)))
> #define UINT_TO_PTR(x) ((void *)((intptr_t)(x)))
> @@ -131,6 +130,7 @@ static int amdgpu_get_auth(int fd, int *auth)
>
> static void amdgpu_device_free_internal(amdgpu_device_handle dev)
> {
> + const struct amdgpu_asic_id *id;
> amdgpu_vamgr_deinit(&dev->vamgr_32);
> amdgpu_vamgr_deinit(&dev->vamgr);
> util_hash_table_destroy(dev->bo_flink_names);
> @@ -140,6 +140,12 @@ static void amdgpu_device_free_internal(amdgpu_device_handle dev)
> close(dev->fd);
> if ((dev->flink_fd >= 0) && (dev->fd != dev->flink_fd))
> close(dev->flink_fd);
> + if (dev->asic_ids) {
> + for (id = dev->asic_ids; id->did; id++)
> + free(id->marketing_name);
> +
> + free(dev->asic_ids);
> + }
> free(dev);
> }
>
> @@ -267,6 +273,12 @@ int amdgpu_device_initialize(int fd,
> amdgpu_vamgr_init(&dev->vamgr_32, start, max,
> dev->dev_info.virtual_address_alignment);
>
> + r = amdgpu_parse_asic_ids(&dev->asic_ids);
> + if (r) {
> + fprintf(stderr, "%s: Cannot parse ASIC IDs, 0x%x.",
> + __func__, r);
> + }
> +
> *major_version = dev->major_version;
> *minor_version = dev->minor_version;
> *device_handle = dev;
> @@ -297,13 +309,15 @@ int amdgpu_device_deinitialize(amdgpu_device_handle dev)
>
> const char *amdgpu_get_marketing_name(amdgpu_device_handle dev)
> {
> - const struct amdgpu_asic_id_table_t *t = amdgpu_asic_id_table;
> + const struct amdgpu_asic_id *id;
> +
> + if (!dev->asic_ids)
> + return NULL;
>
> - while (t->did) {
> - if ((t->did == dev->info.asic_id) &&
> - (t->rid == dev->info.pci_rev_id))
> - return t->marketing_name;
> - t++;
> + for (id = dev->asic_ids; id->did; id++) {
> + if ((id->did == dev->info.asic_id) &&
> + (id->rid == dev->info.pci_rev_id))
> + return id->marketing_name;
> }
>
> return NULL;
> diff --git a/amdgpu/amdgpu_internal.h b/amdgpu/amdgpu_internal.h
> index cf119a53..e68246bf 100644
> --- a/amdgpu/amdgpu_internal.h
> +++ b/amdgpu/amdgpu_internal.h
> @@ -69,6 +69,12 @@ struct amdgpu_va {
> struct amdgpu_bo_va_mgr *vamgr;
> };
>
> +struct amdgpu_asic_id {
> + uint32_t did;
> + uint32_t rid;
> + char *marketing_name;
> +};
> +
> struct amdgpu_device {
> atomic_t refcount;
> int fd;
> @@ -76,6 +82,8 @@ struct amdgpu_device {
> unsigned major_version;
> unsigned minor_version;
>
> + /** Lookup table of asic device id, revision id and marketing name */
> + struct amdgpu_asic_id *asic_ids;
> /** List of buffer handles. Protected by bo_table_mutex. */
> struct util_hash_table *bo_handles;
> /** List of buffer GEM flink names. Protected by bo_table_mutex. */
> @@ -149,6 +157,8 @@ amdgpu_vamgr_find_va(struct amdgpu_bo_va_mgr *mgr, uint64_t size,
> drm_private void
> amdgpu_vamgr_free_va(struct amdgpu_bo_va_mgr *mgr, uint64_t va, uint64_t size);
>
> +drm_private int amdgpu_parse_asic_ids(struct amdgpu_asic_id **asic_ids);
> +
> drm_private int amdgpu_query_gpu_info_init(amdgpu_device_handle dev);
>
> drm_private uint64_t amdgpu_cs_calculate_timeout(uint64_t timeout);
> diff --git a/configure.ac b/configure.ac
> index 1cfb8c27..aa9529cd 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -84,6 +84,9 @@ fi
>
> pkgconfigdir=${libdir}/pkgconfig
> AC_SUBST(pkgconfigdir)
> +libdrmdatadir=${datadir}/libdrm
> +AC_SUBST(libdrmdatadir)
> +
> AC_ARG_ENABLE([udev],
> [AS_HELP_STRING([--enable-udev],
> [Enable support for using udev instead of mknod (default: disabled)])],
> @@ -527,6 +530,7 @@ fi
> AC_SUBST(WARN_CFLAGS)
> AC_CONFIG_FILES([
> Makefile
> + data/Makefile
> libkms/Makefile
> libkms/libkms.pc
> intel/Makefile
> diff --git a/data/Makefile.am b/data/Makefile.am
> new file mode 100644
> index 00000000..eba915dd
> --- /dev/null
> +++ b/data/Makefile.am
> @@ -0,0 +1,23 @@
> +# Copyright © 2017 Advanced Micro Devices, Inc.
> +# All Rights Reserved.
> +#
> +# Permission is hereby granted, free of charge, to any person obtaining a
> +# copy of this software and associated documentation files (the "Software"),
> +# to deal in the Software without restriction, including without limitation
> +# on the rights to use, copy, modify, merge, publish, distribute, sub
> +# license, and/or sell copies of the Software, and to permit persons to whom
> +# the Software is furnished to do so, subject to the following conditions:
> +#
> +# The above copyright notice and this permission notice (including the next
> +# paragraph) shall be included in all copies or substantial portions of the
> +# Software.
> +#
> +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> +# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
> +# ADAM JACKSON BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
> +# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> +# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> +
> +libdrmdatadir = @libdrmdatadir@
> +dist_libdrmdata_DATA = amdgpu.ids
> diff --git a/data/amdgpu.ids b/data/amdgpu.ids
> new file mode 100644
> index 00000000..0b98c3c3
> --- /dev/null
> +++ b/data/amdgpu.ids
> @@ -0,0 +1,159 @@
> +# List of AMDGPU IDs
> +#
> +# Syntax:
> +# device_id, revision_id, product_name <-- single tab after comma
> +
> +1.0.0
> +6600, 0, AMD Radeon HD 8600/8700M
> +6600, 81, AMD Radeon (TM) R7 M370
> +6601, 0, AMD Radeon (TM) HD 8500M/8700M
> +6604, 0, AMD Radeon R7 M265 Series
> +6604, 81, AMD Radeon (TM) R7 M350
> +6605, 0, AMD Radeon R7 M260 Series
> +6605, 81, AMD Radeon (TM) R7 M340
> +6606, 0, AMD Radeon HD 8790M
> +6607, 0, AMD Radeon (TM) HD8530M
> +6608, 0, AMD FirePro W2100
> +6610, 0, AMD Radeon HD 8600 Series
> +6610, 81, AMD Radeon (TM) R7 350
> +6610, 83, AMD Radeon (TM) R5 340
> +6611, 0, AMD Radeon HD 8500 Series
> +6613, 0, AMD Radeon HD 8500 series
> +6617, C7, AMD Radeon R7 240 Series
> +6640, 0, AMD Radeon HD 8950
> +6640, 80, AMD Radeon (TM) R9 M380
> +6646, 0, AMD Radeon R9 M280X
> +6646, 80, AMD Radeon (TM) R9 M470X
> +6647, 0, AMD Radeon R9 M270X
> +6647, 80, AMD Radeon (TM) R9 M380
> +6649, 0, AMD FirePro W5100
> +6658, 0, AMD Radeon R7 200 Series
> +665C, 0, AMD Radeon HD 7700 Series
> +665D, 0, AMD Radeon R7 200 Series
> +665F, 81, AMD Radeon (TM) R7 300 Series
> +6660, 0, AMD Radeon HD 8600M Series
> +6660, 81, AMD Radeon (TM) R5 M335
> +6660, 83, AMD Radeon (TM) R5 M330
> +6663, 0, AMD Radeon HD 8500M Series
> +6663, 83, AMD Radeon (TM) R5 M320
> +6664, 0, AMD Radeon R5 M200 Series
> +6665, 0, AMD Radeon R5 M200 Series
> +6665, 83, AMD Radeon (TM) R5 M320
> +6667, 0, AMD Radeon R5 M200 Series
> +666F, 0, AMD Radeon HD 8500M
> +6780, 0, ATI FirePro V (FireGL V) Graphics Adapter
> +678A, 0, ATI FirePro V (FireGL V) Graphics Adapter
> +6798, 0, AMD Radeon HD 7900 Series
> +679A, 0, AMD Radeon HD 7900 Series
> +679B, 0, AMD Radeon HD 7900 Series
> +679E, 0, AMD Radeon HD 7800 Series
> +67A0, 0, AMD Radeon FirePro W9100
> +67A1, 0, AMD Radeon FirePro W8100
> +67B0, 0, AMD Radeon R9 200 Series
> +67B0, 80, AMD Radeon (TM) R9 390 Series
> +67B1, 0, AMD Radeon R9 200 Series
> +67B1, 80, AMD Radeon (TM) R9 390 Series
> +67B9, 0, AMD Radeon R9 200 Series
> +67DF, C1, Radeon RX 580 Series
> +67DF, C2, Radeon RX 570 Series
> +67DF, C3, Radeon RX 580 Series
> +67DF, C4, AMD Radeon (TM) RX 480 Graphics
> +67DF, C5, AMD Radeon (TM) RX 470 Graphics
> +67DF, C6, Radeon RX 570 Series
> +67DF, C7, AMD Radeon (TM) RX 480 Graphics
> +67DF, CF, AMD Radeon (TM) RX 470 Graphics
> +67DF, E3, Radeon RX Series
> +67DF, E7, Radeon RX 580 Series
> +67DF, EF, Radeon RX 570 Series
> +67C2, 01, AMD Radeon (TM) Pro V7350x2
> +67C2, 02, AMD Radeon (TM) Pro V7300X
> +67C4, 00, AMD Radeon (TM) Pro WX 7100 Graphics
> +67C7, 00, AMD Radeon (TM) Pro WX 5100 Graphics
> +67C0, 00, AMD Radeon (TM) Pro WX 7100 Graphics
> +67D0, 01, AMD Radeon (TM) Pro V7350x2
> +67D0, 02, AMD Radeon (TM) Pro V7300X
> +67E0, 00, AMD Radeon (TM) Pro WX Series
> +67E3, 00, AMD Radeon (TM) Pro WX 4100
> +67E8, 00, AMD Radeon (TM) Pro WX Series
> +67E8, 01, AMD Radeon (TM) Pro WX Series
> +67E8, 80, AMD Radeon (TM) E9260 Graphics
> +67EB, 00, AMD Radeon (TM) Pro V5300X
> +67EF, C0, AMD Radeon (TM) RX Graphics
> +67EF, C1, AMD Radeon (TM) RX 460 Graphics
> +67EF, C3, Radeon RX Series
> +67EF, C5, AMD Radeon (TM) RX 460 Graphics
> +67EF, C7, AMD Radeon (TM) RX Graphics
> +67EF, CF, AMD Radeon (TM) RX 460 Graphics
> +67EF, E1, Radeon RX Series
> +67EF, E3, Radeon RX Series
> +67EF, E7, Radeon RX Series
> +67EF, EF, AMD Radeon (TM) RX Graphics
> +67EF, FF, Radeon RX Series
> +67FF, C0, AMD Radeon (TM) RX Graphics
> +67FF, C1, AMD Radeon (TM) RX Graphics
> +67FF, FF, Radeon RX 550 Series
> +6800, 0, AMD Radeon HD 7970M
> +6801, 0, AMD Radeon(TM) HD8970M
> +6808, 0, ATI FirePro V(FireGL V) Graphics Adapter
> +6809, 0, ATI FirePro V(FireGL V) Graphics Adapter
> +6810, 0, AMD Radeon(TM) HD 8800 Series
> +6810, 81, AMD Radeon (TM) R7 370 Series
> +6811, 0, AMD Radeon(TM) HD8800 Series
> +6811, 81, AMD Radeon (TM) R7 300 Series
> +6818, 0, AMD Radeon HD 7800 Series
> +6819, 0, AMD Radeon HD 7800 Series
> +6820, 0, AMD Radeon HD 8800M Series
> +6820, 81, AMD Radeon (TM) R9 M375
> +6820, 83, AMD Radeon (TM) R9 M375X
> +6821, 0, AMD Radeon HD 8800M Series
> +6821, 87, AMD Radeon (TM) R7 M380
> +6821, 83, AMD Radeon R9 (TM) M370X
> +6822, 0, AMD Radeon E8860
> +6823, 0, AMD Radeon HD 8800M Series
> +6825, 0, AMD Radeon HD 7800M Series
> +6827, 0, AMD Radeon HD 7800M Series
> +6828, 0, ATI FirePro V(FireGL V) Graphics Adapter
> +682B, 0, AMD Radeon HD 8800M Series
> +682B, 87, AMD Radeon (TM) R9 M360
> +682C, 0, AMD FirePro W4100
> +682D, 0, AMD Radeon HD 7700M Series
> +682F, 0, AMD Radeon HD 7700M Series
> +6835, 0, AMD Radeon R7 Series / HD 9000 Series
> +6837, 0, AMD Radeon HD7700 Series
> +683D, 0, AMD Radeon HD 7700 Series
> +683F, 0, AMD Radeon HD 7700 Series
> +6900, 0, AMD Radeon R7 M260
> +6900, 81, AMD Radeon (TM) R7 M360
> +6900, 83, AMD Radeon (TM) R7 M340
> +6901, 0, AMD Radeon R5 M255
> +6907, 0, AMD Radeon R5 M255
> +6907, 87, AMD Radeon (TM) R5 M315
> +6920, 0, AMD RADEON R9 M395X
> +6920, 1, AMD RADEON R9 M390X
> +6921, 0, AMD Radeon R9 M295X
> +6929, 0, AMD FirePro S7150
> +692B, 0, AMD FirePro W7100
> +6938, 0, AMD Radeon R9 200 Series
> +6938, F0, AMD Radeon R9 200 Series
> +6938, F1, AMD Radeon (TM) R9 380 Series
> +6939, F0, AMD Radeon R9 200 Series
> +6939, 0, AMD Radeon R9 200 Series
> +6939, F1, AMD Radeon (TM) R9 380 Series
> +6985, 00, AMD Radeon Pro WX3100
> +6995, 00, AMD Radeon Pro WX2100
> +699F, C0, Radeon 500 Series
> +699F, C3, Radeon 500 Series
> +699F, C7, Radeon RX 550 Series
> +7300, C1, AMD FirePro (TM) S9300 x2
> +7300, C8, AMD Radeon (TM) R9 Fury Series
> +7300, C9, Radeon (TM) Pro Duo
> +7300, CB, AMD Radeon (TM) R9 Fury Series
> +7300, CA, AMD Radeon (TM) R9 Fury Series
> +9874, C4, AMD Radeon R7 Graphics
> +9874, C5, AMD Radeon R6 Graphics
> +9874, C6, AMD Radeon R6 Graphics
> +9874, C7, AMD Radeon R5 Graphics
> +9874, 81, AMD Radeon R6 Graphics
> +9874, 87, AMD Radeon R5 Graphics
> +9874, 85, AMD Radeon R6 Graphics
> +9874, 84, AMD Radeon R7 Graphics
> --
> 2.11.0
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
More information about the dri-devel
mailing list