summaryrefslogtreecommitdiff
path: root/src/lib/discover.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/discover.c')
-rw-r--r--src/lib/discover.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/lib/discover.c b/src/lib/discover.c
index b58d3cc..52cb96f 100644
--- a/src/lib/discover.c
+++ b/src/lib/discover.c
@@ -51,8 +51,21 @@ struct umr_asic *umr_discover_asic(struct umr_options *options)
FILE *f;
unsigned did;
struct umr_asic *asic;
+ long trydid = options->forcedid;
- if (options->forcedid < 0) {
+ // try to scan via debugfs
+ asic = calloc(1, sizeof *asic);
+ if (asic) {
+ asic->instance = options->instance;
+ asic->options = *options;
+ umr_scan_config(asic);
+ if (asic->config.pci.device)
+ trydid = asic->config.pci.device;
+ umr_free_asic(asic);
+ asic = NULL;
+ }
+
+ if (trydid < 0) {
snprintf(name, sizeof(name)-1, "/sys/kernel/debug/dri/%d/name", options->instance);
f = fopen(name, "r");
if (!f) {
@@ -93,7 +106,7 @@ struct umr_asic *umr_discover_asic(struct umr_options *options)
if (options->dev_name[0])
asic = umr_discover_asic_by_name(options, options->dev_name);
else
- asic = umr_discover_asic_by_did(options, options->forcedid);
+ asic = umr_discover_asic_by_did(options, trydid);
}
if (asic) {