Unify the device ID list

Integrate the supported device ID list distributed in topology, queue, and
pmc into one place: topology.

Change-Id: If035cf8e4a6fc6caff6c94ec627647cfb11c3d79


[ROCm/ROCR-Runtime commit: 4827b09119]
This commit is contained in:
Amber Lin
2017-03-01 16:25:43 -05:00
orang tua 9b6439a5bb
melakukan 4ddf99f4a9
4 mengubah file dengan 135 tambahan dan 201 penghapusan
+16
Melihat File
@@ -62,6 +62,20 @@ extern bool is_dgpu;
#define BITMASK(n) (((n) < sizeof(1ULL) * CHAR_BIT ? (1ULL << (n)) : 0) - 1ULL)
#define ARRAY_LEN(array) (sizeof(array) / sizeof(array[0]))
enum asic_family_type {
CHIP_KAVERI = 0,
CHIP_HAWAII,
CHIP_CARRIZO,
CHIP_TONGA,
CHIP_FIJI,
CHIP_POLARIS10,
CHIP_POLARIS11,
CHIP_VEGA10
};
#define IS_DGPU(chip) (((chip) >= CHIP_TONGA && (chip) <= CHIP_VEGA10) || \
(chip) == CHIP_HAWAII)
#define IS_SOC15(chip) ((chip) >= CHIP_VEGA10)
HSAKMT_STATUS validate_nodeid(uint32_t nodeid, uint32_t *gpu_id);
HSAKMT_STATUS gpuid_to_nodeid(uint32_t gpu_id, uint32_t* node_id);
uint16_t get_device_id_by_node(HSAuint32 node_id);
@@ -74,6 +88,8 @@ HSAKMT_STATUS topology_sysfs_get_node_props(uint32_t node_id, HsaNodeProperties
uint32_t *gpu_id, struct pci_access* pacc);
HSAKMT_STATUS topology_sysfs_get_system_props(HsaSystemProperties *props);
bool topology_is_dgpu(uint16_t device_id);
HSAKMT_STATUS topology_get_asic_family(uint16_t device_id,
enum asic_family_type *asic);
HSAuint32 PageSizeFromFlags(unsigned int pageSizeFlags);
+17 -28
Melihat File
@@ -314,8 +314,8 @@ get_block_properties(uint32_t node_id,
enum perf_block_id block_id,
struct perf_counter_block *block)
{
HSAKMT_STATUS rc = HSAKMT_STATUS_SUCCESS;
uint16_t dev_id = get_device_id_by_node(node_id);
enum asic_family_type asic;
if (block_id > PERFCOUNTER_BLOCKID__MAX ||
block_id < PERFCOUNTER_BLOCKID__FIRST)
@@ -326,42 +326,31 @@ get_block_properties(uint32_t node_id,
return HSAKMT_STATUS_SUCCESS;
}
/* To avoid the long list, we read the 12 most significant digits of DID
* to identify the GPU instead of listing the complete 16 bits. If one
* day 12-bits is not good enough to distinguish the GPU, change the
* code here.
*/
switch(dev_id >> 4) {
case 0x130:
case 0x131:
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];
break;
case 0x987:
*block = carrizo_blocks[block_id];
break;
case 0x730:
*block = fiji_blocks[block_id];
break;
case 0x67A:
case 0x67B:
case CHIP_HAWAII:
*block = hawaii_blocks[block_id];
break;
case 0x67C:
case 0x67D:
case 0x67E:
case 0x67F:
case CHIP_CARRIZO:
*block = carrizo_blocks[block_id];
break;
case CHIP_FIJI:
*block = fiji_blocks[block_id];
break;
case CHIP_POLARIS10:
case CHIP_POLARIS11:
*block = polaris_blocks[block_id];
break;
default:
rc = HSAKMT_STATUS_INVALID_PARAMETER;
return HSAKMT_STATUS_INVALID_PARAMETER;
}
return rc;
return HSAKMT_STATUS_SUCCESS;
}
+16 -101
Melihat File
@@ -41,22 +41,6 @@
#define DOORBELL_SIZE_GFX9 8
#define DOORBELLS_PAGE_SIZE(ds) (1024 * (ds))
enum asic_family_type {
CHIP_KAVERI = 0,
CHIP_HAWAII,
CHIP_CARRIZO,
CHIP_TONGA,
CHIP_FIJI,
CHIP_POLARIS10,
CHIP_POLARIS11,
CHIP_VEGA10
};
#define IS_VI(chip) ((chip) >= CHIP_CARRIZO && (chip) <= CHIP_POLARIS11)
#define IS_DGPU(chip) (((chip) >= CHIP_TONGA && (chip) <= CHIP_VEGA10) || \
(chip) == CHIP_HAWAII)
#define IS_SOC15(chip) ((chip) >= CHIP_VEGA10)
#define WG_CONTEXT_DATA_SIZE_PER_CU_VI 344576
#define WAVES_PER_CU_VI 32
@@ -115,89 +99,23 @@ struct device_info vega10_device_info = {
.doorbell_size = DOORBELL_SIZE_GFX9,
};
static struct device_info *dev_lookup_table[] = {
[CHIP_KAVERI] = &kaveri_device_info,
[CHIP_HAWAII] = &hawaii_device_info,
[CHIP_CARRIZO] = &carrizo_device_info,
[CHIP_TONGA] = &tonga_device_info,
[CHIP_FIJI] = &fiji_device_info,
[CHIP_POLARIS10] = &polaris10_device_info,
[CHIP_POLARIS11] = &polaris11_device_info,
[CHIP_VEGA10] = &vega10_device_info
};
struct device_id
{
uint16_t dev_id;
struct device_info *dev_info;
};
/* TODO: unify this with the device list in topology.c */
struct device_id supported_devices[] = {
{ 0x1304, &kaveri_device_info }, /* Kaveri */
{ 0x1305, &kaveri_device_info }, /* Kaveri */
{ 0x1306, &kaveri_device_info }, /* Kaveri */
{ 0x1307, &kaveri_device_info }, /* Kaveri */
{ 0x1309, &kaveri_device_info }, /* Kaveri */
{ 0x130A, &kaveri_device_info }, /* Kaveri */
{ 0x130B, &kaveri_device_info }, /* Kaveri */
{ 0x130C, &kaveri_device_info }, /* Kaveri */
{ 0x130D, &kaveri_device_info }, /* Kaveri */
{ 0x130E, &kaveri_device_info }, /* Kaveri */
{ 0x130F, &kaveri_device_info }, /* Kaveri */
{ 0x1310, &kaveri_device_info }, /* Kaveri */
{ 0x1311, &kaveri_device_info }, /* Kaveri */
{ 0x1312, &kaveri_device_info }, /* Kaveri */
{ 0x1313, &kaveri_device_info }, /* Kaveri */
{ 0x1315, &kaveri_device_info }, /* Kaveri */
{ 0x1316, &kaveri_device_info }, /* Kaveri */
{ 0x1317, &kaveri_device_info }, /* Kaveri */
{ 0x1318, &kaveri_device_info }, /* Kaveri */
{ 0x131B, &kaveri_device_info }, /* Kaveri */
{ 0x131C, &kaveri_device_info }, /* Kaveri */
{ 0x131D, &kaveri_device_info }, /* Kaveri */
{ 0x67A0, &hawaii_device_info }, /* Hawaii */
{ 0x67A1, &hawaii_device_info }, /* Hawaii */
{ 0x67A2, &hawaii_device_info }, /* Hawaii */
{ 0x67A8, &hawaii_device_info }, /* Hawaii */
{ 0x67A9, &hawaii_device_info }, /* Hawaii */
{ 0x67AA, &hawaii_device_info }, /* Hawaii */
{ 0x67B0, &hawaii_device_info }, /* Hawaii */
{ 0x67B1, &hawaii_device_info }, /* Hawaii */
{ 0x67B8, &hawaii_device_info }, /* Hawaii */
{ 0x67B9, &hawaii_device_info }, /* Hawaii */
{ 0x67BA, &hawaii_device_info }, /* Hawaii */
{ 0x67BE, &hawaii_device_info }, /* Hawaii */
{ 0x9870, &carrizo_device_info }, /* Carrizo */
{ 0x9874, &carrizo_device_info }, /* Carrizo */
{ 0x9875, &carrizo_device_info }, /* Carrizo */
{ 0x9876, &carrizo_device_info }, /* Carrizo */
{ 0x9877, &carrizo_device_info }, /* Carrizo */
{ 0x6920, &tonga_device_info },
{ 0x6921, &tonga_device_info },
{ 0x6928, &tonga_device_info },
{ 0x6929, &tonga_device_info },
{ 0x692B, &tonga_device_info },
{ 0x692F, &tonga_device_info },
{ 0x6930, &tonga_device_info },
{ 0x6938, &tonga_device_info },
{ 0x6939, &tonga_device_info },
{ 0x7300, &fiji_device_info },
{ 0x730F, &fiji_device_info },
{ 0x67C0, &polaris10_device_info },
{ 0x67C1, &polaris10_device_info },
{ 0x67C2, &polaris10_device_info },
{ 0x67C4, &polaris10_device_info },
{ 0x67C7, &polaris10_device_info },
{ 0x67C8, &polaris10_device_info },
{ 0x67C9, &polaris10_device_info },
{ 0x67CA, &polaris10_device_info },
{ 0x67CC, &polaris10_device_info },
{ 0x67CF, &polaris10_device_info },
{ 0x67DF, &polaris10_device_info },
{ 0x67E0, &polaris11_device_info },
{ 0x67E1, &polaris11_device_info },
{ 0x67E3, &polaris11_device_info },
{ 0x67E7, &polaris11_device_info },
{ 0x67E8, &polaris11_device_info },
{ 0x67E9, &polaris11_device_info },
{ 0x67EB, &polaris11_device_info },
{ 0x67EF, &polaris11_device_info },
{ 0x67FF, &polaris11_device_info },
{ 0x6860, &vega10_device_info },
{ 0x687F, &vega10_device_info },
{ 0, NULL }
};
struct queue
{
uint32_t queue_id;
@@ -246,15 +164,12 @@ HSAKMT_STATUS init_process_doorbells(unsigned int NumNodes)
static struct device_info *get_device_info_by_dev_id(uint16_t dev_id)
{
int i = 0;
while (supported_devices[i].dev_id != 0) {
if (supported_devices[i].dev_id == dev_id) {
return supported_devices[i].dev_info;
}
i++;
}
enum asic_family_type asic;
return NULL;
if (topology_get_asic_family(dev_id, &asic) != HSAKMT_STATUS_SUCCESS)
return NULL;
return dev_lookup_table[asic];
}
static void get_doorbell_map_info(uint16_t dev_id,
+86 -72
Melihat File
@@ -83,87 +83,88 @@ static struct hsa_gfxip_table {
unsigned char stepping; // GFXIP Stepping info
unsigned char is_dgpu; // Predicate for dGPU devices
const char* amd_name; // CALName of the device
enum asic_family_type asic_family;
} gfxip_lookup_table[] = {
/* Kaveri Family */
{ 0x1304, 7, 0, 0, 0, "Spectre" },
{ 0x1305, 7, 0, 0, 0, "Spectre" },
{ 0x1306, 7, 0, 0, 0, "Spectre" },
{ 0x1307, 7, 0, 0, 0, "Spectre" },
{ 0x1309, 7, 0, 0, 0, "Spectre" },
{ 0x130A, 7, 0, 0, 0, "Spectre" },
{ 0x130B, 7, 0, 0, 0, "Spectre" },
{ 0x130C, 7, 0, 0, 0, "Spectre" },
{ 0x130D, 7, 0, 0, 0, "Spectre" },
{ 0x130E, 7, 0, 0, 0, "Spectre" },
{ 0x130F, 7, 0, 0, 0, "Spectre" },
{ 0x1310, 7, 0, 0, 0, "Spectre" },
{ 0x1311, 7, 0, 0, 0, "Spectre" },
{ 0x1312, 7, 0, 0, 0, "Spooky" },
{ 0x1313, 7, 0, 0, 0, "Spectre" },
{ 0x1315, 7, 0, 0, 0, "Spectre" },
{ 0x1316, 7, 0, 0, 0, "Spooky" },
{ 0x1317, 7, 0, 0, 0, "Spooky" },
{ 0x1318, 7, 0, 0, 0, "Spectre" },
{ 0x131B, 7, 0, 0, 0, "Spectre" },
{ 0x131C, 7, 0, 0, 0, "Spectre" },
{ 0x131D, 7, 0, 0, 0, "Spectre" },
{ 0x1304, 7, 0, 0, 0, "Spectre", CHIP_KAVERI },
{ 0x1305, 7, 0, 0, 0, "Spectre", CHIP_KAVERI },
{ 0x1306, 7, 0, 0, 0, "Spectre", CHIP_KAVERI },
{ 0x1307, 7, 0, 0, 0, "Spectre", CHIP_KAVERI },
{ 0x1309, 7, 0, 0, 0, "Spectre", CHIP_KAVERI },
{ 0x130A, 7, 0, 0, 0, "Spectre", CHIP_KAVERI },
{ 0x130B, 7, 0, 0, 0, "Spectre", CHIP_KAVERI },
{ 0x130C, 7, 0, 0, 0, "Spectre", CHIP_KAVERI },
{ 0x130D, 7, 0, 0, 0, "Spectre", CHIP_KAVERI },
{ 0x130E, 7, 0, 0, 0, "Spectre", CHIP_KAVERI },
{ 0x130F, 7, 0, 0, 0, "Spectre", CHIP_KAVERI },
{ 0x1310, 7, 0, 0, 0, "Spectre", CHIP_KAVERI },
{ 0x1311, 7, 0, 0, 0, "Spectre", CHIP_KAVERI },
{ 0x1312, 7, 0, 0, 0, "Spooky", CHIP_KAVERI },
{ 0x1313, 7, 0, 0, 0, "Spectre", CHIP_KAVERI },
{ 0x1315, 7, 0, 0, 0, "Spectre", CHIP_KAVERI },
{ 0x1316, 7, 0, 0, 0, "Spooky", CHIP_KAVERI },
{ 0x1317, 7, 0, 0, 0, "Spooky", CHIP_KAVERI },
{ 0x1318, 7, 0, 0, 0, "Spectre", CHIP_KAVERI },
{ 0x131B, 7, 0, 0, 0, "Spectre", CHIP_KAVERI },
{ 0x131C, 7, 0, 0, 0, "Spectre", CHIP_KAVERI },
{ 0x131D, 7, 0, 0, 0, "Spectre", CHIP_KAVERI },
/* Hawaii Family */
{ 0x67A0, 7, 0, 1, 1, "Hawaii" },
{ 0x67A1, 7, 0, 1, 1, "Hawaii" },
{ 0x67A2, 7, 0, 1, 1, "Hawaii" },
{ 0x67A8, 7, 0, 1, 1, "Hawaii" },
{ 0x67A9, 7, 0, 1, 1, "Hawaii" },
{ 0x67AA, 7, 0, 1, 1, "Hawaii" },
{ 0x67B0, 7, 0, 1, 1, "Hawaii" },
{ 0x67B1, 7, 0, 1, 1, "Hawaii" },
{ 0x67B8, 7, 0, 1, 1, "Hawaii" },
{ 0x67B9, 7, 0, 1, 1, "Hawaii" },
{ 0x67BA, 7, 0, 1, 1, "Hawaii" },
{ 0x67BE, 7, 0, 1, 1, "Hawaii" },
{ 0x67A0, 7, 0, 1, 1, "Hawaii", CHIP_HAWAII },
{ 0x67A1, 7, 0, 1, 1, "Hawaii", CHIP_HAWAII },
{ 0x67A2, 7, 0, 1, 1, "Hawaii", CHIP_HAWAII },
{ 0x67A8, 7, 0, 1, 1, "Hawaii", CHIP_HAWAII },
{ 0x67A9, 7, 0, 1, 1, "Hawaii", CHIP_HAWAII },
{ 0x67AA, 7, 0, 1, 1, "Hawaii", CHIP_HAWAII },
{ 0x67B0, 7, 0, 1, 1, "Hawaii", CHIP_HAWAII },
{ 0x67B1, 7, 0, 1, 1, "Hawaii", CHIP_HAWAII },
{ 0x67B8, 7, 0, 1, 1, "Hawaii", CHIP_HAWAII },
{ 0x67B9, 7, 0, 1, 1, "Hawaii", CHIP_HAWAII },
{ 0x67BA, 7, 0, 1, 1, "Hawaii", CHIP_HAWAII },
{ 0x67BE, 7, 0, 1, 1, "Hawaii", CHIP_HAWAII },
/* Carrizo Family */
{ 0x9870, 8, 0, 1, 0, "Carrizo" },
{ 0x9874, 8, 0, 1, 0, "Carrizo" },
{ 0x9875, 8, 0, 1, 0, "Carrizo" },
{ 0x9876, 8, 0, 1, 0, "Carrizo" },
{ 0x9877, 8, 0, 1, 0, "Carrizo" },
{ 0x9870, 8, 0, 1, 0, "Carrizo", CHIP_CARRIZO },
{ 0x9874, 8, 0, 1, 0, "Carrizo", CHIP_CARRIZO },
{ 0x9875, 8, 0, 1, 0, "Carrizo", CHIP_CARRIZO },
{ 0x9876, 8, 0, 1, 0, "Carrizo", CHIP_CARRIZO },
{ 0x9877, 8, 0, 1, 0, "Carrizo", CHIP_CARRIZO },
/* Tonga Family */
{ 0x6920, 8, 0, 2, 1, "Tonga" },
{ 0x6921, 8, 0, 2, 1, "Tonga" },
{ 0x6928, 8, 0, 2, 1, "Tonga" },
{ 0x6929, 8, 0, 2, 1, "Tonga" },
{ 0x692B, 8, 0, 2, 1, "Tonga" },
{ 0x692F, 8, 0, 2, 1, "Tonga" },
{ 0x6930, 8, 0, 2, 1, "Tonga" },
{ 0x6938, 8, 0, 2, 1, "Tonga" },
{ 0x6939, 8, 0, 2, 1, "Tonga" },
{ 0x6920, 8, 0, 2, 1, "Tonga", CHIP_TONGA },
{ 0x6921, 8, 0, 2, 1, "Tonga", CHIP_TONGA },
{ 0x6928, 8, 0, 2, 1, "Tonga", CHIP_TONGA },
{ 0x6929, 8, 0, 2, 1, "Tonga", CHIP_TONGA },
{ 0x692B, 8, 0, 2, 1, "Tonga", CHIP_TONGA },
{ 0x692F, 8, 0, 2, 1, "Tonga", CHIP_TONGA },
{ 0x6930, 8, 0, 2, 1, "Tonga", CHIP_TONGA },
{ 0x6938, 8, 0, 2, 1, "Tonga", CHIP_TONGA },
{ 0x6939, 8, 0, 2, 1, "Tonga", CHIP_TONGA },
/* Fiji */
{ 0x7300, 8, 0, 3, 1, "Fiji" },
{ 0x730F, 8, 0, 3, 1, "Fiji" },
{ 0x7300, 8, 0, 3, 1, "Fiji", CHIP_FIJI },
{ 0x730F, 8, 0, 3, 1, "Fiji", CHIP_FIJI },
/* Polaris10 */
{ 0x67C0, 8, 0, 3, 1, "Polaris10" },
{ 0x67C1, 8, 0, 3, 1, "Polaris10" },
{ 0x67C2, 8, 0, 3, 1, "Polaris10" },
{ 0x67C4, 8, 0, 3, 1, "Polaris10" },
{ 0x67C7, 8, 0, 3, 1, "Polaris10" },
{ 0x67C8, 8, 0, 3, 1, "Polaris10" },
{ 0x67C9, 8, 0, 3, 1, "Polaris10" },
{ 0x67CA, 8, 0, 3, 1, "Polaris10" },
{ 0x67CC, 8, 0, 3, 1, "Polaris10" },
{ 0x67CF, 8, 0, 3, 1, "Polaris10" },
{ 0x67DF, 8, 0, 3, 1, "Polaris10" },
{ 0x67C0, 8, 0, 3, 1, "Polaris10", CHIP_POLARIS10 },
{ 0x67C1, 8, 0, 3, 1, "Polaris10", CHIP_POLARIS10 },
{ 0x67C2, 8, 0, 3, 1, "Polaris10", CHIP_POLARIS10 },
{ 0x67C4, 8, 0, 3, 1, "Polaris10", CHIP_POLARIS10 },
{ 0x67C7, 8, 0, 3, 1, "Polaris10", CHIP_POLARIS10 },
{ 0x67C8, 8, 0, 3, 1, "Polaris10", CHIP_POLARIS10 },
{ 0x67C9, 8, 0, 3, 1, "Polaris10", CHIP_POLARIS10 },
{ 0x67CA, 8, 0, 3, 1, "Polaris10", CHIP_POLARIS10 },
{ 0x67CC, 8, 0, 3, 1, "Polaris10", CHIP_POLARIS10 },
{ 0x67CF, 8, 0, 3, 1, "Polaris10", CHIP_POLARIS10 },
{ 0x67DF, 8, 0, 3, 1, "Polaris10", CHIP_POLARIS10 },
/* Polaris11 */
{ 0x67E0, 8, 0, 3, 1, "Polaris11" },
{ 0x67E1, 8, 0, 3, 1, "Polaris11" },
{ 0x67E3, 8, 0, 3, 1, "Polaris11" },
{ 0x67E7, 8, 0, 3, 1, "Polaris11" },
{ 0x67E8, 8, 0, 3, 1, "Polaris11" },
{ 0x67E9, 8, 0, 3, 1, "Polaris11" },
{ 0x67EB, 8, 0, 3, 1, "Polaris11" },
{ 0x67EF, 8, 0, 3, 1, "Polaris11" },
{ 0x67FF, 8, 0, 3, 1, "Polaris11" },
{ 0x67E0, 8, 0, 3, 1, "Polaris11", CHIP_POLARIS11 },
{ 0x67E1, 8, 0, 3, 1, "Polaris11", CHIP_POLARIS11 },
{ 0x67E3, 8, 0, 3, 1, "Polaris11", CHIP_POLARIS11 },
{ 0x67E7, 8, 0, 3, 1, "Polaris11", CHIP_POLARIS11 },
{ 0x67E8, 8, 0, 3, 1, "Polaris11", CHIP_POLARIS11 },
{ 0x67E9, 8, 0, 3, 1, "Polaris11", CHIP_POLARIS11 },
{ 0x67EB, 8, 0, 3, 1, "Polaris11", CHIP_POLARIS11 },
{ 0x67EF, 8, 0, 3, 1, "Polaris11", CHIP_POLARIS11 },
{ 0x67FF, 8, 0, 3, 1, "Polaris11", CHIP_POLARIS11 },
/* Vega10 */
{ 0x6860, 9, 0, 0, 1, "Vega10" },
{ 0x687F, 9, 0, 0, 1, "Vega10" }
{ 0x6860, 9, 0, 0, 1, "Vega10", CHIP_VEGA10 },
{ 0x687F, 9, 0, 0, 1, "Vega10", CHIP_VEGA10 }
};
enum cache_type {
@@ -549,6 +550,19 @@ static const struct hsa_gfxip_table* find_hsa_gfxip_device(uint16_t device_id)
return NULL;
}
HSAKMT_STATUS topology_get_asic_family(uint16_t device_id,
enum asic_family_type *asic)
{
const struct hsa_gfxip_table *hsa_gfxip =
find_hsa_gfxip_device(device_id);
if (!hsa_gfxip)
return HSAKMT_STATUS_INVALID_PARAMETER;
*asic = hsa_gfxip->asic_family;
return HSAKMT_STATUS_SUCCESS;
}
bool topology_is_dgpu(uint16_t device_id)
{
const struct hsa_gfxip_table* hsa_gfxip =