See patch. Carl Daniel sent something very similar before... This one is
the same but adds some preprocessing sugar to it so it does the right
thing both for UMA and non-UMA cases


-- 
coresystems GmbH • Brahmsstr. 16 • D-79104 Freiburg i. Br.
      Tel.: +49 761 7668825 • Fax: +49 761 7664613
Email: i...@coresystems.de  • http://www.coresystems.de/
Registergericht: Amtsgericht Freiburg • HRB 7656
Geschäftsführer: Stefan Reinauer • Ust-IdNr.: DE245674866

Fix K8 boards high tables on UMA systems (KT690 for example)

Thanks to Carl-Daniel for pointing this out with some example code.

Signed-off-by: Stefan Reinauer <ste...@coresystems.de>


Index: src/northbridge/amd/amdk8/northbridge.c
===================================================================
--- src/northbridge/amd/amdk8/northbridge.c     (revision 4831)
+++ src/northbridge/amd/amdk8/northbridge.c     (working copy)
@@ -837,7 +837,10 @@
 #if CONFIG_WRITE_HIGH_TABLES==1
 #define HIGH_TABLES_SIZE 64    // maximum size of high tables in KB
 extern uint64_t high_tables_base, high_tables_size;
+#if CONFIG_GFXUMA == 1
+extern uint64_t uma_memory_base, uma_memory_size;
 #endif
+#endif
 
 static void amdk8_domain_set_resources(device_t dev)
 {
@@ -1001,7 +1004,13 @@
                }
 
 
+#if CONFIG_GFXUMA == 1
+               printk_debug("node %d : uma_memory_base/1024=0x%08x, 
mmio_basek=0x%08x, basek=0x%08x, limitk=0x%08x\n", i, uma_memory_base >> 10, 
mmio_basek, basek, limitk);
+               if ((uma_memory_base >> 10) < mmio_basek)
+                       printk_alert("node %d: UMA memory starts below 
mmio_basek\n", i);
+#else
 //             printk_debug("node %d : mmio_basek=%08x, basek=%08x, 
limitk=%08x\n", i, mmio_basek, basek, limitk); //yhlu
+#endif
 
                /* See if I need to split the region to accomodate pci memory 
space */
                if ( (basek < 4*1024*1024 ) && (limitk > mmio_basek) ) {
@@ -1015,7 +1024,11 @@
 #if CONFIG_WRITE_HIGH_TABLES==1
                                        if (i==0 && high_tables_base==0) {
                                        /* Leave some space for ACPI, PIRQ and 
MP tables */
+#if CONFIG_GFXUMA == 1
+                                               high_tables_base = 
((uma_memory_base >> 10) - HIGH_TABLES_SIZE) * 1024;
+#else
                                                high_tables_base = (mmio_basek 
- HIGH_TABLES_SIZE) * 1024;
+#endif
                                                high_tables_size = 
HIGH_TABLES_SIZE * 1024;
                                                printk_debug(" split: %dK table 
at =%08llx\n", HIGH_TABLES_SIZE,
                                                             high_tables_base);
@@ -1051,7 +1064,11 @@
                             i, mmio_basek, basek, limitk);
                if (i==0 && high_tables_base==0) {
                /* Leave some space for ACPI, PIRQ and MP tables */
+#if CONFIG_GFXUMA == 1
+                       high_tables_base = ((uma_memory_base >> 10) - 
HIGH_TABLES_SIZE) * 1024;
+#else
                        high_tables_base = (limitk - HIGH_TABLES_SIZE) * 1024;
+#endif
                        high_tables_size = HIGH_TABLES_SIZE * 1024;
                }
 #endif
-- 
coreboot mailing list: coreboot@coreboot.org
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to