Kyösti Mälkki ([email protected]) just uploaded a new patch set to 
gerrit, which you can find at http://review.coreboot.org/1431

-gerrit

commit 7a9858a9ef017a423ecfca540ba72be69cc54fd2
Author: Kyösti Mälkki <[email protected]>
Date:   Fri Aug 10 13:28:00 2012 +0300

    Redefine IORESOURCE flags for memory
    
    Previously IORESOURCE_UMA_FB had a special use as a workaround for
    AMD TOPMEM setup. With the workaround removed, this can now be treated
    as a generic flag for uncached MTRR setup as IORESOURCE_MTRR_UC.
    
    IORESOURCE_CACHEABLE had two uses: first to identify region as
    write-back cacheable and second to identify region as usable RAM
    in coreboot memory table. Split this to IORESOURCE_MTRR_WB and
    IORESOURCE_FREEMEM, respectively.
    
    Rename IORESOURCE_IGNORE_MTRR to IORESOURCE_MTRR_ANY. This should
    be used with extreme caution. For MMIO resource this is valid only
    because we know those regions fall outside any write-back region.
    MMIO resources will change to use IORESOURCE_MTRR_UC once MTRR code
    can handle/merge them correctly.
    
    IORESOURCE_MTRR_xx flags cannot be combined, make it an enumeration
    with mask IORESOURCE_MTRR_MASK.
    
    Change-Id: I6243a662f7ce012842e1d9f908699018d60a3280
    Signed-off-by: Kyösti Mälkki <[email protected]>
---
 src/arch/x86/boot/coreboot_table.c  | 2 +-
 src/cpu/amd/mtrr/amd_mtrr.c         | 2 +-
 src/cpu/x86/mtrr/mtrr.c             | 9 ++++-----
 src/include/device/device.h         | 8 ++++----
 src/include/device/resource.h       | 9 ++++++---
 src/northbridge/amd/amdfam10/acpi.c | 2 +-
 src/northbridge/amd/amdk8/acpi.c    | 2 +-
 7 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/src/arch/x86/boot/coreboot_table.c 
b/src/arch/x86/boot/coreboot_table.c
index d056837..9810db0 100644
--- a/src/arch/x86/boot/coreboot_table.c
+++ b/src/arch/x86/boot/coreboot_table.c
@@ -568,7 +568,7 @@ static struct lb_memory *build_lb_mem(struct lb_header 
*head)
 
        /* Build the raw table of memory */
        search_global_resources(
-               IORESOURCE_MEM | IORESOURCE_CACHEABLE, IORESOURCE_MEM | 
IORESOURCE_CACHEABLE,
+               IORESOURCE_MEM | IORESOURCE_FREEMEM, IORESOURCE_MEM | 
IORESOURCE_FREEMEM,
                build_lb_mem_range, mem);
        lb_cleanup_memory_ranges(mem);
        return mem;
diff --git a/src/cpu/amd/mtrr/amd_mtrr.c b/src/cpu/amd/mtrr/amd_mtrr.c
index bff6702..7c7db95 100644
--- a/src/cpu/amd/mtrr/amd_mtrr.c
+++ b/src/cpu/amd/mtrr/amd_mtrr.c
@@ -190,7 +190,7 @@ void amd_setup_mtrrs(void)
 
        state.tomk = state.tom2k = 0;
        search_global_resources(
-               IORESOURCE_MEM | IORESOURCE_CACHEABLE, IORESOURCE_MEM | 
IORESOURCE_CACHEABLE,
+               IORESOURCE_MEM | IORESOURCE_MTRR_MASK, IORESOURCE_MEM | 
IORESOURCE_MTRR_WB,
                set_fixed_mtrr_resource, &state);
 
        printk(BIOS_DEBUG, "DONE fixed MTRRs\n");
diff --git a/src/cpu/x86/mtrr/mtrr.c b/src/cpu/x86/mtrr/mtrr.c
index a061b54..1dba386 100644
--- a/src/cpu/x86/mtrr/mtrr.c
+++ b/src/cpu/x86/mtrr/mtrr.c
@@ -354,18 +354,17 @@ void set_var_mtrr_resource(void *gp, struct device *dev, 
struct resource *res)
        basek = resk(res->base);
        sizek = resk(res->size);
 
