[coreboot] [patch] fix unexpacted MTRR setup for UMA memory

Stefan Reinauer stefan.reinauer at coresystems.de
Sat Oct 23 08:49:32 CEST 2010


On 22.10.2010, at 14:01, "Scott Duplichan" <scott at notabs.org> wrote:
> A patch that gets rid of the unexpected variable MTRR range while
> still using the carve out method of making UMA DRAM UC is easy enough
> (see below).
> 
> What are the chances that this patch fixes the AMD family 10h systems
> but breaks others? Is there someone here with a non-AMD UMA system?
> If so, it would be useful if you could load it with _less_ than 4GB
> of memory and then dump the variable MTRRs. If it also has the
> unexpected MTRR range, then patching mtrr.c is probably the right 
> thing to do.
> 
> Thanks,
> Scott
> 
> Signed-off-by: Scott Duplichan <scott at notabs.org>
> 
> Index: src/cpu/x86/mtrr/mtrr.c
> ===================================================================
> --- src/cpu/x86/mtrr/mtrr.c     (revision 5978)
> +++ src/cpu/x86/mtrr/mtrr.c     (working copy)
> @@ -423,9 +423,7 @@
>        if (var_state.hole_startk || var_state.hole_sizek) {
>                printk(BIOS_DEBUG, "Warning: Can't set up MTRR hole for UMA due to pre-existing MTRR hole.\n");
>        } else {
> -               // Increase the base range and set up UMA as an UC hole instead
> -               var_state.range_sizek += (uma_memory_size >> 10);
> -
> +               // Set up UMA as an UC hole
>                var_state.hole_startk = (uma_memory_base >> 10);
>                var_state.hole_sizek = (uma_memory_size >> 10);
>        }

I think the problem you are seeing might be that on some chipsets the memory resource still contains the UMA part of that memory while on others it just contains the usable memory. That would explain why removing that particular line from the code would solve the problem for you.

Not sure what the right solution would be but we should make sure that it's consistent across chipsets..

Stefan



More information about the coreboot mailing list