Optionally treat ck804 memory-mapped PCI configuration space window as a
resource.  Not enabled by default because the resource should be
non-posted and there's no way to express that to the resource allocator.

Signed-off-by: Jonathan Kollasch <[email protected]>
Index: src/southbridge/nvidia/ck804/Kconfig
===================================================================
--- src/southbridge/nvidia/ck804/Kconfig        (revision 6607)
+++ src/southbridge/nvidia/ck804/Kconfig        (working copy)
@@ -43,4 +43,12 @@
        int
        default 1
 
+config CK804_MMCONF_SUPPORT
+       bool
+       default n
+
+config CK804_MMCONF_BASE_ADDRESS
+       hex
+       default 0xe0000000
+
 endif
Index: src/southbridge/nvidia/ck804/ht.c
===================================================================
--- src/southbridge/nvidia/ck804/ht.c   (revision 6607)
+++ src/southbridge/nvidia/ck804/ht.c   (working copy)
@@ -25,9 +25,47 @@
 #include <device/pci_ops.h>
 #include "ck804.h"
 
+static void ht_read_resources(device_t dev)
+{
+#if CONFIG_CK804_MMCONF_SUPPORT
+       struct resource *res;
+#endif
+
+       pci_dev_read_resources(dev);
+
+#if CONFIG_CK804_MMCONF_SUPPORT
+       res = new_resource(dev, 0x90); /* MMCONF */
+       res->base = CONFIG_CK804_MMCONF_BASE_ADDRESS;
+       res->size = 0x10000000;
+       res->align = 28;
+       res->gran = 28;
+       res->limit = 0xffffffff;
+       res->flags = IORESOURCE_MEM | IORESOURCE_ASSIGNED | IORESOURCE_FIXED;
+#endif
+}
+
+static void ht_set_resources(device_t dev)
+{
+#if CONFIG_CK804_MMCONF_SUPPORT
+       struct resource *res;
+#endif
+
+       pci_dev_set_resources(dev);
+
+#if CONFIG_CK804_MMCONF_SUPPORT
+       /* enable MMCONF */
+       res = find_resource(dev, 0x90);
+       if (res) {
+               pci_write_config16(dev, 0x90, 1<<12|((res->base >> 28)&0xf));
+               res->flags |= IORESOURCE_STORED;
+               report_resource_stored(dev, res, "");
+       }
+#endif
+}
+
 static struct device_operations ht_ops = {
-       .read_resources   = pci_dev_read_resources,
-       .set_resources    = pci_dev_set_resources,
+       .read_resources   = ht_read_resources,
+       .set_resources    = ht_set_resources,
        .enable_resources = pci_dev_enable_resources,
        .init             = 0,
        .scan_bus         = 0,
-- 
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to