From 74cf1f0b88fa486947bf6b6894485f4e2434fdf5 Mon Sep 17 00:00:00 2001 From: Graham Sider Date: Fri, 16 Jul 2021 16:58:27 -0400 Subject: [PATCH] libhsakmt: Use gfx version conditions in pmc_table.c get_block_properties() switch statement now based on major GFX version instead of asic_family. Addition for NPI bringup only needed on major GFX revisions unless differing perf_counter_block assignment necessary. Signed-off-by: Graham Sider Change-Id: Ia02676d2a3a8f968b67feeafbab534ef4c01c0dd [ROCm/ROCR-Runtime commit: 0b46d418c38fe10b9ebc45d632b5a7328da88633] --- projects/rocr-runtime/src/pmc_table.c | 58 ++++++++++++--------------- 1 file changed, 25 insertions(+), 33 deletions(-) diff --git a/projects/rocr-runtime/src/pmc_table.c b/projects/rocr-runtime/src/pmc_table.c index 3000b95d32..7b1f9c5eba 100644 --- a/projects/rocr-runtime/src/pmc_table.c +++ b/projects/rocr-runtime/src/pmc_table.c @@ -2088,8 +2088,8 @@ HSAKMT_STATUS get_block_properties(uint32_t node_id, enum perf_block_id block_id, struct perf_counter_block *block) { + uint32_t gfxv = get_gfxv_by_node_id(node_id); uint16_t dev_id = get_device_id_by_node_id(node_id); - enum asic_family_type asic; if (block_id > PERFCOUNTER_BLOCKID__MAX || block_id < PERFCOUNTER_BLOCKID__FIRST) @@ -2100,42 +2100,34 @@ HSAKMT_STATUS get_block_properties(uint32_t node_id, return HSAKMT_STATUS_SUCCESS; } - if (topology_get_asic_family(dev_id, &asic) != HSAKMT_STATUS_SUCCESS) - return HSAKMT_STATUS_INVALID_PARAMETER; - - switch (asic) { - case CHIP_KAVERI: - *block = kaveri_blocks[block_id]; + /* Major GFX Version */ + switch (gfxv >> 16) { + case 7: + if (gfxv == GFX_VERSION_KAVERI) + *block = kaveri_blocks[block_id]; + else + *block = hawaii_blocks[block_id]; break; - case CHIP_HAWAII: - *block = hawaii_blocks[block_id]; + case 8: + if (gfxv == GFX_VERSION_TONGA) + return HSAKMT_STATUS_INVALID_PARAMETER; + else if (gfxv == GFX_VERSION_CARRIZO) + *block = carrizo_blocks[block_id]; + else { + /* + * Fiji/Polaris/VegaM cards are of the same GFXIP Engine Version (8.0.3). + * Only way to differentiate b/t Fiji and Polaris/VegaM is via DID. + */ + if (dev_id == 0x7300 || dev_id == 0x730F) + *block = fiji_blocks[block_id]; + else + *block = polaris_blocks[block_id]; + } break; - case CHIP_CARRIZO: - *block = carrizo_blocks[block_id]; - break; - case CHIP_FIJI: - *block = fiji_blocks[block_id]; - break; - case CHIP_POLARIS10: - case CHIP_POLARIS11: - case CHIP_POLARIS12: - case CHIP_VEGAM: - *block = polaris_blocks[block_id]; - break; - case CHIP_VEGA10: - case CHIP_VEGA12: - case CHIP_VEGA20: - case CHIP_RAVEN: - case CHIP_RENOIR: - case CHIP_ARCTURUS: - case CHIP_ALDEBARAN: + case 9: *block = vega_blocks[block_id]; break; - case CHIP_NAVI10: - case CHIP_NAVI14: - case CHIP_VANGOGH: - case CHIP_YELLOW_CARP: - case CHIP_CYAN_SKILLFISH: + case 10: *block = navi_blocks[block_id]; break; default: