Signed-off-by: Tom St Denis <tom.stde...@amd.com>
Acked-by: Alex Deucher <alexander.deuc...@amd.com>

(v2): Updated enumerate to not stop on other AMD PCI devices
---
 src/app/enum.c               | 4 +---
 src/lib/create_asic_helper.c | 5 +++++
 src/lib/discover.c           | 9 +++++++--
 src/lib/mmio.c               | 8 ++++++++
 4 files changed, 21 insertions(+), 5 deletions(-)

diff --git a/src/app/enum.c b/src/app/enum.c
index 2c4b7695e3cb..1c56fe643616 100644
--- a/src/app/enum.c
+++ b/src/app/enum.c
@@ -55,7 +55,6 @@ void umr_enumerate_devices(void)
                return;
        }
        do {
-               x = 0;
                do {
                        pdevice = pci_device_next(pci_iter);
                } while (pdevice && pdevice->vendor_id != 0x1002);
@@ -64,12 +63,11 @@ void umr_enumerate_devices(void)
                        asics[devices].instance = -1;
                        asics[devices].asic->pci.pdevice = 
&asics[devices].pcopy;
                        asics[devices++].pcopy = *pdevice;
-                       x = 1;
                }
        } while (pdevice && devices < MAX_DEV);
 
        // now try to match devices against instances
-       for (y = 0; y < MAX_DEV; y++) {
+       for (y = 0; y < devices; y++) {
                snprintf(path, sizeof(path)-1, "/sys/kernel/debug/dri/%d/name", 
y);
                dri = fopen(path, "r");
                if (dri) {
diff --git a/src/lib/create_asic_helper.c b/src/lib/create_asic_helper.c
index d0ee34ac951e..ffca35d7af93 100644
--- a/src/lib/create_asic_helper.c
+++ b/src/lib/create_asic_helper.c
@@ -48,6 +48,11 @@ struct umr_asic *umr_create_asic_helper(char *name, int 
family, ...)
        }
        va_end(ap);
 
+       if (!asic->no_blocks) {
+               free(asic);
+               return NULL;
+       }
+
        asic->blocks = calloc(asic->no_blocks, sizeof(struct umr_ip_block *));
        if (!asic->blocks) {
                free(asic);
diff --git a/src/lib/discover.c b/src/lib/discover.c
index 0c4ee1c09ad8..0fc053712e37 100644
--- a/src/lib/discover.c
+++ b/src/lib/discover.c
@@ -269,20 +269,25 @@ struct umr_asic *umr_discover_asic(struct umr_options 
*options)
                                goto err_pci;
                        }
                        pci_iterator_destroy(pci_iter);
+
+                       // enable device if kernel module isn't present
+                       if (asic->options.no_kernel)
+                               pci_device_enable(asic->pci.pdevice);
+
                        pci_device_probe(asic->pci.pdevice);
 
                        use_region = 6;
                        // try to detect based on ASIC family
                        if (asic->family <= FAMILY_SI) {
                                // try region 2 for SI
-                               if (    asic->pci.pdevice->regions[2].is_64 == 
0 &&
+                               if (asic->pci.pdevice->regions[2].is_64 == 0 &&
                                        
asic->pci.pdevice->regions[2].is_prefetchable == 0 &&
                                        asic->pci.pdevice->regions[2].is_IO == 
0) {
                                                use_region = 2;
                                }
                        } else if (asic->family <= FAMILY_VI) {
                                // try region 5 for CIK..VI
-                               if (    asic->pci.pdevice->regions[5].is_64 == 
0 &&
+                               if (asic->pci.pdevice->regions[5].is_64 == 0 &&
                                        
asic->pci.pdevice->regions[5].is_prefetchable == 0 &&
                                        asic->pci.pdevice->regions[5].is_IO == 
0) {
                                                use_region = 5;
diff --git a/src/lib/mmio.c b/src/lib/mmio.c
index 987704cb9944..47e5150d3201 100644
--- a/src/lib/mmio.c
+++ b/src/lib/mmio.c
@@ -88,6 +88,10 @@ uint32_t umr_read_reg(struct umr_asic *asic, uint64_t addr, 
enum regclass type)
        if (addr == 0xFFFFFFFF)
                fprintf(stderr, "[BUG]: reading from addr==0xFFFFFFFF is likely 
a bug\n");
 
+       // lop off top bits in no-kernel mode
+       if (asic->options.no_kernel)
+               addr &= 0xFFFFFF;
+
        switch (type) {
                case REG_MMIO:
                        if (asic->pci.mem && !(addr & ~0xFFFFFULL)) { // only 
use pci if enabled and not using high bits 
@@ -113,6 +117,10 @@ int umr_write_reg(struct umr_asic *asic, uint64_t addr, 
uint32_t value, enum reg
        if (addr == 0xFFFFFFFF)
                fprintf(stderr, "[BUG]: reading from addr==0xFFFFFFFF is likely 
a bug\n");
 
+       // lop off top bits in no-kernel mode
+       if (asic->options.no_kernel)
+               addr &= 0xFFFFFF;
+
        switch (type) {
                case REG_MMIO:
                        if (asic->pci.mem && !(addr & ~0xFFFFFULL)) {
-- 
2.12.0

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to