Signed-off-by: Sonny Jiang <sonny.ji...@amd.com> --- src/amd/common/ac_gpu_info.c | 72 ++++++++++++++++++++++++++++++++---- 1 file changed, 64 insertions(+), 8 deletions(-)
diff --git a/src/amd/common/ac_gpu_info.c b/src/amd/common/ac_gpu_info.c index 5fb1e26376a..c8bc398319e 100644 --- a/src/amd/common/ac_gpu_info.c +++ b/src/amd/common/ac_gpu_info.c @@ -106,6 +106,7 @@ bool ac_query_gpu_info(int fd, void *dev_p, int r, i, j; amdgpu_device_handle dev = dev_p; drmDevicePtr devinfo; + drmVersionPtr version; /* Get PCI info. */ r = drmGetDevice2(fd, 0, &devinfo); @@ -304,18 +305,73 @@ bool ac_query_gpu_info(int fd, void *dev_p, info->pci_id = amdinfo->asic_id; /* TODO: is this correct? */ info->vce_harvest_config = amdinfo->vce_harvest_config; - switch (info->pci_id) { + static struct ac_chip_mapping { + const char *kernel_name; + enum radeon_family family; + const char *mesa_name; + } table[] = { + {"TAHITI", CHIP_TAHITI, "TAHITI"}, + {"PITCAIRN", CHIP_PITCAIRN, "PITCAIRN"}, + {"VERDE", CHIP_VERDE, "VERDE"}, + {"OLAND", CHIP_OLAND, "OLAND"}, + {"HAINAN", CHIP_HAINAN, "HAINAN"}, + {"BONAIRE", CHIP_BONAIRE, "BONAIRE"}, + {"KAVERI", CHIP_KAVERI, "KAVERI"}, + {"KABINI", CHIP_KABINI, "KABINI"}, + {"HAWAII", CHIP_HAWAII, "HAWAII"}, + {"MULLINS", CHIP_KABINI, "KABINI"}, + {"TOPAZ", CHIP_ICELAND, "ICELAND"}, + {"TONGA", CHIP_TONGA, "TONGA"}, + {"FIJI", CHIP_FIJI, "FIJI"}, + {"CARRIZO", CHIP_CARRIZO, "CARRIZO"}, + {"STONEY", CHIP_STONEY, "STONEY"}, + {"POLARIS10", CHIP_POLARIS10, "POLARIS10"}, + {"POLARIS11", CHIP_POLARIS11, "POLARIS11"}, + {"POLARIS12", CHIP_POLARIS12, "POLARIS12"}, + {"VEGAM", CHIP_VEGAM, "VEGAM"}, + {"VEGA10", CHIP_VEGA10, "VEGA10"}, + {"VEGA12", CHIP_VEGA12, "VEGA12"}, + {"VEGA20", CHIP_VEGA20, "VEGA20"}, + {"RAVEN", CHIP_RAVEN, "RAVEN"}, + {"ARCTURUS", CHIP_ARCTURUS, "ARCTURUS"}, + {"RENOIR", CHIP_RENOIR, "RENOIR"}, + {"NAVI10", CHIP_NAVI10, "NAVI10"}, + {"NAVI14", CHIP_NAVI14, "NAVI14"}, + {"NAVI12", CHIP_NAVI12, "NAVI12"} + }; + + version = drmGetVersion(fd); + if (!version) { + fprintf(stderr, "amdgpu: drmGetVersion failed.\n"); + return false; + } + + if (version->desc_len && version->desc) { + for (unsigned i = 0; i < ARRAY_SIZE(table); i++) { + if (strcmp(version->desc, table[i].kernel_name) == 0) { + info->family = table[i].family; + info->name = table[i].mesa_name; + break; + } + } + } + + drmFreeVersion(version); + + if (!info->name) { + switch (info->pci_id) { #define CHIPSET(pci_id, cfamily) \ - case pci_id: \ - info->family = CHIP_##cfamily; \ - info->name = #cfamily; \ - break; + case pci_id: \ + info->family = CHIP_##cfamily; \ + info->name = #cfamily; \ + break; #include "pci_ids/radeonsi_pci_ids.h" #undef CHIPSET - default: - fprintf(stderr, "amdgpu: Invalid PCI ID.\n"); - return false; + default: + fprintf(stderr, "amdgpu: Invalid PCI ID.\n"); + return false; + } } /* Raven2 uses the same PCI IDs as Raven1, but different revision IDs. */ -- 2.17.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev