summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom St Denis <tom.stdenis@amd.com>2019-03-05 14:09:19 -0500
committerTom St Denis <tom.stdenis@amd.com>2019-03-05 14:09:19 -0500
commit1efd9e01d40da508c492f85aeea88aa5eaf03bce (patch)
tree4b809fb53ddb5675d625c1f4be66648dccf48161
parent9d05a446321dce2bf90ec1555d46916fe60f1db6 (diff)
read gtt/vram sizes from sysfs into asic config
Handy info that will also be used for things like proper XGMI support in the future. Signed-off-by: Tom St Denis <tom.stdenis@amd.com>
-rw-r--r--src/app/print_config.c4
-rw-r--r--src/lib/scan_config.c21
-rw-r--r--src/umr.h3
3 files changed, 28 insertions, 0 deletions
diff --git a/src/app/print_config.c b/src/app/print_config.c
index 8228656..a8263b9 100644
--- a/src/app/print_config.c
+++ b/src/app/print_config.c
@@ -106,6 +106,10 @@ void umr_print_config(struct umr_asic *asic)
printf("\tasic.instance == %d\n", asic->instance);
printf("\tasic.devname == %s\n", asic->options.pci.name);
+ printf("\n\tasic.gtt_size == %llu\n", (unsigned long long)asic->config.gtt_size);
+ printf("\tasic.vis_vram_size == %llu\n", (unsigned long long)asic->config.vis_vram_size);
+ printf("\tasic.vram_size == %llu\n", (unsigned long long)asic->config.vram_size);
+
printf("\n\tumr.version == %s\n\n", UMR_BUILD_REV);
printf("\tvbios.version == %s\n\n", asic->config.vbios_version);
diff --git a/src/lib/scan_config.c b/src/lib/scan_config.c
index 10f1f74..43ff50d 100644
--- a/src/lib/scan_config.c
+++ b/src/lib/scan_config.c
@@ -83,6 +83,22 @@ static void parse_rev3(struct umr_asic *asic, uint32_t *data, int *r)
asic->config.pci.subsystem_vendor = data[(*r)++];
}
+static uint64_t read_int(char *pci_name, char *fname)
+{
+ char buf[256];
+ FILE *f;
+ uint64_t n;
+
+ snprintf(buf, sizeof(buf)-1, "/sys/bus/pci/devices/%s/%s", pci_name, fname);
+ f = fopen(buf, "r");
+ if (f) {
+ fscanf(f, "%"SCNu64"\n", &n);
+ fclose(f);
+ return n;
+ }
+ return 0;
+}
+
/**
* umr_scan_config - Scan the debugfs confiruration data
*/
@@ -96,6 +112,11 @@ int umr_scan_config(struct umr_asic *asic)
if (asic->options.no_kernel)
return -1;
+ // read memory sizes
+ asic->config.gtt_size = read_int(asic->options.pci.name, "mem_info_gtt_total");
+ asic->config.vis_vram_size = read_int(asic->options.pci.name, "mem_info_vis_vram_total");
+ asic->config.vram_size = read_int(asic->options.pci.name, "mem_info_vram_total");
+
// read vbios version
snprintf(fname, sizeof(fname)-1, "/sys/bus/pci/devices/%s/vbios_version", asic->options.pci.name);
f = fopen(fname, "r");
diff --git a/src/umr.h b/src/umr.h
index d00e083..bf8225b 100644
--- a/src/umr.h
+++ b/src/umr.h
@@ -312,6 +312,9 @@ struct umr_asic {
struct umr_fw_config fw[UMR_MAX_FW];
struct umr_pci_config pci;
char vbios_version[128];
+ uint64_t vram_size,
+ vis_vram_size,
+ gtt_size;
} config;
struct {
int mmio,