Use environment variable to force gfx version

For experimental purpose, we need an option to change compute capability
by forcing the GfxIp version. This patch allows to use environment
variable HSA_OVERRIDE_GFX_VERSION=major.minor.stepping to replace the
default version. For example:
export HSA_OVERRIDE_GFX_VERSION=9.0.1

Change-Id: I90cfbd43619d9d3aebf53321d4e058f01bcd7088
Signed-off-by: Amber Lin <Amber.Lin@amd.com>
This commit is contained in:
Amber Lin
2017-06-22 12:12:17 -04:00
parent 5b3c9f0b31
commit 13aadde56e
+22 -7
View File
@@ -73,7 +73,6 @@ static const char *supported_processor_vendor_name[] = {
static HSAKMT_STATUS topology_take_snapshot(void);
static HSAKMT_STATUS topology_drop_snapshot(void);
//static int get_cpu_stepping(uint16_t* stepping);
static struct hsa_gfxip_table {
uint16_t device_id; // Device ID
@@ -706,11 +705,11 @@ HSAKMT_STATUS topology_sysfs_get_node_props(uint32_t node_id,
struct pci_access *pacc)
{
FILE *fd;
char *read_buf, *p;
char *read_buf, *p, *envvar, dummy;
char prop_name[256];
char path[256];
unsigned long long prop_val;
uint32_t i, prog;
uint32_t i, prog, major, minor, step;
uint16_t fw_version = 0;
int read_size;
const struct hsa_gfxip_table *hsa_gfxip;
@@ -802,7 +801,6 @@ HSAKMT_STATUS topology_sysfs_get_node_props(uint32_t node_id,
}
// get_cpu_stepping(&stepping);
props->EngineId.ui32.uCode = fw_version & 0x3ff;
props->EngineId.ui32.Major = 0;
props->EngineId.ui32.Minor = 0;
@@ -810,9 +808,26 @@ HSAKMT_STATUS topology_sysfs_get_node_props(uint32_t node_id,
hsa_gfxip = find_hsa_gfxip_device(props->DeviceId);
if (hsa_gfxip) {
props->EngineId.ui32.Major = hsa_gfxip->major & 0x3f;
props->EngineId.ui32.Minor = hsa_gfxip->minor;
props->EngineId.ui32.Stepping = hsa_gfxip->stepping;
envvar = getenv("HSA_OVERRIDE_GFX_VERSION");
if (envvar) {
/* HSA_OVERRIDE_GFX_VERSION=major.minor.stepping */
if ((sscanf(envvar, "%u.%u.%u%c",
&major, &minor, &step, &dummy) != 3) ||
(major > 63 || minor > 255 || step > 255)) {
fprintf(stderr,
"HSA_OVERRIDE_GFX_VERSION %s is invalid\n",
envvar);
ret = HSAKMT_STATUS_ERROR;
goto err;
}
props->EngineId.ui32.Major = major & 0x3f;
props->EngineId.ui32.Minor = minor & 0xff;
props->EngineId.ui32.Stepping = step & 0xff;
} else {
props->EngineId.ui32.Major = hsa_gfxip->major & 0x3f;
props->EngineId.ui32.Minor = hsa_gfxip->minor;
props->EngineId.ui32.Stepping = hsa_gfxip->stepping;
}
if (!hsa_gfxip->amd_name) {
ret = HSAKMT_STATUS_ERROR;