-       if (res->flags & IORESOURCE_UMA_FB) {
-               /* FIXME: could I use Write-Combining for Frame Buffer ? */
+       if ((res->flags & IORESOURCE_MTRR_MASK) == IORESOURCE_MTRR_UC) {
                state->reg = range_to_mtrr(state->reg,  basek, sizek, 0,
                        MTRR_TYPE_UNCACHEABLE, state->address_bits, 
state->above4gb);
                return;
        }
 
-       if (res->flags & IORESOURCE_IGNORE_MTRR) {
+       if ((res->flags & IORESOURCE_MTRR_MASK) == IORESOURCE_MTRR_ANY) {
                return;
        }
 
-       if (!(res->flags & IORESOURCE_CACHEABLE))
+       if ((res->flags & IORESOURCE_MTRR_MASK) != IORESOURCE_MTRR_WB)
                return;
 
        /* See if I can merge with the last range
@@ -422,7 +421,7 @@ void x86_setup_fixed_mtrrs(void)
         /* Now see which of the fixed mtrrs cover ram.
                  */
         search_global_resources(
-               IORESOURCE_MEM | IORESOURCE_CACHEABLE, IORESOURCE_MEM | 
IORESOURCE_CACHEABLE,
+               IORESOURCE_MEM | IORESOURCE_MTRR_MASK, IORESOURCE_MEM | 
IORESOURCE_MTRR_WB,
                set_fixed_mtrr_resource, NULL);
         printk(BIOS_DEBUG, "DONE fixed MTRRs\n");
 
diff --git a/src/include/device/device.h b/src/include/device/device.h
index 772b737..c049e12 100644
--- a/src/include/device/device.h
+++ b/src/include/device/device.h
@@ -189,16 +189,16 @@ void fixed_mem_resource(device_t dev, unsigned long index,
  * is used for all UMA except Intel Sandy/IvyBridge.
  */
 #define ram_resource(dev, idx, basek, sizek) \
-       fixed_mem_resource(dev, idx, basek, sizek, IORESOURCE_CACHEABLE)
+       fixed_mem_resource(dev, idx, basek, sizek, IORESOURCE_FREEMEM | 
IORESOURCE_MTRR_WB)
 
 #define bad_ram_resource(dev, idx, basek, sizek) \
-       fixed_mem_resource(dev, idx, basek, sizek, IORESOURCE_RESERVE | 
IORESOURCE_IGNORE_MTRR)
+       fixed_mem_resource(dev, idx, basek, sizek, IORESOURCE_RESERVE | 
IORESOURCE_MTRR_ANY)
 
 #define uma_resource(dev, idx, basek, sizek) \
-       fixed_mem_resource(dev, idx, basek, sizek, IORESOURCE_RESERVE | 
IORESOURCE_UMA_FB)
+       fixed_mem_resource(dev, idx, basek, sizek, IORESOURCE_RESERVE | 
IORESOURCE_MTRR_UC)
 
 #define mmio_resource(dev, idx, basek, sizek) \
-       fixed_mem_resource(dev, idx, basek, sizek, IORESOURCE_RESERVE | 
IORESOURCE_IGNORE_MTRR)
+       fixed_mem_resource(dev, idx, basek, sizek, IORESOURCE_RESERVE | 
IORESOURCE_MTRR_ANY)
 
 void tolm_test(void *gp, struct device *dev, struct resource *new);
 u32 find_pci_tolm(struct bus *bus);
diff --git a/src/include/device/resource.h b/src/include/device/resource.h
index ea1bab5..2ad143f 100644
--- a/src/include/device/resource.h
+++ b/src/include/device/resource.h
@@ -13,7 +13,7 @@
 
 #define IORESOURCE_PREFETCH    0x00001000      /* No side effects */
 #define IORESOURCE_READONLY    0x00002000
-#define IORESOURCE_CACHEABLE   0x00004000
+#define IORESOURCE_FREEMEM     0x00004000
 #define IORESOURCE_RANGELENGTH 0x00008000
 #define IORESOURCE_SHADOWABLE  0x00010000
 #define IORESOURCE_BUS_HAS_VGA 0x00020000
@@ -21,8 +21,11 @@
                                                 * to the bus below.
                                                 */
 #define IORESOURCE_BRIDGE      0x00080000      /* The IO resource has a bus 
below it. */
-#define IORESOURCE_UMA_FB      0x00100000      /* UMA framebuffer */
-#define IORESOURCE_IGNORE_MTRR 0x00200000      /* The resource does not affect 
MTRR setup. */
+
+#define IORESOURCE_MTRR_MASK   0x00f00000      /* MTRR cache types. */
+#define IORESOURCE_MTRR_ANY    0x00000000      /* The resource does not affect 
MTRR setup. */
+#define IORESOURCE_MTRR_UC     0x00100000      /* The resource creates an 
explicit un-cached MTRR hole. */
+#define IORESOURCE_MTRR_WB     0x00200000      /* The resource creates or 
merges with a write-back MTRR region. */
 
 #define IORESOURCE_RESERVE     0x10000000      /* The resource needs to be 
reserved in the coreboot table */
 #define IORESOURCE_STORED      0x20000000      /* The IO resource assignment 
has been stored in the device */
diff --git a/src/northbridge/amd/amdfam10/acpi.c 
b/src/northbridge/amd/amdfam10/acpi.c
index 87c2d8c..71ed812 100644
--- a/src/northbridge/amd/amdfam10/acpi.c
+++ b/src/northbridge/amd/amdfam10/acpi.c
@@ -121,7 +121,7 @@ unsigned long acpi_fill_srat(unsigned long current)
 
        srat_mem_state.current = current;
        search_global_resources(
-               IORESOURCE_MEM | IORESOURCE_CACHEABLE, IORESOURCE_MEM | 
IORESOURCE_CACHEABLE,
+               IORESOURCE_MEM | IORESOURCE_FREEMEM, IORESOURCE_MEM | 
IORESOURCE_FREEMEM,
                set_srat_mem, &srat_mem_state);
 
        current = srat_mem_state.current;
diff --git a/src/northbridge/amd/amdk8/acpi.c b/src/northbridge/amd/amdk8/acpi.c
index ba04da3..9de6624 100644
--- a/src/northbridge/amd/amdk8/acpi.c
+++ b/src/northbridge/amd/amdk8/acpi.c
@@ -128,7 +128,7 @@ unsigned long acpi_fill_srat(unsigned long current)
 
        srat_mem_state.current = current;
        search_global_resources(
-               IORESOURCE_MEM | IORESOURCE_CACHEABLE, IORESOURCE_MEM | 
IORESOURCE_CACHEABLE,
+               IORESOURCE_MEM | IORESOURCE_FREEMEM, IORESOURCE_MEM | 
IORESOURCE_FREEMEM,
                set_srat_mem, &srat_mem_state);
 
        current = srat_mem_state.current;

-- 
coreboot mailing list: [email protected]
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to