summaryrefslogtreecommitdiffstats
path: root/src/southbridge/nvidia/ck804/ck804_pci.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/southbridge/nvidia/ck804/ck804_pci.c')
-rw-r--r--src/southbridge/nvidia/ck804/ck804_pci.c30
1 files changed, 13 insertions, 17 deletions
diff --git a/src/southbridge/nvidia/ck804/ck804_pci.c b/src/southbridge/nvidia/ck804/ck804_pci.c
index a67eab3..70ccdc6 100644
--- a/src/southbridge/nvidia/ck804/ck804_pci.c
+++ b/src/southbridge/nvidia/ck804/ck804_pci.c
@@ -5,6 +5,7 @@
#include <console/console.h>
#include <device/device.h>
+#include <device/resource.h>
#include <device/pci.h>
#include <device/pci_ids.h>
#include <device/pci_ops.h>
@@ -13,10 +14,8 @@
static void pci_init(struct device *dev)
{
uint32_t dword;
-#if CONFIG_PCI_64BIT_PREF_MEM == 1
device_t pci_domain_dev;
- struct resource *mem1, *mem2;
-#endif
+ struct resource *mem, *pref;
dword = pci_read_config32(dev, 0x04);
dword |= (1 << 8); /* System error enable */
@@ -36,7 +35,6 @@ static void pci_init(struct device *dev)
pci_write_config32(dev, 0x4c, dword);
#endif
-#if CONFIG_PCI_64BIT_PREF_MEM == 1
pci_domain_dev = dev->bus->dev;
while (pci_domain_dev) {
if (pci_domain_dev->path.type == DEVICE_PATH_PCI_DOMAIN)
@@ -47,21 +45,19 @@ static void pci_init(struct device *dev)
if (!pci_domain_dev)
return; /* Impossible */
- mem1 = find_resource(pci_domain_dev, 1); // prefmem, it could be 64bit
- mem2 = find_resource(pci_domain_dev, 2); // mem
- if (mem1->base > mem2->base) {
- dword = mem2->base & (0xffff0000UL);
- printk_debug("PCI DOMAIN mem2 base = 0x%010Lx\n", mem2->base);
+ pref = probe_resource(pci_domain_dev, IOINDEX_SUBTRACTIVE(2,0));
+ mem = probe_resource(pci_domain_dev, IOINDEX_SUBTRACTIVE(1,0));
+
+ if (!mem)
+ return; /* Impossible */
+
+ if (!pref || pref->base > mem->base) {
+ dword = mem->base & (0xffff0000UL);
+ printk_debug("PCI DOMAIN mem base = 0x%010Lx\n", mem->base);
} else {
- dword = mem1->base & (0xffff0000UL);
- printk_debug("PCI DOMAIN mem1 (prefmem) base = 0x%010Lx\n",
- mem1->base);
+ dword = pref->base & (0xffff0000UL);
+ printk_debug("PCI DOMAIN pref base = 0x%010Lx\n", pref->base);
}
-#else
- dword = dev_root.resource[1].base & (0xffff0000UL);
- printk_debug("dev_root mem base = 0x%010Lx\n",
- dev_root.resource[1].base);
-#endif
printk_debug("[0x50] <-- 0x%08x\n", dword);
pci_write_config32(dev, 0x50, dword); /* TOM */
OpenPOWER on IntegriCloud