[PATCH libdrm v3 1/1] amdgpu: move asic id table to a separate file

Alex Deucher alexdeucher at gmail.com
Fri May 26 19:27:01 UTC 2017


On Fri, May 26, 2017 at 3:23 PM, Samuel Li <Samuel.Li at amd.com> 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
>
> Change-Id: I12216da14910f5e2b0970bc1fafc2a20b0ef1ba9
> Reviewed-by: Junwei Zhang <Jerry.Zhang at amd.com>
> Signed-off-by: Samuel Li <Samuel.Li at amd.com>
> ---
>  Makefile.am              |   3 +
>  amdgpu/Makefile.am       |   2 +
>  amdgpu/Makefile.sources  |   2 +-
>  amdgpu/amdgpu_asic_id.c  | 199 +++++++++++++++++++++++++++++++++++++++++++++++
>  amdgpu/amdgpu_asic_id.h  | 165 ---------------------------------------
>  amdgpu/amdgpu_device.c   |  28 +++++--
>  amdgpu/amdgpu_internal.h |  10 +++
>  include/drm/amdgpu.ids   | 154 ++++++++++++++++++++++++++++++++++++
>  8 files changed, 390 insertions(+), 173 deletions(-)
>  create mode 100644 amdgpu/amdgpu_asic_id.c
>  delete mode 100644 amdgpu/amdgpu_asic_id.h
>  create mode 100644 include/drm/amdgpu.ids
>
> diff --git a/Makefile.am b/Makefile.am
> index dfb8fcd..8de8f6c 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -45,6 +45,9 @@ AM_DISTCHECK_CONFIGURE_FLAGS = \
>
>  pkgconfigdir = @pkgconfigdir@
>  pkgconfig_DATA = libdrm.pc
> +libdrmdatadir = $(datadir)/libdrm
> +dist_libdrmdata_DATA = include/drm/amdgpu.ids
> +export libdrmdatadir
>
>  if HAVE_LIBKMS
>  LIBKMS_SUBDIR = libkms
> diff --git a/amdgpu/Makefile.am b/amdgpu/Makefile.am
> index cf7bc1b..da71c1c 100644
> --- a/amdgpu/Makefile.am
> +++ b/amdgpu/Makefile.am
> @@ -30,6 +30,8 @@ AM_CFLAGS = \
>         $(PTHREADSTUBS_CFLAGS) \
>         -I$(top_srcdir)/include/drm
>
> +AM_CPPFLAGS = -DAMDGPU_ASIC_ID_TABLE=\"${libdrmdatadir}/amdgpu.ids\"
> +
>  libdrm_amdgpu_la_LTLIBRARIES = libdrm_amdgpu.la
>  libdrm_amdgpu_ladir = $(libdir)
>  libdrm_amdgpu_la_LDFLAGS = -version-number 1:0:0 -no-undefined
> diff --git a/amdgpu/Makefile.sources b/amdgpu/Makefile.sources
> index 487b9e0..bc3abaa 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 0000000..5b415e3
> --- /dev/null
> +++ b/amdgpu/amdgpu_asic_id.c
> @@ -0,0 +1,199 @@
> +/*
> + * 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 <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;
> +       }
> +
> +       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 = 256;
> +       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, sizeof(struct amdgpu_asic_id));
> +       if (!asic_id_table) {
> +               r = -ENOMEM;
> +               goto close;
> +       }
> +
> +       /* 1st line is file version */
> +       if ((n = getline(&line, &len, fp)) != -1) {
> +               /* trim trailing newline */
> +               if (line[n - 1] == '\n')
> +                       line[n - 1] = '\0';
> +               drmMsg("%s version: %s\n", AMDGPU_ASIC_ID_TABLE, line);
> +       } else {
> +               goto free;
> +       }
> +
> +       while ((n = getline(&line, &len, fp)) != -1) {
> +               id = asic_id_table + table_size;
> +
> +               /* trim trailing newline */
> +               if (line[n - 1] == '\n')
> +                       line[n - 1] = '\0';
> +
> +               /*
> +                * parse one line, its format looks like:
> +                * 6617,C7,AMD Radeon R7 240 Series
> +                */
> +               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++;
> +
> +               if (table_size >= table_max_size) {
> +                       /* double table size */
> +                       table_max_size *= 2;
> +                       asic_id_table = realloc(asic_id_table, table_max_size *
> +                                       sizeof(struct amdgpu_asic_id));
> +                       if (!asic_id_table) {
> +                               r = -ENOMEM;
> +                               goto free;
> +                       }
> +               }
> +       }
> +
> +       /* end of table */
> +       id = asic_id_table + table_size;
> +       memset(id, 0, sizeof(struct amdgpu_asic_id));
> +
> +free:
> +       free(line);
> +
> +       if (r && asic_id_table) {
> +               while (table_size--) {
> +                       id = asic_id_table + table_size;
> +                       if (id->marketing_name !=  NULL)
> +                               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 3e7d736..0000000
> --- 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 f473d2d..9d08744 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,13 @@ 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++) {
> +                       if (id->marketing_name !=  NULL)
> +                               free(id->marketing_name);
> +               }
> +               free(dev->asic_ids);
> +       }
>         free(dev);
>  }
>
> @@ -267,6 +274,11 @@ 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: Can not 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 cf119a5..e68246b 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/include/drm/amdgpu.ids b/include/drm/amdgpu.ids
> new file mode 100644
> index 0000000..1b00b60
> --- /dev/null
> +++ b/include/drm/amdgpu.ids
> @@ -0,0 +1,154 @@
> +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,0,67C2:00

Please drop any entries that don't have any strings yet.


> +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,0,67D0:00

Here.


> +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,E0,67EF:E0

Here.

> +67EF,E1,Radeon RX Series
> +67EF,E3,Radeon RX Series
> +67EF,E5,67EF:E5
> +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,CF,67FF:CF
> +67FF,EF,67FF:EF

Here.

> +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
> +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.7.4
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


More information about the amd-gfx mailing list